ARTICLE DETAIL

资讯详情

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

图解AI应用架构设计:从RAG到Agent的工程落地指南

图解AI应用架构设计:从RAG到Agent的工程落地指南 做了好几年AI应用架构从早期在Notebook里跑个模型demo到后来带团队把RAG、AI Agent这些能力真正部署上线我最大的一个感受是大部分项目崩掉不是因为算法不行而是因为架构没有“画清楚”。所谓“画清楚”就是在动手写代码前能用一张图把组件、数据流、调用链和状态边界说明白。AI应用的架构设计和传统软件架构不太一样模型推理、Prompt、上下文窗口、工具调用、向量库这些东西单独看都懂但组合起来以后系统的行为会变得非常“非线性”。这也是为什么“图解AI应用架构设计”这个主题越来越火几乎已经成为AI工程团队里的硬技能。这篇文章我会从一个一线从业者的角度把AI应用架构设计里最关键的模块、画图方法、三类常见应用模式、以及我踩过的坑一次讲完。不管你是在做一个带知识库的问答机器人还是在搭多个AI Agent协作的系统这套思路都能直接落地。1. 先别急着画图AI应用架构到底在解决什么问题很多人拿到“AI应用架构设计”这个题目第一反应是找画图工具然后开始堆组件。这其实搞反了。架构图的本质不是“画得多好看”而是把系统的行为边界讲清楚。AI应用最大的难点在于模型输出是不确定的上下文是有限的工具调用是可能失败的。如果不提前画出边界上线之后很容易变成一团乱麻。1.1 AI架构设计与传统后端设计的最大差异传统后端架构的核心是确定性接口有契约数据库有事务队列有ACK。你画一个订单系统基本能预判每个环节的状态流转。但在AI应用里核心组件是一个“概率引擎”你给它同样的输入它可能给出完全不同的输出。这就像外包团队里来了个创意型选手能力很强但你不能用标准SOP去约束他的“黑盒思考”。所以AI架构设计首先要承认两件事模型不可完全控制你能控制的是输入、工具、流程但不能控制模型“想什么”。上下文是关键资源所有记忆、知识、规则都得塞进有限的上下文窗口里架构要负责“省着用”。这个差异决定了架构图不能只画静态结构还要画出数据如何流转、决策在哪里发生、失败如何兜底。比如你在图中画一个“RAG检索模块”如果没标注“检索失败时走什么分支”那这张图在真实运行里就是空洞的。1.2 一张架构图能替团队挡掉哪些坑我见过太多团队架构图只是立项答辩时用一次之后再也没有更新。这样等于没画。真正有用的架构图应该成为团队的“共同语言”至少在三个环节持续发挥价值第一个是需求对齐。产品说“做一个智能客服”工程师理解成“接一个GPT API”测试理解成“有问答界面就行”。如果有一张图把“用户问题→意图识别→知识检索→模型生成→人工兜底”画出来各方分歧在第一周就能暴露而不是等开发完才吵。第二个是性能扩展。AI应用上线后一定会遇到token消耗高、响应慢、工具调用超时这类问题。架构图能帮你定位瓶颈到底在模型推理、向量检索还是业务代码。看不到全貌就只能凭感觉调参。第三个是故障复盘。AI系统很容易出现幻觉、重复回答、上下文串号等诡异现象。如果每层职责不清晰复盘就会变成“模型背锅”大会。架构图上的每个组件都对应一个责任边界谁的问题一目了然。画架构图的过程本质上是逼着团队把“模糊的AI能力”拆成“明确的工程系统”。这就是架构设计的价值所在。2. 图解AI应用架构的分层设计我比较习惯用分层视图来做AI应用架构设计的起点而不是一上来就画所谓的“AI Agent大图”。分层的好处是每一层可以独立演进、独立测试也让团队里不同角色的人都能找到自己关心的东西。2.1 四层模型接入层、编排层、模型层、记忆与数据层我目前在大部分项目里用的模型是四层每一层职责非常明确层级主要组件核心职责典型问题接入层Web/App、消息网关、API网关接收用户请求做鉴权、限流、格式转换请求并发过高、协议不统一编排层Prompt模板、工具路由、Agent框架、任务队列决定“先做什么再做什么”调用模型和工具Prompt失控、工具调用无超时模型层大模型推理服务、向量嵌入模型、微调模型完成语义理解、生成、检索向量化延迟高、token消耗多数据与记忆层向量数据库、Redis、业务数据库、对象存储保存上下文、知识库、会话状态数据不一致、上下文越界这四层不是所有项目都要做满。做一个简单问答机器人可能只要“接入层→模型层→数据层”就够。但如果你想做得像个“Agent”编排层就必须独立出来因为工具调用、循环决策都发生在这里。画分层架构图时我最常用的是一个非常朴素的“盒子箭头”画法核心是标清楚每一层之间只有一条数据通道。比如编排层和模型层之间只传Prompt和模型输出不要偷偷传数据库连接。架构图上一个多余箭头可能就预示着一处隐蔽的耦合。2.2 关键组件图RAG链路、Agent回路、记忆模块分层图解决“有哪些层”组件图解决“层里面怎么配合”。对于AI应用有三条链路是你必须能在图上闭着眼睛画出来的第一条是RAG链路文档→切片→向量化→存入向量库→检索→拼接Prompt→生成回答。这条链路的核心是“检索质量决定生成质量”。架构图上要标出切分策略按段落还是按语义、向量库选型、以及检索结果的数量限制。第二条是Agent回路接收任务→规划步骤→选择合适的工具→执行工具→观察结果→再决策。这条链路不是直线是一个循环。画的时候一定要用带环路的箭头不然开发很容易把它实现成“只执行一次工具调用”。第三条是记忆模块短期记忆当前会话上下文、长期记忆用户画像、历史偏好、外部记忆向量库里的知识。画图时记忆模块要单独拉出来不和业务数据库混在一起因为它的读写频次和一致性要求完全不一样。这三条链路如果能画清楚架构已经从“概念”变成“可实施设计”了。3. 三类典型AI应用架构的实操拆解为了不让分层设计停留在纸面上我拿三个我们复盘过很多遍的典型架构来做一次实操拆解。这三种结构几乎是所有AI应用演化的原型RAG问答、工具调用型Agent、多Agent协作。3.1 RAG知识问答架构索引、检索、生成RAG看起来简单但实际上它的架构设计误差空间非常大。一个标准RAG问答系统的架构图可以简化成[用户] -- [接入层] -- [编排层问题改写] -- [检索模块] -- [向量数据库] | ↑ v | [重排序/过滤] | v | [Prompt拼接] --------- | v [模型推理服务] -- [回答引用来源]这套架构在实际部署中要回答三个关键问题改写模块要不要加很多用户提问是口语化、上下文残缺的直接拿原问题去检索效果很差。我们通常会在检索前加一个“问题改写”步骤让LLM把问题转成更规范的检索语句。缺点是增加了一次模型调用所以在架构图里要标注这个改写的延迟成本。向量检索和关键词检索怎么配合向量检索擅长语义相似但不擅长精确匹配比如型号、人名、编号。常见做法是混合检索向量召回Top50 关键词召回Top50去重后再做重排序。这个细节不画进架构图开发很容易只实现一种检索方式。要不要做引用溯源企业合规场景里AI回答必须给出依据。架构图里输出端要单独画一个“引用拼接”组件把检索到的文档片段id和生成内容对齐。这个组件看起来很边缘但没有它知识库问答就只能是“看起来能用”。从工程实现上看RAG架构需要偏重数据的“上游质量”。我在架构评审时最常问的一句话是“如果检索结果全是垃圾这个系统靠什么兜底”大部分情况下答案是没有兜底只会答出幻觉。所以架构图里一定要有评估反馈回流标注“用户是否点赞/点踩来反哺检索和生成”。3.2 工具调用型Agent架构循环决策比模型本身更重要当AI应用不只“说话”还要“做事”的时候架构就开始真正复杂了。一个工具调用型Agent的架构图核心不是模型而是那个“决策循环”[任务输入] -- [规划器] -- [是否需要工具] | 是 否 v | [工具选择] -- [直接生成回答] | v [执行工具/API] | v [结果观察与校验] -- [是否继续] --是-- [规划器] | 否 v [输出最终结果]这个架构是我见过的、AI应用里最“像传统软件”又最“不传统”的部分。传统软件通过if-else和状态机来控制流程Agent则是让模型来动态决定下一步。这里就要在架构图上画清楚几个边界工具注册表Agent能调用哪些工具必须在架构图里明确画出。工具列表是“白名单”而不是“任意代码”。我们遇到过一次Agent自作主张调用了一个高损耗API就是因为架构图里没框住工具边界。校验节点工具返回结果之后不能让Raw输出直接进下一轮Prompt。要先做清理、截断、格式校验。很多Agent跑飞就是因为工具返回的内容把上下文污染了。循环上限Agent回路的“无限循环”是隐藏炸弹。架构图里要标一个终止条件比如最多执行5次工具调用超过次数就走人工或默认回复。这个参数必须上图否则开发根本不记得加。这一类的典型案例是“AI编程助手”和“AI测试开发”工具用户提一个需求Agent调用代码检索、仓库读取、测试脚本生成、命令执行等工具。工具越多循环越深出问题的概率就指数上升。没有清晰的Agent回路架构根本扛不住复杂场景。3.3 多Agent协作的复杂架构画清楚谁是“老板”再往上走一步就是多个Agent协作。很多团队一听到“多Agent”就兴奋觉得高端、智能。但从架构设计角度看多Agent协作带来的不是能力增强而是“关系复杂度”爆炸。我见过太多多Agent项目最后的失败都归结为一个词分工混乱。一个相对靠谱的多Agent架构通常是“主管-工人”模式[用户请求] | v [主管Agent拆解任务、分配子任务] | -- [工人Agent A检索与分析] -- [结果回传] | -- [工人Agent B代码生成] -- [结果回传] | -- [工人Agent C验证与反馈] -- [结果回传] | v [主管Agent汇总、冲突消解、最终输出]这个架构图里至少要画三种关系隶属关系哪个Agent指挥哪个Agent谁是全局编排者谁是执行者。不要出现“两个Agent都不想决策”的局面。上下文共享边界工人Agent需要看到多少任务上下文是只有自己的子任务还是能访问全部用户信息很多架构图漏了这个直接导致Agent之间互相覆盖信息。冲突消解机制如果两个Agent给出不同结论谁来拍板架构图上要画一个“仲裁节点”它可以是主管Agent也可以是一段确定性代码。现实中大部分场景不应该让模型去仲裁模型而应该用规则先过滤。如果你打开一些开源多Agent框架的代码会发现它们的架构图比业务代码复杂得多。原因很简单多Agent系统里通信成本已经高于模型能力成本。架构图如果不把这部分画明白代码就是一团互相调用的乱麻。4. 画图时最容易被漏掉的核心细节我评审过很多AI架构设计图组件没画错但往往在三个细节上集体翻车。这三个细节是上下文管理、状态边界、安全合规。它们不画出来架构图是“好看但不能用”的。4.1 上下文窗口与记忆策略命脉藏在细节里大模型的上下文窗口是有限的就像一个人的短期记忆有限一样。所以架构图里必须给每个Agent画一个“上下文预算分配表”而不只是写“把Prompt发给模型”。我习惯在上图时同步标注几个参数上下文组成建议占比说明系统指令5%-10%固定角色和规则尽量精简用户当前输入10%-20%直接需求优先保证历史对话20%-40%滑动窗口旧的做摘要检索的知识片段20%-40%动态注入按相关性截断工具返回结果10%-20%只保留关键字段必须压缩架构图不画这个开发阶段就会面临一个问题上线后用户对话一长token蹭蹭涨模型开始“忘记”前面的内容。等出问题了再去优化成本极高。正确做法是在架构层面提前定义“记忆压缩器”定期把旧对话摘要化把重要事实抽出来存到独立的Memory服务里。上下文策略跟架构选型强相关。比如你选用了一个上下文窗口比较大的模型表面上能省去压缩逻辑但单次请求成本和延迟都会跟着涨。这部分必须在架构评审时就算明白而不是画图时一带而过。4.2 会话状态与幂等性AI应用也是后端系统很多AI架构图只画“用户→模型”两条线完全没画会话状态。这会导致两个线上事故第一个是用户在聊天里提到“刚才说的那个文档”但后端不记得“刚才”指的是什么第二个是用户点击两次发送按钮系统产生了两个重复请求最后生成了两条不一致的回答。AI应用首先是后端系统必须有状态管理和幂等控制。架构图里至少要画出会话上下文存储Redis还是数据库TTL多长时间跨设备是否同步幂等键设计每个用户请求有没有唯一request_id重复请求如何被过滤任务编排状态Agent执行到一半进程重启了任务是从头再来还是从断点恢复我见过一个很惨痛的案例我们把一个长任务Agent做成“无状态”结果用户在网页上等了三分钟刷新页面之后任务进度消失。问题不在模型在于架构图里没有画“检查点”组件。后来在架构图里补了一个状态存储节点和断点续跑逻辑问题才解决。画架构图时一定记得模型可以无状态但应用必须是有状态的。4.3 安全、权限与合规必须作为边界画出来合规和安全在AI架构里的优先级被我列在最容易被漏掉的位置是因为很多人觉得“这不是工程师该想的事”。但AI应用的攻击面比传统应用大得多提示词注入、敏感数据外泄、越权访问模型能力、生成内容涉政涉黄等每一条都可能在架构设计阶段被“画掉”。在架构图上安全相关组件不是装饰而是硬边界数据脱敏节点用户输入进入模型之前先过一道脱敏服务把身份证号、手机号、内部token替换成占位符。生成结果后再做反脱敏。这个“脱敏→模型→反脱敏”链路必须画进架构图。权限校验层不是所有用户都能调用所有工具。比如普通用户不能触发“数据库写操作”工具。权限校验要放在工具路由之前让Agent没有机会越权。审计日志模型输入输出、工具调用记录、用户行为日志全部要留存。不只是为了排查问题很多行业合规审计要求必须能追溯每一次AI决策。模型输出过滤生成结果在返回给用户之前加一个规则模型双重审核的过滤器。很多平台上线后才发现生成式内容不可控必须在这个环节做熔断。我特别想说一句AI应用的合规不能靠模型“自觉”。模型没有道德观念它只会最大化概率地生成下一个token。所以架构图上必须给安全组件画成“不可跳过节点”而不是“可选组件”。5. 从架构图到生产环境的落地要点画图只是第一步落地才是真正的考验。我见过架构图画得很漂亮结果部署完完全跑不起来的项目。问题往往出在接口协议、模型部署、可观测性这三个环节上。5.1 接口设计以“稳定协议”作为组件边界AI应用内部组件之间通信最容易犯的错误是“直接把自然语言当接口”。比如编排层让工具模块执行“请从数据库里查一下用户的订单”这个说法太模糊工具模块根本没法稳定解析。一个靠谱的AI应用架构在工具调用、RAG检索、Agent通信之间应该使用结构化的协议而不是自然语言。我们项目里每个工具都定义一个JSON Schema比如{ function: query_order, description: 查询用户的订单状态, parameters: { type: object, properties: { user_id: {type: string, description: 用户唯一ID}, order_id: {type: string, description: 订单号可选} }, required: [user_id] } }模型需要调用工具时输出一个符合Schema的结构化JSON然后由编排层去执行真正的API。这样做的最大好处是模型和业务服务之间被一个稳定的契约隔开了模型升级不会破坏流程业务重构也不会影响模型调用。同时Agent与Agent之间的通信消息也要设计协议。我个人比较推荐消息中除了“文本内容”之外带上消息类型、目标角色、源角色、时间戳和引用上下文ID。否则多Agent协作时你根本没法定位“这句话到底是哪个Agent说的”。5.2 模型服务与推理部署的选型建议架构图里画了一个“模型服务层”落地时就要回答这个大模型怎么跑市面上常见的方案有四类没有绝对的好坏只看场景匹配方案优点缺点适合场景托管API接入快无需运维效果好数据出域风险、成本随调用量上升原型验证、中小规模业务私有化部署数据安全可控可深度调优GPU成本高、运维复杂金融、医疗、企业知识库边缘/端侧部署低延迟离线可用模型参数有限效果打折移动端、硬件离线场景Serverless推理按需伸缩免运维冷启动延迟、长连接受限突发流量、低频工具调用这里想强调一个很实际的点不要让同一个模型部署方案去服务所有场景。比如你有一个“知识库问答”和“闲聊陪伴”两个功能它们的时延要求和安全级别都不一样。架构图上可以把模型层拆成两个推理服务池一个走托管API求快一个走私有化部署求稳。这样虽然是“浪费了一点架构复杂度”但在真实业务里往往是更省心的选择。模型部署还有一处容易踩坑并发和限流。LLM推理是计算密集型的单实例并发能力有限架构图里必须画清“限流、排队、降级”策略。我们每次上线前都要做压测然后给网关配置TPM每分钟token数级别的限流防止某个用户把整个实例打爆。5.3 可观测性AI应用要额外盯住哪些命脉指标传统后端的监控指标是QPS、错误率、响应耗时但AI应用还需要额外看一组“模型特有指标”。如果架构图里没有规划可观测性线上出问题基本就是“盲人摸象”。我建议在架构设计阶段就定义清楚五类指标Token消耗输入token、输出token分别多少Prompt里哪一部分占比最大这个直接关联成本和上下文溢出。工具调用成功率Agent调用工具是否成功失败原因是什么这是很多Agent跑飞的元凶。检索质量指标向量检索召回多少条重排序后保留多少用户点击/点赞率如何低点击率往往意味着检索失效。模型延迟分位数P50、P95、P99的响应延迟尤其要关注长Prompt时的延迟膨胀。生成内容审核率多少人机审核拦截率这是安全合规前哨。工具方面我目前常用的组合是Langfuse或LangSmith用来跟踪模型调用链路Phoenix和Grafana用来盯系统指标业务日志单独存到ClickHouse或ES里做排查。不一定要上很重的平台但“链路追踪”必须有。没有tracing你就没法看到“一次用户请求”到底是模型生成了5秒还是检索用了4秒。6. 真实踩坑记录与架构演进建议最后这部分我说几个我们团队真实踩过的坑。这些坑让我反复修改了很多次架构图也算是一点经验沉淀。6.1 三个类比式的翻车现场第一个坑是把业务规则全塞进Prompt。当时觉得“让模型理解规则”很聪明结果每次业务策略调整都要改Prompt而且模型经常在一些边界case上判断错误。后来我们把所有确定性规则改成代码执行只有模糊判断才交给模型。架构原则就是能用代码解决的不要交给模型。这一条我写进了团队的设计规范。第二个坑是没有画出“会话隔离边界”。有个客服系统上线后用户A问了订单内容用户B居然在稍后的对话里看到了类似内容。原因就是我们把所有用户会话都塞进了同一个Redis队列根本没有user_id隔离。架构图上画了“会话存储”但没画“按用户分片”。这个教训特别贵因为涉及用户隐私整改还做了数据清除。第三个坑是规划了缓存但没画成本边界。我们给架构图画了一个结果缓存层原意是命中缓存可以省钱。结果缓存越堆越多过期策略没人管最后用户拿到的是两个星期前的陈旧回答。所以现在我在画“缓存组件”的时候都会顺手标注三项缓存key怎么设计、TTL多久、如何强制刷新。缓存不是简单的“加了就快”而是“有策略才能不走样”。6.2 接地气的画图工具和团队工作流工具选择上我的个人建议是不要迷信“高大上”团队能协作才是第一位的。我们用的最多的是draw.io和Excalidraw前者适合画严谨的结构图后者适合方案讨论时快速画草稿。如果项目文档放在Git仓库里也可以考虑用文本化绘图工具比如PlantUML、D2来画这样每次改动都能走代码评审好处是“架构图像代码一样有版本记录”。工作流上我把架构图更新的节奏绑在迭代节奏上每次新需求评审先更新架构图再写代码每次线上故障复盘第一时间把故障点标到架构图上每个季度架构图跟着实际系统做一次“对账”把不再存在的组件删掉。这样做以后架构图就不再是立项用的“一次性用品”而是一张始终新鲜的“活地图”。说回我自己的经验AI应用架构设计最大的门槛其实不是模型能力而是工程化思维。把上下文、状态、工具边界、安全合规画清楚比追着新模型跑重要得多。你花在架构图上的几个小时上线之后会以数倍的效率还给你。无论你是准备做一个简单的RAG问答还是在搭复杂的AI Agent系统都建议先耐下心来把图上的每个箭头问一遍“为什么”。
返回列表