ARTICLE DETAIL

资讯详情

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

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

图解AI应用架构设计:从RAG到Agent的落地指南 1. 概念与背景从一张图的起点说起1.1 AI应用架构设计是什么直接说结论图解AI应用架构设计是指用可视化图形的方式把AI应用从用户请求到模型推理再到数据返回的完整链路拆解成分层、分模块的结构化模型并把关键交互路径、数据流、控制流、异常分支都标注清楚。它既是一套设计方法论也是一种团队沟通语言。很多团队做AI应用时都有类似的经历代码写了一堆功能在本地跑得通一到联调或上线就崩。最根本的原因是架构没有在图纸上理清楚。传统Web应用的三层架构前端-后端-数据库已经被讲烂了但AI应用多出了模型调用、上下文管理、向量检索、Agent循环、工具调用这些新模块沿用老套路必然出问题。图解AI应用架构的目的就是逼你在写代码之前先把所有模块的边界、依赖关系和数据流向想清楚。图像比文字更直观一张图摆在评审会上谁负责什么模块、哪个环节会阻塞、哪个依赖是强依赖一眼就能看出问题。1.2 为什么现在特别需要图解思维AI应用架构和传统架构最大的区别在于不确定性。传统接口的输入输出是可枚举的但大模型是概率系统同一个提示词在不同温度下会输出不同结果模型服务可能在高峰期变慢或超时工具调用可能返回异常格式。这些不确定性都会传导到架构层面靠写代码时灵机一动根本兜不住。图解的价值在于把不确定性显性化。我在画架构图时有个强制要求所有可能失败的环节必须在图上单独标注失败分支。比如模型调用超时是走降级缓存还是抛给用户重试RAG检索不到相关文档时是直接告诉用户还是用模型自身知识作答这些决策只有在图纸上才能被提前讨论等到上线后再改返工成本翻倍。另外AI应用的模块边界划分和传统项目差异很大。模型层、编排层、数据层、工具层之间的耦合关系需要反复权衡画图的过程本身就是架构评审的过程。所以我带的项目无论大小都坚持先出图后写码哪怕只有一个核心接口也把图补全再开工。2. 整体架构分层拆解图解的主要模块和角色定位2.1 接入层与交互层的设计要点接入层是用户与AI应用交互的第一道门户核心职责是统一接收多端请求并做预处理。最常见的接入形态包括Web聊天窗口、企业IM机器人、API接口三类。在设计这一层时最容易被忽略的是协议统一问题。我见过不少项目直接让Web前端通过WebSocket连接后端业务服务等要接企业IM或者开放API时发现要写三套不同的协议适配代码。更合理的做法是无论用户从哪个入口进来都统一转换为内部标准消息结构再交给编排层处理。这个内部消息结构至少包含会话ID、用户ID、消息类型、消息内容、附加元数据。会话ID是整个链路追踪的锚点没有它后续所有日志排查都无从下手。流式输出也是接入层必须考虑的。大模型响应耗时动辄几秒如果用户端一直干等体验极差。实践中我优先推荐使用SSEServer-Sent Events而非WebSocket因为SSE基于HTTP长连接天然支持自动重连实现成本低对于单向服务端推送的场景完全够用。只有需要双向实时交互的场景比如AI Agent执行中需要用户中途确认才值得引入WebSocket。接入层还需要承担限流、认证、基础审计。很多AI应用一上线就被脚本刷爆Token额度问题就出在接入层没做细粒度控制。建议在接入层就按用户维度做并发和QPS双重限流模型层再做全局配额形成两级保护。2.2 编排层AI应用的中枢控制单元编排层是整个AI应用架构的核心通俗讲就是AI应用的大脑和调度室。所有业务逻辑、流程控制、上下文管理、工具调度都在这一层完成。我把编排层拆成五个子模块会话管理模块管理多轮对话历史决定哪些上下文进入模型路由模块决定当前请求走哪个模型或哪个Agent分支工具调度模块负责任务分配和管理工具调用周期记忆模块管理长短期记忆的存取状态机模块维护Agent在不同阶段的执行状态。五个模块各司其职图上画出来就像五个齿轮互相咬合。会话管理模块最大的坑是上下文爆炸把整个对话历史一股脑塞给模型Token消耗成倍增长响应还变慢。我的经验是设定动态窗口策略——最近N轮消息完整保留更早的历史按相关性做摘要压缩相关性判断可以由模型离线批量完成。这个策略需要在架构图上画清楚哪里做裁剪、什么时机做摘要、摘要存到哪个存储。路由模块的设计直接决定应用的上限。简单的路由可以基于关键字或意图分类做硬编码复杂的路由需要让模型自己做决策这时候就变成了Agent的形式。基于模型的自动路由在大模型出现之前基本不可行现在成了主流方案但必须在架构图上配套设计逃生机制自动决策只有70分人肉兜底才是可靠性的最后一道防线。2.3 模型层与多模型协同设计模型层是AI应用执行推理的核心位置。这一层不是简单调一个API就行需要解决三个关键问题。第一个问题是多模型接入的统一管理。OpenAI、Anthropic、Google还有各种国产模型接口各不相同。最稳妥的办法是引入独立模型网关层把模型调用统一封装成标准接口底层做模型多路由切换。这样做的好处不止是切换方便更重要的是可以做统一的错误码转换、计费统计和灰度切换。第二个问题是模型选型策略。我在项目里一直坚持大小模型搭配使用小模型负责任务判定、意图分类、格式提取这类简单但高频的工作因为便宜且快大模型负责逻辑推理、内容生成、Agent决策这类复杂工作。架构图上要标清楚不同路径分别走哪个模型否则后期优化不知道从哪里下手。第三个问题源自多AI协作模式。现在很多复杂任务需要多个Agent配合完成比如一个Agent负责代码生成另一个Agent负责代码评审互相校验。多AI协作需要明确协作机制是串行的编排者-执行者模式还是并行的各自独立执行再汇总。我推荐在初期用串行模式一个主控Agent负责拆解任务多个子Agent分步执行主控做最终校验汇总。并行模式看起来效率高但联调难度和异常处理复杂度是指数级上升的架构图上很难画清楚节点之间的依赖关系。2.4 数据层与外部工具接入数据层负责存储和检索是RAG能否真正好用的地基。很多团队先选模型再选向量库倒过来了。正确顺序是先盘点数据再定检索方案。对数据规模在百万级文档以下的中小型应用Qdrant、Milvus这类专用向量库都比关系数据库自带的向量插件性能好一些如果数据量不大或者想减少运维组件直接用具备向量功能的PostgreSQL也能搞定。关键是把存储选型理由写进架构文档为什么选它、不选别的、未来数据量增长到哪个水平必须迁移。外部工具接入统一走工具API层也就是Function Calling机制。随机调用工具容易出问题必须把工具的调用契约定义清楚输入参数用什么格式、返回结果用什么Schema、超时时间多少、失败后怎么重试。架构图上要把工具层画在编排层的侧面用箭头明确表示编排层是唯一调用入口所有工具请求必须经过编排层的校验和参数透传禁止业务代码直接调第三方工具。3. 图解关键交互流程把核心链路画成一张能落地的图3.1 RAG检索增强流程的图解实践RAG是目前AI应用落地最普遍的技术路径图解RAG流程的要点在于把每一步的输入输出标清楚。我画的RAG流程图为五个节点查询预处理、检索召回、重排序、上下文组装、生成回答。每个节点之间用箭头连线线上标注传递的关键数据结构。查询预处理是最容易被遗漏的一步直接拿用户原始问题去检索大概率效果很差。正确的做法是先让模型做查询改写如果是多轮对话就把指代关系补充完整如果问题描述模糊就扩展成多个子查询。做完改写后再去向量库检索召回率会明显提高。检索召回阶段需要标注参数top_k取多少、相似度阈值下限是多少。根据我的经验top_k取20左右、相似度阈值设为0.45到0.55之间是比较稳妥的起始配置实际线上再根据效果调整。很多团队top_k只取5个导致漏检严重生成质量断崖式下跌。重排序节点是近期很多方案都会加入的环节。第一步向量检索先粗召回再用rerank模型精排目的是把最相关的内容顶到前面。这样做的代价是多一次模型推理调用换来的是生成答案准确率的明显提升。流程图里要画出粗召回路走向量库重排序走模型推理两者串联后进入上下文组装节点。上下文组装阶段需要控制Token预算。把检索出来的原文档全塞进提示词很容易超限。我在图上会标注上下文组装策略先按重排分数从高到低依次加入超过预算就停止加入并保留一个截断标记传给生成节点让模型知道当前上下文可能不完整。3.2 Agent循环与多Agent协作的图解方法Agent应用与普通AI应用最核心的区别是存在循环机制。普通的请求响应是一次性交互Agent则会在内部反复执行“推理-行动-观察”的循环直到达成目标或者触发终止条件。画Agent循环图时最容易出问题的是没有画终止条件。我见过在纸上画的Agent流程相当漂亮推理、工具调用、结果回填都画了唯独没有终止条件这在架构评审时被追问“这个循环什么时候停”对方当场卡壳。终止条件至少要包含三类任务完成用户目标达成的判定依据、最大步数建议默认10步以内、Token预算耗尽。三种条件在图上要分别标注缺一个都意味着逻辑漏洞。多Agent协作的图我习惯用编排者-执行者模式来表达。先画一个主控Agent在中心位置周围分布着多个子Agent箭头从主控指向子Agent代表任务分解分发子Agent执行完结果由虚线箭头回传给主控代表汇报与汇总。注意箭头方向不能画反分发是单向实线回传是单向虚线双向交错的箭头意味着职责边界不清。还有一个实用技巧状态机图比流程图更适合画Agent循环。流程图表达线性顺序需要很多箭头状态机图天然突出状态的变化。每个Agent节点就是一个状态触发条件标注在连线上异常状态也要画出来比如等待工具响应超时的状态、模型返回格式非法需要重试的状态。3.3 并发处理与异步任务路径的图解AI应用最容易在高并发场景暴雷图解并发控制可以从两个视角入手请求视角和任务视角。请求视角关注单次用户请求内部的并发控制。用户的消息进来后编排层可能需要并行处理多个依赖同时做意图识别、检索向量库、查询用户历史偏好。这三个操作互不依赖可以在图上画成并行分支最后在上下文组装节点汇合。这样画完图就能估算出每条分支的最长耗时总耗时就按最慢分支计算效率优化就有了明确目标。任务视角关注长耗时任务的异步化。凡是超过30秒才能出结果的操作都要避免直接同步等待应当走任务队列编排层把任务提交给消息队列立即返回给用户一个任务ID后台Worker处理完成后把结果写入存储并通知用户。架构图上要把消息队列、任务表、Worker三个节点单独画出来标注各自职责。我建议优先使用Redis Stream或RabbitMQ做任务队列避免自己在应用里实现消息机制隐藏Bug会比预期多。4. 架构落地与选型从图到代码的实操路线4.1 技术组件选型决策参考基于自研项目经验我整理了AI应用核心组件的选型建议。选型的核心逻辑很简单团队熟悉什么、运维能扛什么、数据量到什么级别三者共同决定最终选择。模型网关选型上LiteLLM作为开源方案能快速把主流模型接口统一到一个标准层适合快速验证如果团队有较强的工程能力也可以自己用FastAPI封装完全掌控试算规则和灰度逻辑。LangChain的定义权很大但它的抽象层多调试时层层套娃会让人沮丧。LangGraph更适合用于需要控制多Agent协作流程的项目。初期想快速跑通闭环的话直接用LangChain的LCEL或手写一个轻量编排函数都可以不要为了框架而框架。向量库方面中小型的应用建议直接边用Qdrant边落地它的轻量程度和易用性很好团队不想引入额外组件时可以用PostgreSQL的pgvector插件起步。知识库、文档都是关系型数据存量的话用pgvector少维护一个系统反而更灵活。提示词与上下文管理建议优先选择支持模板版本管理、在线调试的方案。Promptflow的流程化设计很符合我们工程师的操作习惯。实际的数据存储建议直接选Redis能同时承担缓存和会话管理的职责架构图上一个节点解决两个问题。4.2 最小可复用的参考架构示例下面给一个实际可以在小团队内直接落地的参考架构用文字配合代码片段说明方便你在自己项目中画图时按图索骥。在这个示例架构中接入层接收Web端和API端的请求统一转成标准消息结构后发给编排服务。编排服务保存会话上下文到Redis调用模型网关接口获取大模型结果。模型网关内部路由到实际的大模型供应商。如果本次请求配置了RAG能力编排服务会先从向量库检索相关文档片段组装上下文后再调模型生成。整个链路用OpenTelemetry做分布式追踪日志统一汇总。核心编排服务的伪代码逻辑如下编排服务对外暴露一个流式接口通过SSE把Token分片推给前端。这个接口内部要完成会话恢复、上下文组织、模型调用、流式转发四件事。会话恢复是从Redis读出最近N轮消息上下文组织是按动态窗口策略组装出本次调用的消息列表模型调用是透传给模型网关流式转发是把模型的每个输出块原样推到客户端连接。这个示例架构可控性强所有模块都可视可测。初期先写成单体服务等到调用链路过长或团队规模扩大再按原图画出的模块边界逐步拆分为微服务。4.3 架构评审时的看图提问清单架构图画好之后评审环节决定最终质量。我把评审时必问的问题整理成一张清单强烈建议贴在工位或评审会议室墙上。评审清单的本质就是把架构图纸上的要素对照验证数据流是否完整、失败分支是否闭环、有没有被忽略的隐藏依赖。每次架构评审进会议室时都按照这个顺序过一遍能避免很多低级的架构设计问题。5. 踩坑实录图解AI架构设计的常见误区与应对5.1 画图本身最容易犯的几个错误第一个常见错误是架构图画成了代码细节图。很多人画图时把每个类、每个函数、每张数据库表都画上去图显得密密麻麻好看但没有决策作用。架构图表达的是运行时和部署时的模块关系不该成为代码组织结构图。解决办法是抽象层级思维目前图纸只能出现服务、模块、组件这个级别的节点类与函数属于下一层次留在代码注释里即可。第二个高频错误是只画成功路径。我评审过的架构图大概有七八成只画了正常流程一问到模型超时怎么办、向量库挂了如何降级、用户输入乱来怎么兜底图上完全看不出来。邀请模型提出一个问题就很适合用关键策略应对画出失败分支和降级方案后再逐一补充。降级方案不一定要多高级简单如返回兜底文案也可以关键是图上要能看见这条路径。第三个错误是节点之间只有线条没有数据标注。画两个模块相连根本不够箭头上面必须写清楚传递的关键数据结构是什么。没有数据标注的图评审时大家只能靠猜谁都心累。最后一个错误是图与实现脱节。图纸画得很完美代码部署后完全不一样。排查根因通常是两类要么画图时没有考虑现有基础设施约束画的都是理想态要么写代码过程中擅自偏离设计没有同步修订图。规范的解决方案是把架构图纳入代码仓库做版本管理架构变更必须走Merge Request评审图与代码一同变更防止两者分道扬镳。5.2 生产环境架构级问题排查实录分享几个真实遇到过的问题都是图没画清楚导致的线上事故。曾经有一个客户咨询项目某天晚上模型提供方限流导致大量请求超时整个联调群瞬间炸锅。查日志后发现系统里所有请求从接入层同步穿透到模型层没有做任何排队削峰。请求量一旦超过配额直接雪崩。后来我在架构图上把限流与队列这两个节点单独画出来接入层改为限流超出部分先走队列再回读模型配额做全局控制。改了以后接口的稳定性表现明显好转。还有一次踩坑在上下文管理环节。某个Agent应用运行时间长了之后响应越变越慢、成本越来越高排查发现是会话历史全部完整入模没有任何裁剪。查出问题后在编排层增加了动态窗口策略高峰期对话再从Redis读取摘要拼接。这个问题就是典型的图上漏掉了上下文管理节点导致的后来画图时特别规定了会话管理模块必须单独立绘画出来。5.3 图解驱动的架构演进与复盘架构设计不是画一次图就完了迭代过程中图要跟着走。我给团队的约定是每一次重大功能上线前先更新架构图再做技术评审。这个成本看起来多了一步实际上省掉的返工比这一步多得多。线下复盘的经验是架构演进要以图为中心做版本对比。上一次迭代的图和这次迭代的图放在一起看什么地方增加了节点、什么地方删掉了依赖、哪条链路的流向变了就能快速定位性能退化的根源。比如有一次迭代后响应耗时翻倍对比图发现新版本把一次并行调用改成串行了改回并行后问题秒解。一个重要习惯热更架构文档时每个模块的负责人必须在图对应模块上签名。出了故障看图上签名直接找人。不要小看这个习惯排查速度至少快一倍。6. 一套实用的图解模板和优化心得6.1 我经常使用的分层图模板说明这里分享一个可以复用的分层图模板。整体分五层接入层、编排层、模型网关层、数据层、基础设施层。各层职责见下表。这个模板的逻辑是从外到内逐层拆解。接入层处理一切外部入口编排层承担业务调度模型网关层只负责与模型互动数据层承载所有持久化与检索能力基础设施层提供可观测性与消息通信的能力。初始化一个新项目时建议先按这张表画出骨架再往里填具体组件。6.2 工具选择与可视化技巧画架构图的工具不用纠结。团队协作、线上评审我推荐draw.io免费且支持多人协同编辑导出SVG后可以嵌入文档。个人快速构思用Excalidraw手绘风格没有心理负担随手画不怕丑。还有一个思路是直接用Mermaid文本描述画图方便用文本做版本管理缺点是很复杂的图可读性会下降。画图的关键技巧我个人最看重颜色约定接入层统一用蓝色系编排层用绿色系模型层用紫色系数据层用橙色系基础设施层统一用灰色调。颜色恒定后团队扫一眼就能定位模块归属。失败路径用红色虚线表示与正常流程的绿色实线形成清晰对比。每张图必须带图例把颜色规范和箭头含义写清楚以防时间一长大家各读各的。6.3 图解与AI应用全栈工程师的成长路径图解AI应用架构不只是画图技能更是全栈工程师构建大局观的必经之路。模型原理、算法细节不需要死磕到底但整个链路每个环节的大致开销和约束必须了然于胸。我给初学者的建议是先完整画一个最小AI应用的架构图前端接接口编排层走对话管理模型层调一个大模型数据层用Redis存会话。把这一张图画透再去扩展RAG节点、加入Agent循环、引入多模型协同。每加一个新节点前先画图功能开发反而会顺手很多。目前业界已经有很明显的趋势AI Agent应用逐渐从单点特效演变成复杂系统工程。AI Native的研发范式正在被越来越多人讨论其核心思想就是把AI能力当作架构的原生设计单元而不是传统架构中后加的附属模块。翻译成图解语言就是架构设计从第一版就包含模型层、记忆层、Agent编排层不是先把传统系统搭好再想办法嵌入AI能力。从个人经验上看养成先画图再写代码的习惯最初会感觉多花了不少时间但坚持两个项目之后整体的交付效率和线上稳定性都会明显改善。AI应用架构设计最忌讳跳步跳步一时爽返工火葬场。无论是刚入门AI开发的新手还是带团队做复杂AI系统的负责人都能从复盘图纸中受益。最后分享一个我常年保留的工作方式每个迭代结束后花半小时重新画一张架构演进图把新旧两张图叠出来对比。这半小时不是形式主义而是为了让自己直观地看到生产结构和业务边界在哪里悄悄发生了变化。这样操作久而久之迭代思路会变得极其清晰这种收益比任何技术方案选型都来得稳定。
返回列表