ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

AI应用架构设计:从不确定性兜底到分层拆解实战

AI应用架构设计:从不确定性兜底到分层拆解实战 做AI应用架构设计和做传统后端架构设计最大的区别不是多了几个组件而是思维模型彻底变了。传统架构面对的是确定性系统请求进来处理返回超时重试状态可控。AI应用面对的是概率性系统同一个提示词模型这次可能给你一段完整回答下次可能输出到一半开始胡言乱语再下次可能直接拒绝回答。架构师的工作从“保证功能正确”变成了“在不确定中兜底”这才是AI应用架构设计的真正内核。这篇文章适合谁正在从传统开发转向AI应用开发的工程师被老板要求“快速搭一个AI应用”但不知道架构怎么画的团队负责人以及想系统理解AI应用架构产品逻辑的产品经理。我会用图解的方式把AI应用架构从宏观到微观完整拆一遍先讲架构要解决什么问题再逐层拆解每个模块然后手把手教你画一张能上台讲的架构图最后分享几个真实踩坑记录。看完你至少能回答三个问题AI应用的标准分层长什么样、RAG和Agent在架构图里的位置、以及从零画一张架构图该从哪里落笔。1. AI应用架构到底在解决什么问题1.1 从“功能正确”到“不确定性兜底”传统后端架构的核心目标是功能正确性接口返回200数据落库状态一致。这个目标可以通过单元测试、契约测试、链路追踪来验证和保障。但AI应用不一样模型输出天然带有随机性同样的输入可能产生不同的输出而且这个差异不是bug是模型的基本属性。你没法写一个测试断言说“模型必须返回这个JSON”因为模型大概率会偶尔不按你的schema来。这就是架构设计要解决的第一个问题怎么在模型输出不稳定的前提下保证业务功能的稳定。常见的解法是在模型外面包一层“协议层”用结构化输出约束比如JSON Schema校验、正则兜底、二次解析把模型输出规范成业务可用的数据。我在实际项目里见过太多人把模型输出直接塞进下游逻辑结果模型某次多说了几个字整个链路就炸了。架构图上看起来只是多了一个框但这个框就是稳定性与事故的分界线。第二个问题是性能。模型推理的延迟是毫秒级到秒级不等而且不像传统的数据库查询可以通过加索引优化模型的延迟主要取决于输入长度、输出长度和模型大小。架构设计必须默认这个延迟存在并且为它设计缓冲、缓存和并行策略。第三个问题是成本。大模型API按token计费一次复杂的Agent调用可能消耗几十万token架构设计直接决定了你的账单。这三点——稳定性、性能、成本——是AI应用架构设计要解决的三大核心问题后面所有的模块拆解和选型本质上都是围绕这三点在做权衡。1.2 AI应用架构的三层理解框架我建议用三层框架去理解任何一张AI应用架构图。第一层是交互层也就是用户怎么触达这个应用是网页聊天、API调用、企业微信机器人还是嵌入式SDK。这一层决定了你用什么协议、怎么管理会话、怎么做流式传输。第二层是智能层这是AI应用的核心包括模型调用、提示词管理、Agent编排、RAG检索、记忆存储等。这一层最容易画乱因为新概念太多很多人把Agent、RAG、工具调用全画成并列的框其实它们是有层级关系的RAG是增强模型知识的手段Agent是编排模型行为的框架工具调用是Agent的一种能力记忆是Agent的状态管理。理清这个层级关系架构图才不会画成一团乱麻。第三层是支撑层包括基础设施GPU/API网关、数据管道ETL、向量化、可观测性日志、追踪、评估和安全管理。支撑层往往被初学者忽略但恰恰是生产级AI应用和demo的最大区别。这三层框架不是学术定义而是我画了十几张架构图之后总结出来的“抓手”。下次你拿到一张AI应用架构图先按这三层把它拆开再看每层内部有哪些关键组件整张图就清晰了。2. 分层拆解一张AI应用架构图里的每个框2.1 模型层选型不是选最聪明的模型层是整个架构的地基选型决定了后续所有设计的边界。很多人选模型只看“谁分数高”但生产环境里的模型选型是一道多目标优化题至少要看四个维度效果、延迟、成本、上下文窗口。效果不用多说跑几个业务实测样例就能比出来。延迟要特别提醒有些大模型的推理延迟高达几十秒如果你的应用是实时对话场景这基本不可用这时候就要考虑蒸馏后的小模型或者本地化部署。成本是另一个容易被低估的坑我记得早期做一个知识库问答项目用的是当时的旗舰模型单次完整回答平均消耗几千token一个月跑下来API账单几千块后来换了中端模型加上缓存和摘要压缩成本降了70%以上效果只损失了一点点。多模型协同也是一个值得画进架构图的设计。实操中常见的组合是“大模型做复杂推理小模型做分类和抽取”或者“开源模型做数据预处理商业模型做最终生成”。这种设计的关键是在架构图上把模型网关Model Gateway单独画出来让上层应用不直接依赖某个具体模型而是通过网关统一路由、限流和fallback。这样哪天模型价格涨了、效果崩了、或者想切换供应商你只需要改网关配置不用动业务代码。2.2 编排层Agent、工作流与提示词管理编排层是AI应用架构里最容易被过度设计的地方。我见过两种极端一种是啥都上Agent结果系统复杂到没人能运维另一种是所有逻辑都写在提示词里没有任何编排结果换个场景就得重写。合理的做法是在工作流和Agent之间找平衡。工作流Workflow适合流程确定、步骤固定的场景比如“先分类再抽取再生成”每一步做什么是写死的。Agent适合流程不确定、需要模型自主决策的场景比如“用户说了一个模糊需求模型自己决定调用哪个工具、查哪些资料”。判断标准很简单如果你能预判所有分支就用工作流如果你预判不了才用Agent。很多所谓的Agent应用仔细一拆全是固定流程强行用Agent换来的只是排查问题时的痛苦。编排层里还有一个容易被忽略的组件是提示词管理Prompt Management。生产环境下提示词是会频繁迭代的你不能每次都去改代码然后重新部署。我的习惯是把提示词模板放到独立的配置中心或数据库里配上版本管理架构图上标注为“Prompt Registry”。这样算法同学调提示词不需要经过开发而且可以A/B测试不同版本的提示词效果。这个小小的设计能省掉很多跨团队的沟通成本。2.3 数据层RAG不只是装个向量库RAG检索增强生成是AI应用架构里最容易“看起来会了”的部分。很多人以为RAG就是“向量数据库 相似度检索 塞给模型”实际落地才发现问题一堆文档解析乱码、分块把语义切碎、检索召回一堆不相关内容、模型被不相关信息带偏。数据层要画进架构图的至少包括五个环节。第一是数据摄取也就是把PDF、Word、网页、数据库里的内容解析成纯文本这一步的坑在于格式五花八门表格、图片、扫描件都要单独处理。第二是清洗与分块分块策略直接影响检索效果我的经验是先用结构信息标题、段落做粗分再按token上限做细分确保语义完整性。第三是向量化也就是把文本变成向量这一步要记录Embedding模型的版本因为换模型向量就变了旧向量全部要重新算。第四是检索与重排一般架构是“向量检索 关键词检索”双路并行走混合检索召回后再用一个重排模型Reranker精排。第五是索引更新与一致性文档改了向量库里的旧数据怎么淘汰、新数据怎么上线得有明确的更新机制。还有一个细节不是所有数据都适合走RAG。高频访问的公共知识可以做缓存实时性要求高的数据要走API查询只有“量大、更新慢、需要语义理解”的内容才适合进向量库。把RAG当万能药是所有数据层架构事故的根源。2.4 应用层用户看到和体验到的一切应用层是架构图最上面那一层也是很多技术人最容易轻视的一层。实际上AI应用的用户体验和传统应用差别很大架构设计必须提前考虑。流式输出是第一个要点。大模型生成回答需要几秒到几十秒如果不做流式SSE或WebSocket逐字返回用户面对的是一个持续loading的页面体验非常糟糕。流式的架构设计要考虑中间链路是否支持你的API网关支不支持SSE透传你的服务端是同步等待还是异步推送缓存层会不会把整个响应缓冲完才返回这些都在架构设计阶段就要定下来而不是开发时再补。会话管理是第二个要点。AI应用是有状态的用户上一句话的上下文会影响下一句的生成。你需要设计会话存储用Redis还是数据库、上下文窗口管理超过模型窗口怎么办、以及多轮对话的摘要压缩策略。第三个要点是权限与安全不同用户能访问的知识范围不同RAG检索必须在检索层就做权限过滤而不是检索完再在提示词里告诉模型“你不能用这些内容”——模型守不住的必须在数据源头就掐断。这一条我吃过亏后来所有RAG架构都强制在检索引擎前加权限过滤层。3. 手把手教你画一张AI应用架构图3.1 画图之前先回答五个问题我见过太多人打开画图工具就开始拖框画到一半发现方向错了。画架构图之前先花十分钟回答五个问题这张图基本就成型了。第一个问题谁是用户输入输出是什么。是C端用户直接对话还是B端页面通过API调用还是企业内部系统集成输入是文本、语音还是图片输出是直接回答、结构化数据还是触发某个动作第二个问题数据从哪来。是用户实时提供的还是从公司知识库检索的还是第三方系统实时查询的这决定了你要不要画RAG链路和外部API集成。第三个问题模型怎么选。用哪个模型、部署在哪里、要不要模型网关第四个问题兜底方案是什么。模型超时怎么办、模型返回非法格式怎么办、限流了怎么办、知识库检索不到答案怎么办第五个问题怎么观测。你的日志、指标、链路追踪怎么设计怎么评估每次调用的效果和成本这些问题不一定全都能在画图前回答但你必须想过。我见过最典型的反面例子是有人画了一张完美的架构图每个模块都有唯独没有兜底逻辑上线第一个星期就被模型抽风打挂了三次。画图之前想清楚兜底方案比画图本身更重要。3.2 三种画法分层图、流程图、部署图AI应用架构图有三种主流画法适用范围完全不同。分层图Layered Architecture是默认选择也是我推荐大多数团队采用的画法。它的结构是从上到下依次画用户/客户端、接入层网关、会话管理、编排层Agent、工作流、提示词管理、智能层模型、RAG、向量库、数据层业务数据库、知识库、基础设施日志、监控、安全。分层图的好处是职责清晰每个模块的归属一目了然适合用于方案评审和技术文档。流程图Flow Diagram适合表达一次请求的完整生命周期用户输入进来经过意图识别走RAG检索还是Agent规划如何调用模型结果怎么后处理最后怎么返回给用户。流程图呈现的是一个“请求的旅程”适合用来排查性能瓶颈和定位问题。部署图Deployment Diagram则表达物理部署形态哪些服务跑在K8s上哪些用了云厂商的托管服务哪些是外部API网络边界在哪。部署图在对接运维和安全团队时是刚需。我的建议是一个项目至少画两张一张分层图用于对外沟通和方案评审一张流程图用于内部开发和排查。如果你只画一张选分层图。3.3 实操示范从零画一个知识库问答系统的架构图假设我们要做一个企业内部知识库问答系统用户提出问题系统从公司文档库检索相关内容让模型基于检索结果生成回答。我带你走一遍完整的画图过程。第一步先画顶层用户通过网页或企业IM提问前面放一层API网关负责鉴权、限流、以及SSE流式透传。第二步画会话管理层网关联到会话服务会话服务负责管理多轮对话历史、按需做摘要压缩。第三步画编排层会话服务把用户问题和对话历史交给一个检索编排服务这个服务先做意图判断判断是闲聊还是知识问答知识问答走RAG链路。第四步画RAG链路检索编排服务调用检索服务检索服务并行做向量检索从向量数据库召回Top50和关键词检索从ES召回Top50两路结果合并后交给重排模型精排取Top5作为上下文。第五步回到编排层把检索结果、对话历史、系统提示词拼装成模型输入调用模型网关网关路由到实际的大模型API。第六步画后处理与返回模型流式输出经过后处理服务做非法内容过滤、格式校验、敏感信息检测后通过SSE逐字返回用户。最后在图的底部横向画一层横条标注日志收集、Token成本统计、评估系统它们从所有环节采集数据。画完之后这张图上有七八个模块每个模块职责单一谁调用谁清清楚楚。这就是一张合格的AI应用架构图。你把它拿给后端同事看他大概知道每个服务怎么部署拿给老板看他能知道钱花在哪几个环节拿给算法同学看他知道该在哪个环节调优。4. 架构设计中的关键决策点4.1 同步还是异步体验和成本的拉锯AI应用里最常见的架构决策是同步调用和异步处理怎么选。用户在前端提问期望的是几秒内看到回答所以对话类应用必须走同步流式。但你如果让模型“生成一篇长报告”或者“分析一周的销售数据”这种耗时任务就不适合让用户干等应该走异步提交任务、返回任务ID、后台执行、完成后通过消息推送或轮询通知用户。架构上的处理方式也随之分化。同步流式场景你的服务链路要支持SSE中间任何一环都不能做完整的响应缓冲异步场景你需要一个任务队列比如消息队列或定时任务框架任务状态要落库还要设计任务失败重试和超时回收。很多团队在这个决策上犹豫不决结果做成“同步非流式”用户等半天超时重试重试又把成本翻倍。我的经验是凡是预计响应时间超过10秒的一律考虑异步凡是实时交互的必须流式同步。4.2 缓存策略降本增效的唯一正道AI应用的API成本是大头缓存是省钱的第一个抓手。在架构图里缓存可以出现在三层一是RAG检索结果的缓存同样或相似的问题检索出来的文档集大概率是一样的可以对“问题哈希 检索结果”做缓存命中的话连向量检索都省了二是模型响应的缓存完全相同的用户问题比如FAQ类可以直接返回历史答案很多云厂商也提供语义缓存相似问题也能命中三是中间结果的复用比如多轮对话里对历史对话的摘要、用户意图的分类结果都可以缓存复用。缓存的难点是失效策略。知识库更新的时效性要求不高缓存可以设长一点但涉及价格、库存这类实时数据缓存时间必须严格控制甚至要主动失效。我在一个项目里踩过坑知识库更新后忘了清缓存用户问了三天还在拿旧答案最后还是靠用户投诉才发现的。后来架构图里加了一条强制规则数据更新事件必须触发缓存主动失效绝不允许只依赖过期时间。4.3 降级与兜底模型挂了不是末日生产环境里模型API不是永远稳定的超时、限流、返回异常随时可能发生。架构设计里必须有完整的降级策略。我常用的降级阶梯是这样模型A超时或限流自动切换模型B如果所有模型都不行启用基础规则引擎兜底——比如FAQ精确匹配返回预定答案或者返回“暂时无法回答请稍后再试”的温和话术再不行记录失败请求并进入离线补处理队列。降级策略要特别注意两个细节。第一超时时间不能设太长否则用户侧早就等崩溃了我一般设首字延迟不超过3秒总响应不超过30秒。第二降级逻辑要能单独开关和灰度比如通过配置中心下发某天你想让10%的流量走新模型不需要改代码重新部署。这个降级开关值得画进架构图里和主链路并列标注“可选路径”。4.4 可观测性看得到才能调得了传统应用的监控看QPS、延迟、错误率就够用了AI应用完全不够。模型输出质量是不可观测的老大难问题——你的日志里只有输入和输出token数但你不知道这次回答用户满不满意。所以AI应用的可观测性要多两层一层是质量评估对模型的输出做抽样评估人工或者用另一个模型打分形成质量趋势另一层是成本监控按用户、按部门、按功能拆解token消耗及时发现异常调用和提示词攻击。链路追踪在Agent场景尤其重要。一次Agent调用可能涉及多次模型调用、多次工具调用任何一个环节出错都可能导致最终结果烂掉。我的做法是给每次Agent运行分配一个专属追踪ID把每一次模型调用的输入输出、工具调用的入参出参全部串起来排查时拉出完整轨迹。这套东西前期不搭后面Agent复杂了再补就难了那是真正的痛。5. 实战案例一个多Agent协同的内容分析系统5.1 需求背景与架构目标去年我做了一个内容分析系统需求是这样的运营团队每天要处理大量外部内容包括文章、视频文案、用户评论需要自动完成“内容分类—核心观点提取—风险点识别—摘要生成”四步工作。最初的想法是让一个Agent干完所有事但实测发现单一Agent在长链路任务里错误率很高分类对了观点提取跑偏观点提取对了风险识别又漏了。重新设计架构的时候我们确定了几个目标第一每个环节的产出要可质检和可修正不能一锤子买卖第二各环节的模型可以独立升级和替换第三单环节失败不能影响整批任务的进度。这三点目标直接决定了架构形态用多Agent协同每个Agent负责一个环节Agent之间通过结构化数据传递结果而不是让一个Agent从头干到尾。5.2 架构设计与关键实现整体架构是流水线加反馈环。任务进入系统后先由调度器拆分成独立的任务单元每个任务单元依次经过四个Agent分类Agent、观点提取Agent、风险识别Agent、摘要Agent。每个Agent的输出都是结构化JSON包含结果、置信度、以及可选的补充说明。下游Agent收到上游结果后如果发现数据明显异常比如格式不对、置信度过低可以打回并附上原因调度器会根据原因决定重跑当前环节还是人工介入。模型选型上也做了差异化分类Agent用的是小模型速度快成本低观点提取和摘要Agent用的是中端模型效果和成本平衡风险识别Agent用的是一线大模型因为它处理的是最需要准确性的环节。四个Agent共用一个提示词注册中心和模型网关所有提示词在后台可调模型可以在网关层随时切换。最终的效果是单条内容处理成本比单一Agent方案降低了约45%准确率提升了十几个百分点而且任何一个Agent出问题都不会拖垮整条流水线调度器会自动发告警并把异常任务单独隔离。5.3 这个案例能复用哪些设计这个案例里最值得复用的是三点设计思路。第一拆分成“小而专”的Agent而不是“大而全”的一个Agent每个Agent职责单一评估和迭代都容易。第二Agent之间用结构化数据通信而不是自然语言传递这相当于给数据链路上加了校验点哪个环节出问题立刻能定位。第三调度器带重试和隔离机制把失败控制在最小范围。这套思路后来我复用到好几个项目上无论是做知识问答还是内容生成骨架都可以直接搬。如果你也在做类似的多步骤AI任务建议先不要想着“让AI自己搞定一切”而是用这个“流水线加反馈环”的思路搭架构你会发现可控性完全不在一个量级。6. 常见问题与排查技巧实录6.1 高频问题速查表下面这些是我在带团队做AI应用时遇到频率最高的问题加上排查思路整理成一张速查表。现象可能原因排查与解法回答质量突然下降模型供应商更新了版本、提示词被改、RAG检索结果变差对比灰度版本检查提示词变更记录抽样看检索召回内容回答链路超时模型推理慢、中间环节同步阻塞、SSE缓冲未关闭用追踪ID拉链路看每环节耗时确认网关透传是否正常缩短模型超时并降级用户问相似问题却拿到旧答案缓存未失效或知识库索引没更新检查数据更新事件是否触发缓存清理给知识库加版本号校验检索召回一堆无关内容分块策略不合理、embedding模型换了、重排没生效检查分块是否切碎语义确认向量是否用同一模型生成验证重排链路成本突然飙升某场景循环调用Agent、输出token超长、无缓存命中按用户和功能维度看token明细给Agent加最大轮数和输出上限模型输出JSON解析失败模型输出不规范、带多余内容加结构化输出的schema校验写正则兜底解析解析失败触发重试6.2 三个我踩过的坑希望你避开第一个坑是提示词写在代码里。早期项目提示词都是字符串拼在代码里后期调优的时候每次改动都要发版极其痛苦。后来把提示词全部迁到配置中心加版本号改提示词不用动代码线上秒级生效A/B测试也顺手能做了。这个教训让我在后续所有项目的第一版架构里就把提示词管理独立出来。第二个坑是忘了给Agent加“刹车”。有一次做多Agent协作某个Agent在循环里反复调用工具因为它的规划逻辑进入了死循环一个任务烧了几百次API调用。后来我给所有Agent加了强制约束最大工具调用次数、单次任务最大token数、单次任务最长耗时超过阈值直接终止并告警。这几个约束在架构图上就是一个小小的“限额控制”框但它避免的账单事故是实打实的。第三个坑是流式输出被网关缓冲。有次做对话应用前端迟迟收不到首字排查了半天发现是NGINX默认缓冲了整个上游响应SSE的流式效果全被吞了。后来在网关层显式关闭响应缓冲同时对无关请求的Header做过滤问题才解决。这类基础组件与AI流式传输的兼容性问题文档上写得很隐蔽踩过一次才知道。6.3 架构评审时的五个必问问题每次做AI应用架构评审我都会按下面这五个问题过一遍第一如果模型全部不可用你的应用还能不能用用什么兜底第二你的缓存策略是什么知识更新后怎么保证不吐旧数据第三同一类请求的成本上限是多少有没有硬性限额和告警第四一次完整的Agent调用链路能不能用追踪ID串起来出问题能不能查到每一步第五模型和提示词的升级路径是什么要不要动业务代码这五个问题如果能清晰回答这张架构图基本就能经受住生产环境的考验。我个人画了这么多张AI应用架构图最大的体会是架构不是一次画完就固定的它会随着你对业务的理解和模型能力的变化持续演进。刚开始画图时我总想把所有新概念都塞进去Agent、RAG、向量库、多模型恨不得一张图装下全世界。后来我发现好的架构图是克制的结果——每一个框都要回答“它凭什么存在”每一条线都要回答“它传的是什么数据”。画图这件事本身就是逼着你想清楚每个设计决策的过程。最后再分享一个小技巧画完架构图后拿一张白纸把图盖住凭记忆重画一遍凡是重画时想不起来或者画错位置的内容就是你架构设计里还没想清楚的地方回去补课比找人评审有用得多。
返回列表