AI应用架构设计这个词,这两年快被说烂了,但真正落地过的人都知道,它跟传统后端架构完全是两码事。你给一个CRUD系统画架构图,画的是表、接口、消息队列;给一个AI应用画架构图,画的是意图链路、上下文管理、模型调用策略和一堆兜底方案。这篇文章不打算讲空理论,我按自己实际拆过、重构过、上线过的项目经验,把AI应用架构怎么画、怎么拆、怎么落地一次讲透。
不管你是刚把大模型API调通的新手,还是做了多年后端想转AI应用的老手,这篇文章都能给你一张可以照着画的图。
1. 先想清楚:AI应用架构和传统架构到底差在哪
很多人在设计AI应用架构时,第一个动作就是照搬Spring Cloud那套东西:服务注册、熔断、降级、分布式事务。结果画出来的图花团锦簇,落地时却发现压根不解决核心问题。要画对AI应用架构图,先得从底层认知上转过弯来。
1.1 确定性系统与概率系统:这是第一道分水岭
传统软件的运行逻辑是:给定输入,经过确定性的代码路径,得到可预期的输出。你可以为它编写完备的测试用例,可以对每个异常分支做精确的捕获和处理。它的架构核心是"保证正确"。
AI应用完全不是这样。你给同一个大模型发两遍一模一样的请求,拿回来的可能是两份措辞不同、甚至部分内容有出入的回答。模型输出的是一个概率分布里的采样结果,不是数据库里那一行确定的值。
这就带来架构设计目标的根本变化:你不再追求"系统绝对正确",而是追求两件事——第一,把正确行为发生的概率尽可能推高;第二,当错误行为发生时,系统有足够的兜底能力把它接住,不让它直接砸到用户脸上。
举个例子,传统系统里调用第三方接口失败,你写个try-catch重试三次就完了。AI应用里你让模型输出一段JSON,它有概率给你一段带多余文字的JSON,有概率给你一段Markdown格式的JSON,还有小概率给你一段完全不是JSON的东西。这已经不是加个重试能解决的问题了,你得在架构层面专门设计一个"输出校验与修复"的环节。
1.2 从流程编排到意图编排:架构图的中心换了
传统系统的架构图,中心一定是业务流程。订单系统画出来,永远是创建订单、支付、库存扣减、物流发货这样一条固定流水线,每个节点做什么是提前写死的。
AI应用的核心驱动力是模型的理解和决策。用户说一句"帮我把上周的报表整理成PPT",系统要先理解意图,再决定调用哪些工具、走什么流程。这个流程是模型在运行时实时决策出来的,不是你在代码里写死的。
所以你在画AI应用架构图时,中心不再是"流程引擎",而是"意图理解和任务分解层"。整个架构服务的对象是模型的推理链条,而不是固定的事务边界。这会让架构图看起来更扁平、更灵活,但同时意味着你失去了传统架构那种"流程节点可枚举"的确定性安全感。
1.3 异常处理的逻辑彻底变了
传统架构里,异常是边缘情况,是少数派。AI应用里,异常是常态。
模型可能漏掉关键信息、可能编造不存在的功能、可能忽略你精心写的系统提示词。架构设计必须把这些情况当作"正常业务路径"来对待,而不是当作意外来处理。我在自己项目里总结过一句话:AI应用架构的本质,是在一个充满不确定性的系统外面,包一层尽可能确定性的壳。
这层壳包括:输入侧的意图分类过滤、输出侧的结构校验和语义校验、失败时的重试与降级方案、以及所有链路节点的日志留痕。你甚至要在架构图上专门腾出一块区域画这些"防御组件",它们不是附加功能,是这个架构能稳定运行的基石。
想清楚这三点,你再看市场上各种AI应用架构图,就能一眼看出哪个是拿来忽悠的、哪个是真能落地的。
2. 一张图看懂AI应用的分层骨架
很多人一听到"图解架构",就以为要画得像微服务架构那样复杂。实际上,AI应用架构图有它自己的画法。我建议你从五层骨架开始,这张图能覆盖绝大多数AI应用场景。
2.1 五层结构:一张图的基础框架
从上到下,AI应用架构可以拆成这样的层级:
- 表现层:用户直接接触的界面,Web端、移动端、命令行、还有越来越常见的语音和机器人入口。这一层和传统架构没区别,但要注意AI应用大量使用流式输出,表现层必须支持流式协议。
- 接入与网关层:身份认证、权限控制、频率限制、会话管理。它在用户和AI能力之间做一个统一的出入口。这里的频率限制不是传统接口的QPS限制,更多是针对Token消耗和模型调用成本做的配额控制。
- 编排层:AI应用架构的心脏。意图识别、任务规划、多轮对话状态管理、工具调度的决策逻辑全在这里。它直接驱动模型完成"理解需求-拆解任务-选取工具-执行验证"的完整循环。
- 模型与工具层:大模型推理能力、各类外部工具(搜索、代码执行器、数据库查询)、以及RAG所需的向量检索能力。这一层是你能力的"肌肉"。
- 数据与上下文层:知识库、向量数据库、会话历史、短期和长期记忆、业务数据库。这一层解决的是模型"记不住"和"不知道"的问题。
这张图最大的价值是帮你定位"我现在做的功能属于哪一层"。很多人把Agent逻辑写进表现层,把RAG逻辑塞进模型调用代码里,结果项目一复杂就乱成一团。先画这张分层图,往后再填细节,架构就不会走形。
2.2 三类数据流:谁在架构图里用什么线
架构图画得像不像样,很大程度上看数据流的表达。AI应用里有三类数据流,我建议在图上用三种不同的箭头区分:
- 同步请求-响应流:用户发问、Agent处理、返回结果。常规实线箭头,方向明确。在编排层内部,模型和工具之间的调用也属于这一类。
- 流式数据流:大模型生成内容是一块一块吐出来的,不是憋出完整回答再一次性返回。我习惯用带波浪标记的实线箭头表示。这类流通常走SSE或WebSocket,从模型层一直贯通到表现层。
- 异步反馈流:离线评测、用户反馈采集、日志上报、Prompt调试数据回流。这类流用虚线箭头,它不参与用户主链路的实时处理,但对AI应用的持续改进至关重要。
画架构图时把这三种线区分开,读图的人一眼就能看出哪些环节是实时的、哪些可以异步化、哪些需要等待模型吐字。这个细节比你画多少个服务框都管用。
2.3 最小可用架构:先画这张,再做加法
我第一次给团队画AI应用架构图时犯了个错误,一上来就画了二十多个框,结果没人看得懂,项目组自己都对不上号。后来我改成从最小骨架画起,再逐次做加法,效果反而好得多。
最小可用架构图是这样的:用户进入接入层,接入层把会话交给编排层,编排层调用模型层完成第一轮生成,再从数据层取回相关的知识内容,最后把结果以流式方式返回用户。就五个框、四条线,没了。
先把这个最小的闭环画熟,然后再逐层加东西:接入层加配额管理、编排层加工具调用节点、数据层加向量检索、模型层加多个模型的路由。这样架构图始终处于"每个框我都知道为什么存在"的状态。那些说不清存在理由的组件,就算画上去也是噪音。
3. 核心组件逐个拆:模型网关、Agent编排、上下文工程
五层骨架只是张地图,真正决定AI应用好不好的,是中间几层里的核心组件怎么设计。这几个组件我建议在架构图中单独拉出来详细画。
3.1 模型网关:统一入口不是可选项
我见过不少AI应用直接把模型API的地址写死在业务代码里,然后每处调用各管各的。前期demo阶段没问题,一旦涉及多模型切换、成本统计、故障降级,这种写法会让人崩溃。
模型网关要解决的事情很明确:把业务逻辑和具体模型解耦。业务代码只面向一个统一的模型调用接口,至于背后用的是GPT还是国产大模型、是走长上下文还是走RAG压缩、要不要做缓存,全由网关层决定。
一个好的模型网关至少要有这些能力:
- 模型路由:按业务场景把请求路由到不同模型。简单问答走小模型省成本,复杂推理走大模型保证质量。
- 超时与重试:模型接口经常抽风,网关要有统一的超时控制和退避重试策略,不能指望业务代码各自实现。
- 成本与配额统计:每个用户、每个业务线的Token消耗要能在网关层统一计量。这是成本控制的唯一可行位置。
- 降级策略:主模型不可用时,可以自动切到备用模型,或者返回降级提示。我在生产环境里就遇到过主模型连续故障,网关一把流量切到备用模型,用户几乎没有感知。
你可能觉得刚起步的项目用不着这么重的东西。但从一开始就在架构图上留出模型网关的位置、把调用模型的地方收敛到一个模块,后面加这些能力的时候会轻松得多。这是我拆过代码后最深的体会。
3.2 Agent编排:意图分解与工具调度
编排层是整个AI应用架构里最难画清楚、也最值得花时间研究的模块。它的底层逻辑是让模型在一个循环里反复执行"推理-行动-观察"的过程:模型根据当前状态推理下一步该做什么,然后调用一个工具,工具返回结果,模型观察结果后决定下一步。
这个循环在架构图上画出来,就是编排层和模型层、工具层之间的几个双向箭头。但落地时,你必须为这个循环准备三样东西:
- 意图识别器:用户的话进来,先判断是要闲聊还是执行具体任务。这是个分类问题,可以用小模型做,也可以直接用规则加关键词兜底。这一步做好了,能把大量无效请求挡在核心链路之外,大幅省成本。
- 工具注册表:Agent能调用哪些工具、每个工具的参数是什么、返回结构是什么,必须用结构化描述注册清楚。我见过最典型的翻车场景是工具定义写得含糊,模型根本不知道什么时候该调、参数怎么填。工具注册表写得好不好,直接决定Agent的执行成功率。
- 执行校验器:工具调用不能是"发出去了就不管"。要做入参合法性校验、结果有效性和安全校验。模型规划出来一个SQL去查询数据库,入参过一遍校验器能拦住不少低级错误。
编排层设计还有一个容易被忽视的原则:每一个模型决策点都要留"后悔药"。模型选错了工具、规划错了步骤,这套编排逻辑要能感知到错误并回到上一个决策点重新规划,而不是一条道走到黑。
3.3 上下文工程:Memory与RAG的分工配合
上下文是AI应用的内存。很多AI应用看起来"笨",不是模型不行,而是架构里根本没有设计上下文管理。上下文工程在架构图上的体现,是数据与上下文层里的三个组件。
第一个是会话记忆。多轮对话必须维护会话状态,短期记忆放在缓存里,负责保存最近几轮对话。但要注意,不能无脑把所有历史对话都堆进模型上下文,这会迅速撑爆上下文窗口。所以需要有会话压缩机制,把历史对话做摘要、提取关键信息,只把精华喂给模型。
第二个是长期记忆。用户的历史偏好、业务实体信息、跨会话的事实记录,这部分一般存数据库或向量数据库,在合适的时机注入到对话中。长期记忆和短期记忆的管理逻辑完全不同,架构上要分开设计。
第三个是RAG管线。RAG不是简单地拿用户问题去向量库检索,它是一条完整的流水线:文档切块、向量化、建立索引、检索召回、重排序、上下文组装。任何一步做粗糙了,检索质量都会断崖式下降。
这三个组件在架构图上是三个独立的框,但实际使用时要配合。一个用户提问进来,先查短期记忆了解当前对话背景,再查长期记忆了解用户偏好,然后检索知识库拿到相关资料,最后统一组装成模型的上文。这个组装的顺序和权重,需要根据业务场景反复调,属于架构设计里最需要耐心打磨的部分。
4. 多AI协作:从单Agent到多Agent的架构演进
单Agent在简单场景下够用,但业务复杂度一上来,你会发现"让一个模型干完所有事"这条路越来越难走。多AI协作的架构模式,这几年已经从一个概念变成了不少生产系统的标配。
4.1 单Agent的天花板在哪里
单Agent的问题主要有三个。第一是上下文窗口的物理限制。一个人任务涉及大量信息,塞不进上下文,模型就会开始丢三落四。第二是指令遵循的漂移。任务步骤越多,模型越容易在复杂指令面前"选择性失忆",忘了最初的约束和要求。第三是工具的耦合问题。让一个Agent同时管理几十个工具定义、判断每个任务的工具选择,调用出错的概率会随工具数量快速上升。
我自己的经验是,当一条任务的执行步骤稳定超过五步、涉及的工具超过三四个,或者对专业领域知识的依赖非常强时,就该考虑把任务拆开,交给多个Agent协作完成。
4.2 三种主流协作模式怎么选
多Agent的架构模式,真正在实践中常用的大致三种,我在这个表格里对比一下:
| 协作模式 | 结构特点 | 适合场景 | 典型风险 |
|---|---|---|---|
| 编排者-执行者 | 一个主Agent负责拆任务、分发、汇总,多个子Agent负责执行子任务 | 任务可拆分成相对独立的子任务,比如研究报告中分头收集资料、分别撰写各章节 | 主Agent成为瓶颈和单点故障,消息量一大,汇总时容易遗漏 |
| 流水线模式 | Agent按固定顺序处理,前一个的输出是后一个的输入 | 有清晰前后依赖的流程,比如先生成大纲再逐节扩写,先解析需求再生成代码 | 中间任何一环出错,错误会逐级放大,需要排队检查点 |
| 评审/辩论模式 | 多个Agent独立生成结果,由一个判别者选出或融合最优结果 | 对输出质量要求高,比如文案生成、代码审查、需要多角度校验的任务 | 成本成倍增加,判别模型的质量直接决定最终上限 |
选择模式的一个朴素标准:任务的依赖关系是并行的还是串行的。子任务互相独立,优先考虑编排者-执行者;前后强依赖,就用流水线;单个回答质量吃不准,就上评审模式。没有绝对最优,全看你的业务约束。
4.3 协作架构里的通信协议设计
多Agent协作最容易翻车的地方不是单个Agent的能力,而是Agent之间怎么说话。你需要在架构设计阶段就定好三件事:
第一,消息结构。Agent之间传递的信息不应该是一大段散文,而应该是结构化字段:任务ID、来源Agent、目标Agent、输入数据、期望输出格式、截止时间。这样所有协作状态都可追踪,也能方便中途接管和重试。
第二,任务状态机。一个任务从创建、分配、执行中、完成、失败到被退回,状态流转必须在编排层有明确记录。我见过没有状态管理的多Agent系统,任务重复执行、结果互相覆盖,最后根本没法定位问题。
第三,结果确认机制。子Agent说"我做完了",这名话不该被无条件相信。设计上要在执行结果回传给上层前,安排一层校验:格式对不对、内容完整不完整、有没有明显错误。这个校验可以交给另一个Agent,也可以走规则校验,具体看成本和风险偏好。
多Agent不是把流程做得越稀奇越好,而是把协作的"契约"定义清楚。契约清楚了,计算资源大模型再抽象,架构也不会崩。
5. 把架构图真正落地:我画图的实操经验
说到"图解"这件事,我踩过不少坑,也和团队磨合过画图的规范。这部分分享一下我自己的实用方法。
5.1 画图工具怎么选:够用就行
架构图工具的选择,我的建议是别卷。Excalidraw、draw.io、ProcessOn、Figma任选一个趁手的都行。关键不是工具多炫酷,而是团队能不能在这个工具上协作更新。
我个人的习惯是用Excalidraw做方案草图,因为手绘风格能给人"还未定稿、可以讨论"的心理暗示,讨论方案时大家更容易提出修改意见。等到方案基本稳定,再在draw.io上画一张精度更高、可以直接放进技术文档的正式版。很多人在草图阶段就用各种复杂组件,结果把讨论的重心从"架构合不合理"带偏到"图好不好看"。
5.2 同一张架构,要分三个视角画
一个常见的问题是:一张架构图,老板要看、后端同学要看、算法同学也要看,需求完全不同,硬塞进一张图里谁也看不懂。
我现在习惯画三张图:
- 业务视角图:给老板和产品看。不出现具体组件和技术栈,只画"用户请求进来、AI理解意图、检索资料、生成回复"这样的逻辑链路。重点表达业务价值。
- 系统视角图:给开发和运维看。画出分层、模块、接口、数据流,标注清楚同步异步关系、关键协议。这就是上一章讲的那张五层骨架图。
- 部署视角图:给基础设施的人看。关注服务怎么部署、模型在哪层调用、向量数据库怎么连、告警怎么接。这张图才需要画具体的实例和网络区域。
三张图不是三套内容,而是同一套架构在不同抽象层级上的投影。业务视角是线路图,系统视角是组件图,部署视角是物理图。在架构评审时先讲第一张,再按需展开后两张,沟通效率会高很多。
5.3 命名和标注规范也要定好
最后一条画图经验是关于命名的。AI应用架构里组件多,如果不统一命名,几个人画的图根本对不上。我给自己定的规则是:
- 每个组件框用"层级-职责-名称"三段式命名,比如"编排层-意图识别-IntentRouter",看名字就知道它在哪一层、干什么。
- 每条数据流线上标注协议类型,是HTTP还是SSE还是内部事件总线,避免后端同学拿到图还要猜。
- 在图的右下角留一个版本号和变更日期,架构是持续演进的,没有版本管理的架构图过两周就会变成错误信息。
这个规则听起来简单,但真坚持下来,团队协作时的成本会降一大截。毕竟架构图是用来对齐认知的,不是用来欣赏的。
6. 架构设计中最容易翻车的几个地方
最后这部分,我把自己在AI应用上线过程中真实栽过的跟头挑出来讲。这几个坑如果不在架构设计阶段考虑进去,后面都是要拿线上事故来交学费的。
6.1 延迟预算:算清楚一次请求要调多少次模型
很多人设计AI应用时完全没有"延迟预算"的概念。传统接口你大概能估出耗时是几十毫秒还是几百毫秒,AI应用呢?我见过一个看起来简单的"智能客服",背后实际链路是:意图识别一次模型调用、生成回复一次模型调用、结果不合规再纠错一次、不对再重新生成。一次用户请求背后压着四次大模型调用,每有一次超时重试就再翻倍。用户端的真实体验差得离谱。
架构设计阶段就要把这个算清楚。我的建议是给每次用户请求设定一个总延迟预算,比如10秒。然后从后往前分配:模型层最多占多少、检索占多少、编排层的多次调用怎么复用已有的模型返回结果。能并行调用的就并行,比如同时检索知识库和进行意图识别;能提前预热的就预热带标。把延迟预算画进架构图上,每个箭头旁边标清楚预计耗时,这比任何性能优化手段都管用。
6.2 输出不可控时的兜底设计
前面说过模型输出是概率性的,架构上必须给输出加一道"质检闸门"。我在生产环境里踩过最深的坑是模型输出的JSON里混进了"好的,我现在为您生成如下内容:"这样的废话,导致解析直接崩溃。
打磨久了我总结了一套分级兜底策略:先用结构化输出约束模型,强制按固定格式返回;再在代码层做schema校验,不合格的进入自动修复机制,把多余文字剥离后再解析;修复还失败,就用规则模板直接生成降级响应。这套策略在架构图上就是一个独立的"输出校验与修复"组件,画在模型层和编排层之间,看着不起眼,实际每天都在帮系统挡灾。
6.3 成本没有做隔离和控制
Token消耗不是想象中的小钱。一个Agent跑一次复杂任务可能消耗几万Token,换算成调用量,成本比传统API高好几个数量级。如果没有成本控制机制,系统一上线,账单能给你一个下马威。
我建议在架构上至少做三层成本控制:模型网关统一计量每种模型、每个用户、每类业务的Token消耗;在接入层给每个用户设配额,超了自动切换小模型或降级服务;对高频不变的内容做结果缓存,比如常见问题的回答直接命中缓存,根本不触发模型调用。
成本控制不是财务问题,是架构问题。在架构图上把计量点、配额点、缓存点都画清楚,系统才能在商业上可持续运转。
6.4 可观测性:AI应用尤其需要"黑匣子"
传统系统出了问题,看日志、看链路追踪基本能定位。AI应用的问题玄学得多:同一批数据,有时候生成得好好的,有时候就离谱。如果不在架构设计阶段就把可观测性配套好,出问题的时候你只能对着屏幕干瞪眼。
我的做法是给每一条模型调用都记录完整上下文:输入提示词是什么、返回结果是什么、耗时多少、消耗多少Token、走了哪个模型。给Agent的每一个决策点也留痕:模型选择了哪个工具、为什么选择、工具的返回结果是什么。这些记录就是AI应用的黑匣子,它们加在一起,才能支撑你在出问题时回放整条决策链路,找到那个"概率性的拐点"。
可观测性的价值还体现在模型迭代上。有了完整的调用记录,你就可以做离线评测,对比不同提示词、不同模型版本在同一批真实请求上的表现差异,让系统上线之后还能持续变好。
写在最后:架构是长出来的,不是画出来的
我在实际项目中最大的体会是,AI应用的架构设计没有一步到位的标准答案。第一版你只需要把最小闭环跑通,让用户真实用起来;然后盯着延迟预算、兜底质量、成本和可观测性这四个方面,哪里出问题就把哪里的架构补厚一层。架构是跟着真实流量长出来的,不是一次画完的。
最后再分享一个我的小习惯:每次架构调整,都在架构图上留一个版本变更记录,写清楚这次改了什么、因为什么业务现象改的。几个月后回头翻,你会发现自己对AI应用架构的理解,就是这样一版一版本地长起来的。这张图不只是给别人看的,更是给自己积攒的实战经验册。