ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AI应用架构设计五层图:模型网关、RAG与Agent编排实战

AI应用架构设计五层图:模型网关、RAG与Agent编排实战 做AI应用架构设计时间久了你会发现最难的部分往往不是把大模型的接口接进来而是怎么跟一个“输出不确定、时有幻觉、成本还随调用量飞涨”的系统长期共处。最近帮几个团队评审架构图发现大家画的基本都是同一个模板业务系统 - 大模型API - 结果返回。这张图没有错但它漏掉了AI应用架构设计中真正需要思考的所有分层。这篇文章想和你分享的是我自己拆解AI应用时常用的一套图解方法。我会用一张可直接套用的分层架构图作为主线逐个拆解模型网关、RAG数据管道、Agent编排、可观测性和成本治理这几块核心内容每一步都讲清楚“为什么这么做”并附上实际项目里验证过的参数和避坑经验。不管你是正在做知识库问答、智能客服还是准备搭一个多Agent协作系统这套框架都能帮你把问题定位到具体层级而不是永远在“模型为什么答错”这个黑盒里打转。1. 分层思维AI应用架构图应该怎么画1.1 三个底层差异决定了架构走向我在评审时习惯先问一个问题这个AI应用和传统后端应用到底哪里不一样如果只是把“接口换成大模型API”那架构图确实只有一条线。但实际做深了就会发现至少有三个差异会直接改变架构设计。第一个是结果的不确定性。传统函数输入输出都可预测有明确返回值和状态码大模型输出是概率性的同一个问题可能给出完全不同的答案。这意味着架构必须在“模型能力”和“业务承诺”之间加一层缓冲比如输出校验、格式约束、兜底逻辑不能拿裸模型直接对用户承诺“一定能正确回答”。第二个是上下文的复杂度。传统接口的请求体很短状态都在数据库里AI应用的每次请求可能需要携带大量上下文——历史对话、企业知识、工具返回结果。这段上下文从哪来、放多久、怎么裁剪如果不提前设计前期跑通没问题一到长对话或者复杂任务就卡死。第三个是成本的不可忽略。传统后端的成本主要来自机器和带宽相对稳定AI应用每次调用都在烧Token同样一个功能提示词写得啰嗦一点、上下文塞得太多、模型选得太大成本可能差出好几倍。这直接倒逼架构去考虑缓存、路由和压缩而传统架构通常不需要为“数据库查询太贵”做这么多设计。1.2 一张可以直接套用的五层架构图如果让我只给一张图来概括AI应用架构我会画五层而不是一条线┌────────────────────────────────────────────┐ │ 接入层Web/API/IM/语音负责会话与鉴权 │ ├────────────────────────────────────────────┤ │ 编排层Agent流程、工具调用、决策循环 │ ├────────────────────────────────────────────┤ │ 模型层LLM接入、模型网关、提示词管理 │ ├────────────────────────────────────────────┤ │ 数据层RAG管道、向量库、会话记忆、业务数据 │ ├────────────────────────────────────────────┤ │ 治理层可观测性、评测、限流、成本控制 │ └────────────────────────────────────────────┘接入层管的是用户怎么进系统鉴权、会话、流式推送都在这一层编排层决定“模型下一步该做什么”是直接问答还是调用工具、拆解任务模型层负责把不同厂商、不同规格的大模型能力统一暴露成可靠服务数据层负责决定“喂给模型什么”这是RAG和记忆管理的主场治理层则是最容易被忽略但最关键的没有日志、评测和成本控制前面四层做得再漂亮也撑不过上线第一周。这张图的核心价值在于当系统出问题时你可以先判断问题出在哪一层而不是笼统地说“AI不好用”。回答质量问题大概率在数据层和模型层流程卡死大概率在编排层延迟飙升则要先看接入层和模型层的流式、缓存配置。1.3 架构演进的顺序不要跳级很多团队一上来就想做个“带Agent的RAG系统”结果第一周就陷入各种奇怪的幻觉和死循环。我的建议是严格按阶段演进每跨一步都确认上一阶段真的稳了。第一阶段先只做接入层加模型层。把网关搭起来让业务能够稳定地调用模型流式输出、超时重试、成本计量全部跑通。这个阶段的目标是“调用可靠”不是“答案完美”。第二阶段加数据层。接入知识库做文档切分、向量化和检索让模型在回答时有依据。在这个阶段你会第一次直面RAG的检索质量也是架构图上最需要花时间调优的一层。第三阶段加编排层。在问答稳定之后才考虑让模型自主调用工具、执行多步骤任务。没有前两层打底Agent只会把不确定性放大而不是帮你解决问题。第四阶段补上治理层。评测集、回归测试、成本分析、链路追踪这些底座工作越早开始越省力。我见过太多项目上线两个月后才发现某个提示词版本导致成本翻倍就是因为治理层建设滞后。这个演进顺序没有多少创意但它是在无数项目里验证过的可靠路径。跳级往往意味着返工。2. 模型网关不只是一个代理2.1 网关解决的核心问题模型网关是AI应用架构里第一块基础设施但它很容易被误解成“一个统一API入口”。实际上网关要解决的问题远不止协议统一。首先是多模型路由。同一个应用里简单问答可以用轻量模型复杂推理需要旗舰模型抽取任务又可能是另一个模型最擅长。网关按任务类型、用户等级、成本预算来路由而不是写死在业务代码里。其次是限流与配额。没有网关任何一个调用方都能把整个系统的Token预算烧光。网关层做令牌桶限流和按调用方配额管理是控制成本的第一道闸门。第三是语义缓存。传统缓存按请求参数命中AI场景更适合做语义缓存——用户问“你们支持哪些协议”和“产品兼容什么协议”其实可以命中同一条缓存结果。网关层提前拦截能省下大量重复调用。第四是审计与计量。每个请求走了哪个模型、消耗了多少Token、耗时多久都要在网关层留下一份结构化记录。这是后面做成本分析和系统排障的数据底座。2.2 一个务实的网关接口设计网关接口不用自己发明协议直接兼容OpenAI的接口格式即可。这样所有上游代码都按同一套标准写后面换模型厂商就是个配置项的事。一个典型的请求体长这样{ model: gpt-xxx, max_tokens: 1024, temperature: 0.2, top_p: 0.9, stream: true, messages: [ {role: system, content: 你是一名严谨的技术顾问回答需要引用来源。}, {role: user, content: 我们的系统支持哪些接入方式} ] }这里有几个参数在生产环境里非常关键。max_tokens不仅仅是“最多生成多少字”它还意味着你愿意为单次调用付出多少成本上限设置过大会让异常场景下的费用失控。temperature在多数生产场景建议调到0.2以下低温度能显著减少输出漂移top_p和temperature在绝大多数实现里建议只调其中一个两个同时调容易互相干扰行为很怪。在网关层还会额外附加一些内部参数租户ID、调用方应用名、提示词版本号。这些不进模型上下文但必须写进日志。没有这些信息你后面排障时根本不知道某次糟糕的回答来自哪个业务线、哪个版本的提示词。2.3 流式输出与超时重试的架构陷阱流式输出不是“体验优化”而是架构必需。同一个长回答非流式接口可能30秒后才返回用户早就走了流式接口1秒内吐出第一个字用户感知完全不同。网关层做流式转发时要注意不要先把完整结果缓冲到内存里再返回那会完全抵消流式的意义要让数据边到边转。超时设计是我见过最容易翻车的地方。很多人给AI接口设一个总超时比如20秒结果流式响应刚读到一半就被掐断。更合理的做法是分段控制连接超时3到5秒首字节等待时间10秒左右总响应时长不做硬性截止而是依赖流式连接的心跳和业务层的空闲超时。客户端断开连接时网关要主动取消底层模型调用否则模型还在继续生成Token照烧这就是一笔无谓支出。重试也要有策略。模型接口返回限流错误时可以退避重试但返回内容审核错误或者参数错误时重试没有意义。我一般让网关只对429和网络类错误做最多两次重试并且用指数退避避免雪崩。3. RAG数据管道知识类AI应用的核心3.1 四个阶段缺一环都影响效果知识库问答是AI应用里最典型的场景而RAG是它的主心骨。很多人的第一版RAG就是把文档丢进向量库然后让模型“根据检索结果回答”。实测下来的效果往往一般问题就出在管道的前置环节。RAG管道我习惯拆成四段文档加载、文档切分、向量化与存储、检索与重排。每一段都有专门的坑。文档加载看似简单实际最容易被忽视的是元数据。PDF的页码、Word的标题层级、网页的发布时间这些元数据在检索阶段会帮大忙——你可以按“只检索最近一年的文档”或者“只检索产品A的资料”来做过滤。没有元数据所有文档就是一团混沌检索质量无从谈起。切分是影响RAG效果的最关键环节也是大多数人做得最粗糙的一步。直接按固定长度切比如每500个字符一刀切下去是典型的新手做法。这相当于把一篇文章撕成纸条再随机拼起来每个切片内部的语义都是断裂的。更合理的切分一定是先按文档本身的语义边界切——标题、章节、段落——再对超长段落做长度约束和重叠处理。向量化要关注的是Embedding模型选型和向量库选型。Embedding模型决定文本映射到向量的质量尽量选对中文支持好、维度适中的模型不是维度越高越好。向量库的核心能力是近似最近邻检索它适合做召回但你把业务数据也塞进去就不合适了——向量库没有传统数据库的事务和强一致能力该放MySQL还是放MySQL。检索阶段最大的认知误区是“召回越多越好”。给模型塞20段检索结果以为模型能自己挑重点其实模型很容易被无关内容带偏还白烧Token。我一般是召回20条左右经过重排后只保留3到5条高质量片段。3.2 切分参数的计算与选择切分参数如果只记一个值那没有意义因为不同文档的最优参数完全不同。我通常以“语义完整优先长度服从语义”为原则然后用这样一组参考配置起步文档类型推荐切分方式参考chunk大小重叠范围补充说明官方技术文档按标题层级逐节切分300-500字24-48字保留章节上下文检索命中率高FAQ/问答对按单条问答整体切分不强制限制0问题与答案必须同片不能拆开长篇行业报告按段落切分加滑动窗口400-800字48-96字段落较长时用重叠缓解边界断裂表格类数据按行组转成自然语言100-200字0整表向量化几乎无效要转描述数字只是起步参考真正判断切分好坏要看检索结果。一个简单有效的测试方法准备10个代表性问题手动从文档里翻出正确答案所在段落再看切分后的检索结果能不能命中这些段落。命中率低于70%优先调切分而不是调提示词。很多团队连自己的文档都忘了写评测集每改一次切分参数全凭感觉这是RAG项目做不好的通病。3.3 混合检索与重排向量不是万能的纯向量检索最典型的失效场景是精确匹配。用户问“产品支持FTP协议吗”文档里写的是“支持文件传输协议FTP”向量检索可能能靠语义关联到但用户带着型号编号“Model-X200”来问时向量检索大概率会输给关键词精确匹配。所以我建议在检索阶段做混合检索向量召回想找语义相似的段落关键词召回比如BM25或ES的全文检索负责精确匹配然后把两路结果合并送进重排器让重排器统一打分。这样设计虽然多一层依赖但检索准确率的提升是肉眼可见的。重排模型的选择很关键。重排器对每对“查询-候选段落”做精细打分比向量的粗召回要准得多但计算量大所以重排只对Top 20左右的候选用。重排后取前3到5条作为最终上下文再交给模型生成。整套链路下来响应质量会明显比“一把梭向量检索然后全塞给模型”更稳定。4. Agent编排层从单次问答到多步骤任务4.1 单Agent的循环与约束当你不再满足于“一问一答”开始做能自动调用工具、完成多步骤任务的Agent时架构的重心就从数据层移到了编排层。单Agent的基本循环是这样接到任务 - 组织上下文 - 大模型推理 - 如果需要工具就调用工具 - 观察工具返回结果 - 回到推理 - 得到最终答案。画成图就是一条带环的流程线但架构上最值得关注的不是这个环本身而是环的边界。第一个边界是循环上限。Agent理论上可以无限“推理-调工具-再推理”但Token成本不允许错误也不能无限重试。我一般设置max_steps为5到10步超过上限就强制结束并返回“任务未完成”的明确状态绝不硬凑答案。第二个边界是工具调用的参数校验。模型生成的工具参数不能直接执行必须在Agent框架里做一次格式和权限校验。比如内部查询工具只允许查指定数据库如果模型传进来一个非同义词的变体校验拦截比让它在运行时出错更可控。我在实际项目里就见过模型把日期格式传错导致查询空结果的案例所以现在所有工具入参都有正则和枚举校验。第三个边界是中间过程的记录。Agent每一步的思考、工具调用、返回结果都必须落日志。不然Agent绕了一圈给出一个错答案你根本不知道它在哪一步跑偏的想复盘都无从下手。4.2 多Agent协作的三种模式任务复杂到一定程度单个Agent的上下文会爆炸这时候考虑拆分多Agent。三种常见模式各有适用场景协作模式结构特点适用场景主要注意事项编排者/工作者主Agent拆解任务派发给子Agent执行并汇总复杂任务、多知识域问题主Agent上下文易膨胀需要定期压缩流水线每个Agent只负责固定阶段前一个输出是后一个输入内容生成、审核流程阶段之间要定义清晰的数据契约评审/辩论两个或多个Agent扮演不同角色互相校验高质量内容、代码审查成本翻倍要限制辩论轮次多Agent不是越多越好。每增加一个Agent就多一层通信开销和不确定性。我见过一个项目硬拆了8个Agent结果一半时间花在协调它们的关系上。合理做法是先从单个Agent开始等发现单一上下文的瓶颈确实成为瓶颈时再考虑拆分并且优先用流水线模式这种结构最简单的拆分方式。4.3 共享状态与上下文管理多Agent协作最忌讳的是把“所有历史记录”当成消息传递。Agent A把全部对话历史塞给Agent BAgent B又塞回给Agent A上下文越来越长最后谁都无法专注自己的任务。更好的设计是黑板模式维护一个任务状态区每个Agent只读写自己关心的字段。比如一个调研任务的状态区可以有目标、已收集资料、结论草稿、待验证项。负责搜索的Agent只更新“已收集资料”负责分析总结的Agent只读取这部分并更新“结论草稿”互不干扰。会话记忆的保存也一样。不要存全文对话记录而应该让模型在关键节点生成结构化摘要比如用户需求、已确认信息、未解决问题。每次新请求来时把摘要组装进上下文既省Token又能保持跨轮一致性。这个设计在长对话场景下效果极其明显几乎是必选项。5. 可观测性与评测没有这两块架构就是空中楼阁5.1 日志里应该记录什么传统后端的日志套路拿到AI应用上不完全够用。除了请求日志和链路追踪你还需要单独记录AI特有的字段。我自己用的结构化日志模板里以下几项是必需的记录项示例用途请求ID与链路IDtrace_idab12, span_idcd34串联全链路排障模型与提示词版本modelgpt-xxx, prompt_v3精确定位是哪个版本的回答有问题Token用量prompt_tokens1200, completion_tokens450成本核算与异常检测工具调用轨迹toolstock_query, args{code:600519}, resultsuccessAgent行为完整回放上下文字数context_tokens2100监控上下文膨胀风险用户反馈feedbackthumbs_down, session_id...上线后的质量评估这里有个细节提示词本身不建议全量落日志量大且容易泄漏敏感信息。我的做法是给每个版本的提示词算一个哈希值日志里只记版本哈希源码库保留提示词原文。排障时按哈希反查版本即可既安全又够用。5.2 评测集与回归测试AI应用没有传统意义上的单测因为输出没有唯一正确值。但你可以建评测集用一组固定的问题来度量系统表现。这个动作晚做不如早做。首先要凑一批有代表性的问题覆盖高频用户提问、边界问题、易错问题数量不用太多先凑20到30个形成基线。每个问题要写清楚“期望包含的答案点”比如问“支持哪些接入方式”期望点包括“Web API、私有化部署、SDK”这三项模型答出任意两项算部分得分。之后每次调整提示词、改切分参数、换模型都要跑一遍同样的评测集对比得分。如果得分下降说明这次改动有副作用要么回滚要么补丁。整个过程可以用LLM当初步裁判来批量打分但关键案例必须人工复核自动裁判本身也会失误。有了评测集你才算从一个“靠感觉调AI”的团队进入到一个“有度量地调AI”的团队。这一步在架构图上看起来只是治理层的一小块却是AI应用长期稳定运行的底气。6. 高频问题排查实录6.1 症状-原因-对策速查表这一节我把实际项目中见过的高频问题整理成一张速查表适合贴在工位上症状可能原因架构层对策回答慢、用户感知卡顿没走流式上下文过长模型选型过大启用流式压缩摘要按任务路由小模型检索答非所问切分破坏语义只用了纯向量召回按语义边界切分加混合检索和重排Agent反复调工具绕圈循环上限缺失工具返回失败但仍继续设max_steps统一工具返回格式并校验结果模型输出格式漂移提示词约束太弱温度高降低temperature加输出校验器和重试并发一高就熔断网关限流和重试策略粗糙令牌桶限流对429做指数退避月底Token账单异常无缓存无多模型路由日志未计量加语义缓存按任务路由低配模型结构化计量幻觉导致业务错误生成过程和知识源缺少绑定强制引用来源编号关键结论做事实核对6.2 两个印象深刻的真实案例第一个案例来自一个企业知识库项目。用户反复反馈“产品支持哪些协议”这个问题答不对我们排查了很久最后发现PDF原文里有一张协议对照表切分脚本按固定字符把这张表从中间截断了。上半截只有协议名下半截只有备注各自向量化之后语义都不完整检索召回率自然上不去。后来改成用表格识别先提取整表转成自然语言描述再入库这个问题才彻底解决。这个案例说明RAG的坑往往不在模型而在文档处理管道。第二个案例是多Agent协作里常见的“假成功”。某个子Agent调用查询工具时工具内部抛了异常但接口返回了一个空数组这个空数组被当作“查询成功无结果”传给了主Agent。主Agent据此给出了“系统中不存在该数据”的结论。事后排查发现是工具返回结构没有统一标准失败和空结果看起来一模一样。后来我们把所有工具返回统一成结构化格式强制包含status字段失败时必须带error_code和error_message主Agent在编排循环里先检查status再做下一步决策。自从这个改动上线类似问题再没出现过。6.3 排查时的通用思路如果你接手了一个没搭好治理层的AI应用排障确实会很痛苦但也不是没有章法。我通常按这个顺序走先看网关日志确认模型层是否正常返回再查检索阶段召回的内容是否与问题匹配然后检查Agent循环的中间步骤在哪一步开始偏离最后复现评测集里的相似问题确认是不是回归。这个顺序的核心思想是先用日志定位到具体层再深入那一层的细节。最怕的是跳过日志靠猜去调提示词或换模型。那种改法偶尔能中一次但永远不知道改对了什么也无法积累经验。AI应用架构设计和传统后端开发最不一样的地方就是它永远在能力、成本和可控性三者之间找平衡。我刚入行时也喜欢先把架构图画得特别复杂模型层、Agent层、数据管道全上实际跑起来才发现每一层都需要独立的治理能力做支撑。后来我学乖了每次只往前推进一层把图的右下角那圈“治理层”当成地基来看。画图的意义从来不是图本身而是逼着你把每个组件之间的边界、数据和失败模式想清楚。希望这张五层架构图能给你一个靠谱的起点。
返回列表