做了好几年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系统,都建议先耐下心来,把图上的每个箭头问一遍“为什么”。