大模型应用落地这件事,这两年我见过太多团队从"有个API Key"一路走到"生产环境跑通",过程中踩的坑比预想的深得多。很多人一上来就追最热的Multi-Agent,结果连单Agent的工具调用都没理顺,最后整个系统像一盘散沙。其实从Prompt到Multi-Agent这条演进路径,每一次跳跃都是在解决上一阶段留下的具体痛点,不是概念游戏。把这篇文章收藏起来,按这条路线逐步升级自己的应用,你会少走很多弯路。这条技术演进路线本质上回答了一个问题:大模型如何从"会聊天"变成"能干活"。我见过三类读者最适合读这份指南:一类是刚开始做AI应用、手上只有API调用的经验,想系统了解下一步该学什么;一类是已经在业务里搭了一版RAG或者Workflow,但发现稳定性不够、扩展性受限,想知道瓶颈出在哪里;还有一类是架构师或技术负责人,需要判断当前项目该上到什么复杂度,以及哪种方案最适合手里的业务场景。无论你属于哪一类,这条路线都能帮你定位当前坐标。现在,我按技术复杂度从低到高,把这四个阶段逐一拆开讲透。每个阶段我都会聊清楚它解决什么问题、核心原理是什么、落地时要避开哪些坑。1. 从Prompt到工程化:所有落地的起点都是"把对话变成调用"1.1 Prompt工程解决的不只是"怎么写问题"很多刚接触大模型的朋友觉得Prompt工程就是"把需求描述得清楚一点",实际上这是对Prompt工程最大的误解。在大模型应用的语境里,Prompt工程是一套系统化的输入设计方法,目标是让模型的输出在最少的尝试次数内收敛到业务需要的格式和内容。我在项目里见过一个很典型的案例:某内部知识问答系统,最初直接拿用户问题去调用模型,返回结果时好时坏。后来团队成员花了整整一周重写Prompt,把"请回答以下问题"改成了带有角色设定、背景知识、输出格式约束、边界条件说明的结构化指令,并把系统提示词(System Prompt)与用户输入分开管理,效果立刻上了一个台阶。这个阶段最关键的是理解"模型对输入的敏感度"。同一个问题,表述方式不同,生成质量差异可以达到40%以上,这在有明确评分标准的任务里表现得尤为明显。比如让模型做实体抽取,直接说"抽出其中的地名"和给出完整的抽取目标定义、输出JSON格式示例、负例说明,效果的稳定性完全不同。但这还不是终点。Prompt工程真正的工程化,是把提示词从"写在代码字符串里"升级为"被管理的配置资产"。我在项目里会维护一套提示词版本管理机制,每次修改都记录版本号、变更原因、评测结果,方便回滚和对比。很多团队学到后期才发现,真正撑起Prompt效果的不是措辞技巧,而是这套管理机制。1.2 单轮Prompt的致命短板:无记忆、无工具、无状态如果只做Demo,单轮Prompt完全够用。但一旦进入真实业务,你会立刻撞上三堵墙:第一堵墙是无记忆。模型不会记住上次对话说过什么,多轮上下文要靠代码手动拼接。每次对话都把所有历史塞进上下文窗口,既浪费token,又容易让模型在长对话后期迷失重点。第二堵墙是无工具。模型只会"说"不会"做",它无法查数据库、无法调接口、无法操作文件系统,所有需要执行的动作都得靠外部系统处理。第三堵墙是无状态。每次调用都是孤立的,没有会话状态、没有流程状态、没有业务上下文。这三个短板是推动技术演进的原始动力。从这里开始,每一层技术演进都是在解决这三个问题中的某几个。理解这一点,你就不会把后面的RAG、Workflow、Multi-Agent当作孤立的技术名词,而是看作一整套"补短板"的连续方案。2. RAG与知识增强:让模型学会"查资料再回答"2.1 为什么"模型记不住知识"这件事无法靠训练解决大模型的参数空间是有限的,训练数据的时效性也是固定的。你不可能每隔一天就重新训练一次模型把新知识塞进去,成本和时间都不现实。这是RAG(检索增强生成)出现的根本原因——既然模型记不住,那就让它在回答之前去外部知识库里查。RAG的核心流程拆开看,其实就是一个三段式结构:先索引,把文档切块、向量化、存入向量数据库;再检索,把用户问题也向量化,去库里找最相似的文本块;最后生成,把检索到的相关文本块和用户问题一起拼进Prompt,让模型参考这些材料来组织答案。这个流程看起来简单,但每个环节都有魔鬼细节。文档切块的粒度直接影响检索质量,我在实践中试过128、256、512、1024这几个常见的块大小,发现没有绝对最优值,而是取决于你的文档类型。政策法规类适合小块精确检索,技术手册类适合大块保留上下文,混合型内容则需要按章节结构做父子分块。我记得有一次做某行业报告的知识问答,按固定512字切块后检索效果很差,很多问题是跨块的。后来改成按语义段落切块,再用标题结构做层级索引,回答准确率提升了一大截。这份经验后来被写进了团队的知识库建设规范。2.2 混合检索与重排:RAG效果的两个关键旋钮很多教程只会教你装向量数据库然后做相似度检索,但这在真实业务里远远不够。向量检索擅长语义匹配,但在处理精确数字、产品型号、姓名等关键词类型问题时经常翻车。比如用户问"2025年第二季度的营收",向量检索很可能会把"2025"和"第二季度"拆开处理,导致召回结果不准。更稳的做法是混合检索:同时跑向量相似度检索和关键词匹配检索,然后把两路结果合并去重。这时候会出现新的问题——两路检索结果的排序标准不一样,直接合并的排序是混乱的。所以需要引入重排模型(Reranker),统一对召回的候选片段按"与问题的相关性"重新打分排序。我在实际项目里给团队定了一条基准线:先用BM25关键词检索加向量检索做双路召回,候选集扩到原结果的两到三倍,然后接一个轻量级重排模型,最后只把Top 3到Top 5的结果拼进上下文。这条链路比单路向量检索在专业领域的准确率高出将近20个百分点,代价只是多了几十毫秒的延迟。如果你的应用对准确率敏感,这个代价非常值得。还有一个经常被忽视的点:RAG不是只做一次检索就够了。复杂问题需要拆解成多个子问题,分别检索,然后再汇总。这就是后面要讲的工作流的雏形——你会慢慢发现,所有复杂能力都是从一个简单的单步操作开始叠加出来的。3. Function Calling与工作流:把"大模型"变成"执行引擎"3.1 Function Calling让模型从"会说"到"会调"大模型应用落地最关键的一步,是让模型能够触发外部行动。Function Calling(函数调用)就是干这个事的——你给模型定义一批工具函数,包括函数名、参数说明、功能描述,模型在理解用户意图后,会输出一个结构化的调用指令,告诉系统"应该调用哪个函数、参数是什么"。一个容易误解的点是:模型并不真的去执行函数,它只是生成调用指令。真正执行的是你的后端代码。这意味着,你暴露给模型的函数描述(Function Schema)质量,直接决定了模型判断的准确性。描述写得含糊,模型就不知道该不该调用、传什么参数。做Function Calling这几年我积累了一条最实用的经验:给函数起名一定要动词开头且含义明确,比如get_user_balance比query_data好得多;参数描述要写明格式和取值范围,避免模型随意发挥;函数功能描述里要说明什么场景下该用、什么场景下不该用,给模型清晰的边界感。很多模型在函数选择上出错,不是模型不行,是函数定义写得像天书。另一个是异常处理。模型生成的调用参数偶尔会出现类型错误、缺字段、甚至幻觉出不存在的函数名。所以函数调用框架里必须有一层校验和兜底逻辑,调用失败时要把错误信息反馈给模型,让它重新生成。这一步很多初建系统的人会忽略,直到线上出了问题才发现。3.2 工作流(Workflow):把无序对话变成固定管道如果说Function Calling是给模型装上了手,那Workflow就是给这只手规划了一套动作顺序。在真实业务里,很少有任务能靠一次函数调用搞定。拿"查天气然后安排出行方式"这个场景举例,模型需要先调天气查询,拿到结果后再基于天气信息调用出行规划函数,中间还可能需要确认用户偏好。这类多步骤任务如果在代码里写死顺序,就会回到传统编程的老路——逻辑死板,没法应对用户输入的变化。如果全交给模型自由发挥,又会失控,可能跳过必要的步骤或者重复调用。工作流方案采取的是中间路线:把任务拆成有向无环图(DAG),节点是单个操作(可能是一次模型调用、一次函数执行、一次条件判断),边是执行顺序和流转条件。我在搭建工作流时有几个固定习惯:每个节点的输入输出都定义成JSON Schema,这样上下游交换数据时能自动校验格式;所有节点的日志都带上任务ID和节点ID,方便出问题时按图追踪;工作流定义用配置文件管理而不是硬编码在代码里,这样调整流程不需要重新发布。工作流真正解决了Prompt阶段"无状态"的问题。每个任务在工作流里都有明确的执行状态和上下文数据,可以暂停、可以重试、可以中途分流。从这一阶段开始,大模型应用才真正具备"可运维性"。3.3 状态机思维:从Workflow到复杂系统必过的一关做工作流设计,本质上是在做状态机设计。每个任务从创建、执行中、等待工具结果、到最终完成,状态流转必须是清晰的。我见过很多团队在工作流阶段翻车,根源是状态设计混乱——任务被重复执行、结果被覆盖、失败重试没有幂等保障。这里有一个实战经验想分享:任务执行必须具备幂等性。如果同一个任务因为网络超时被重试了两次,系统要能保证最终数据不会被写两次。我的解决方案是给每个任务生成唯一ID,在处理函数入口做去重检查,同时数据库操作尽量用条件更新代替先查后写。状态机思维的价值在于,它是通向Multi-Agent的必经桥梁。如果你的工作流在这个阶段就设计得乱七八糟,后面引入多个Agent时,状态复杂度会成倍增长,到时候你面对的关系数会是指数级的——四个Agent互相协作需要考虑的连接关系就已经相当复杂了,如果状态设计还不清晰,整个系统会迅速变成一坨理不清的乱麻。4. Multi-Agent协作:从"一个模型"到"一支团队"4.1 单Agent的极限与多Agent的核心逻辑当你把越来越多的技能塞给同一个Agent时,会遇到明显的性能瓶颈:上下文窗口很快被占满,频繁被长对话撑爆工具数量太多时,模型在函数选择上的准确率明显下滑提示词越来越长,模型越来越"不知所措",指令遵循率下降这是推动架构从单Agent走向多Agent的最直接动力。我测试过一个工具选择场景,当可调用的函数从10个增加到50个时,模型选错函数的概率几乎翻了一倍。更麻烦的是,当你为Agent加入越来越多的系统提示词来约束行为,它的核心任务表现可能反而变差。Multi-Agent的核心思路其实特别朴素:像组建一支团队一样拆分系统。每个Agent只负责一个专门的职责,拥有专属的提示词、工具集和上下文记忆。它们之间通过消息传递协作,共同完成复杂任务。这就像你不可能让一个员工同时又当前台、又做财务、又写代码,分工明确才能各司其职。我搭过的一个内容生产系统就是这种架构:一个策划Agent负责根据主题生成选题方向和内容大纲,一个写作Agent负责按大纲撰写初稿,一个审核Agent负责检查事实错误和合规风险。三个Agent各干各的,通过共享任务状态流转衔接。这样一个多月跑下来,产出质量的稳定性比之前用一个全能Agent好很多,关键问题是可定位了——内容出问题我能立刻知道是哪个环节出的。4.2 三种协作范式:编排式、管道式、协商式Multi-Agent的架构没有统一标准,但根据协作方式,可以归纳为三种常见范式。理解了这三种,你设计系统时就能选对起点。第一种是编排式(Orchestration)。一个中心化调度Agent负责理解用户请求、拆解任务、分发给各个子Agent执行,然后汇总结果。调度者拥有全局视野,子Agent各司其职。这种范式的好处是逻辑清晰、便于控制,适合任务边界比较明确的场景。第二种是管道式(Pipeline)。多个Agent按固定顺序依次处理,上一个Agent的输出是下一个Agent的输入。内容审核、信息抽取、报告生成这类有前置依赖关系的任务适合这种模式,就像工厂流水线。第三种是协商式(Negotiation/Peer-to-Peer)。没有中心调度者,多个Agent像同事一样自由讨论、互相传递消息、协商出最终结果。这种模式最灵活,但也是最难控制的——消息会爆炸、没有全局状态、容易陷入死循环。除非你的场景真的很需要,否则我建议从编排式起步。从Podcast到复杂项目管理系统,业界很多产品背后其实都是编排式架构。这个选择不是偶然——在线下团队里,一个项目经理比一群自由讨论的人更容易让事情落地。4.3 Agent通信与上下文隔离:Multi-Agent落地最关键的两个细节Multi-Agent听起来高级,但落地时最大的坑往往出现在两个细节上:Agent之间怎么说话、上下文怎么共享。通信方面,常见方案有直接消息传递、共享黑板(Blackboard)、结构化事件总线三种。直接传递简单但耦合度高;共享黑板适合多人协作场景但要注意读写冲突;事件总线解耦性强但需要设计消息Schema。实际项目里我倾向于用结构化事件总线,所有Agent都只通过总线收发消息,这样新增Agent时对现有系统侵入最小。上下文隔离是更隐蔽的问题。如果多个Agent共享同一个上下文窗口,会出现信息互相污染——A Agent的处理细节被带到了B Agent的任务里。解决方式是每个Agent维护自己的上下文存储,只把任务相关的必要信息传入,任务完成后把关键产出写入共享空间,然后清空私有上下文。这套机制做对了,Multi-Agent系统的稳定性和单Agent相比才有质的提升。另外一个具体的细节是:团队协作的效率不在于成员之间沟通多频繁,而在于沟通的信息密度。Agent之间的消息也应该精简——只传结论和必要数据,不传冗长的思考过程,思考过程留在各自的日志里供排查问题用。5. Agent的记忆机制与工具扩展:决定系统上限的两块天花板5.1 短期工作记忆与长期知识记忆的分层设计Multi-Agent系统跑起来之后,你很快会撞到下一个问题:Agent记不住东西。传统的无状态函数调用在Agent架构里撑不住了,因为Agent需要在一段较长的任务周期内,持续引用之前的中间结论。这里需要搭建两层记忆:短期工作记忆对应单个任务执行周期内的上下文数据,通常用内存存储加任务ID索引,任务结束就释放。长期知识记忆则是Agent跨任务积累的经验和偏好,这部分应该持久化到数据库或向量存储里,并按Agent隔离。我在一个客户服务Agent上做过这类设计,效果非常明显。这个Agent会把每次服务的关键结论和用户偏好写入长期记忆,下次对这个用户进行服务时先加载历史摘要再开始对话。用户会觉得"这个AI居然记得我上次说过的事",体验感完全是两回事。实现上就是加一步"对话前先查询历史摘要",成本不高但收益极为直观。记忆分层还有一个作用,是控制token消耗。长对话中的历史信息全部塞进上下文很快就爆炸了,用短期记忆加定期摘要的模式,可以把上下文控制在固定窗口内,成本稳定可预估。这一点在生产环境里至关重要,因为token费用直接关系到你的系统能不能活过试点期。5.2 工具集管理的边界:给Agent留出"正确的工具数量"前面提到,给Agent塞太多工具会显著降低选择准确率。这个现象背后的机制是:工具描述和用户意图之间的匹配空间变大,模型需要区分更多近似选项。应对策略有几个方向,我在项目里采用最多的是工具分层和按需挂载。工具分层是指把工具按领域分组,比如"用户域工具"、"订单域工具"、"商品域工具",上层用一个路由器Agent判断当前请求属于哪个域,再把请求分发给只挂载了对应工具集的子Agent处理。这样每个Agent手里的工具数量就没那么庞大了,选择的准确率自然提升。按需挂载更进一步,是动态决定给Agent暴露哪些工具。比如任务明确涉及订单查询,那就只挂载订单相关的函数定义,其余工具不进入这次调用的上下文。实现上需要任务理解模块做一次预判,多一次模型调用、多消耗一点token,但换来的是工具选择准确率的大幅提升。对有复杂工具矩阵的业务,这个代价绝对划算。工具扩展还有一个容易忽略的细节:工具执行的超时时间。模型在等待函数结果时如果一直没响应,整个任务会被卡住。我会给每个工具单独配置超时时间,并给Agent设定兜底回复策略——工具超时了要能向用户说明"这个操作响应比较慢,我再试一次"或者直接推荐人工处理。6. 工程化落地:从技术选型到生产可用的完整决策路径6.1 哪个阶段适合你:一张选型速查表讲了四个阶段之后,最实用的方法是教你对照自己的业务情况做判断。每家公司的资源和业务特征不同,直接照搬最高复杂度方案是在给自己埋坑。我整理了下面的判断逻辑,帮你快速定位当前项目应该处在哪个阶段:当前状态业务特征推荐方案刚接入大模型API简单问答、内容生成、不需要访问业务数据Prompt工程 + 结构化提示词管理模型幻觉严重、需要注入私有知识知识库问答、企业内部文档检索在Prompt基础上引入RAG链路需要执行操作、对接多个系统查订单、办流程、数据查询更新引入Function Calling + 工作流单一Agent溢出、工具过多选择不准复杂业务、跨多领域协同尝试编排式Multi-Agent架构注意,这个表格不是让你一步跨到底,而是建议你按顺序升级。每一步的升级都要有明确的性能指标驱动,不能因为"Multi-Agent听起来更高级"就强行上马。我见过一个团队做内部知识库问答,本来Prompt加RAG就足够了,却硬要搭三个Agent协作,结果维护成本翻倍、效果反而更不稳定,后来又退回简化方案。6.2 可观测性与评测体系:没有这两样,活不过生产环境大模型应用是概率系统,同一个输入每次的输出可能都不一样。这意味着传统软件工程里"测试通过就能上线"的逻辑不适用。生产环境会出现无数的bad case和雷人输出,所以必须建立两套基础设施:可观测性和评测体系。可观测性方面,我会对每次模型调用记录完整的输入输出、token消耗、延迟、模型版本。每次函数调用也要记录参数、返回结果、执行状态。每条外部消息要附带链路追踪ID,把一次完整请求涉及的模型调用、工具调用、Agent流转全部串起来。这些记录的排查价值在系统出问题时会呈指数级体现。评测体系方面,建立一个golden set,包含典型的用户问题、期望的模型行为、关键评估标准。每次修改Prompt或升级架构,都跑一遍这套数据集,对比通过率,防止"修好一个case、弄坏一片case"的情况。做Agent系统还会额外测一些对抗性用例:故意给模糊指令、给多指令混合、给超出边界的要求,看系统的兜底能力。我自己的习惯是每周跑一次完整回归评测,同时在每次线上反馈出来的bad case里挑选典型,补充进评测集。这样跑一两个月,系统质量就能维持在一个稳定的水位线上。6.3 成本与延迟的权衡:一个被严重低估的落地因素最后必须讲一下成本与延迟,因为大模型应用从Demo走向生产,真正劝退很多团队的往往是这两个问题。延迟方面,Multi-Agent系统因为涉及多轮模型调用串行执行,端到端延迟会比单次调用高出不少。如果是几秒钟的同步等待还能接受,要是超过十几秒用户基本就流失了。我的应对思路是尽量把串行改成并行——只要Agent之间没依赖关系就同时派发任务;需要长任务时改成异步处理,先给用户一个"处理中"的反馈,完成后通知,而不是让用户一直盯着加载转圈。成本方面,有两个策略我一直在用:一是用小模型过滤大模型,简单任务先用便宜的小模型处理,不行再升级到大模型;二是Prompt压缩,尽量减少不必要的历史记录和长指令。RAG链路里控制召回文档的块数和长度同样能有效压低成本。很多项目一个月的token账单高得离谱,不是模型选大了,就是Prompt设计冗长,挤一挤空间很大。7. 落地经验与避坑清单:来自一线的复盘做完这些项目之后,我对这套演进路线有几条切身的体会,拿出来分享给正在路上的人。第一,演进是打怪升级,不是重新装修。每次架构转型,都是因为当前阶段确实扛不住业务诉求了。不要因为看到新概念就觉得旧方案该丢,Prompt工程在Multi-Agent时代依然是最底层的地基。Agent的提示词写得烂,再多Agent也白搭。第二,先跑通再优化。很多团队死在过度设计的路上。第一版能用一个Agent加一个工作流解决,就不要上复杂的协作架构。先让业务跑起来,用真实数据暴露问题,再根据问题决定下一步往哪里演进。大模型应用迭代的速度远比传统软件快,你积累起真实调用数据和用户反馈后,架构升级会比闭门造车靠谱得多。第三,不要迷信"全自动"。大模型应用的很多环节需要人机协同,比如Agent执行到关键操作时要人工确认,审核Agent拿不准时要转人工,高价值决策一定要留人工兜底。自动化和人工介入的比例要设计清楚。我见过太多团队追求全自动化,把人工确认逻辑全部砍掉,结果出了事故后信心全无,又退回完全人工,之前的建设全部白费。好的落地方式是渐进式放权——先让AI出建议、人来决定,跑出信任后再逐步扩大自动化的边界。第四,架构要为未来的Agent演进留接口。即使你今天只做Prompt和RAG,也可以在数据层、调用层预留标准化的输入输出格式、消息协议和批处理接口。这样未来接Function Calling或Multi-Agent时,不需要推翻重来。我在不少项目里看到,头一版没有留接口,后面上多Agent时,所有工具和流程全部重写,浪费了大量返工成本。最后还有个实用小技巧:把所有的Agent角色、Prompt、工具定义都当成代码资产管理,走版本控制、走评审流程。大模型应用的改动频率极高,如果没有版本管理,一旦线上出了bad case,你根本不知道是哪个版本带的回归。这个习惯救过我很多次。从Prompt到Multi-Agent,技术形态在变,但解决问题的思路一以贯之:拆解任务、明确边界、控制状态、可观测可评测。把这四个原则刻在脑子里,你就能在快速变化的大模型技术栈里,稳稳地把应用立起来。
大模型应用落地这件事,这两年我见过太多团队从"有个API Key"一路走到"生产环境跑通",过程中踩的坑比预想的深得多。很多人一上来就追最热的Multi-Agent,结果连单Agent的工具调用都没理顺,最后整个系统像一盘散沙。其实从Prompt到Multi-Agent这条演进路径,每一次跳跃都是在解决上一阶段留下的具体痛点,不是概念游戏。把这篇文章收藏起来,按这条路线逐步升级自己的应用,你会少走很多弯路。这条技术演进路线本质上回答了一个问题:大模型如何从"会聊天"变成"能干活"。我见过三类读者最适合读这份指南:一类是刚开始做AI应用、手上只有API调用的经验,想系统了解下一步该学什么;一类是已经在业务里搭了一版RAG或者Workflow,但发现稳定性不够、扩展性受限,想知道瓶颈出在哪里;还有一类是架构师或技术负责人,需要判断当前项目该上到什么复杂度,以及哪种方案最适合手里的业务场景。无论你属于哪一类,这条路线都能帮你定位当前坐标。现在,我按技术复杂度从低到高,把这四个阶段逐一拆开讲透。每个阶段我都会聊清楚它解决什么问题、核心原理是什么、落地时要避开哪些坑。1. 从Prompt到工程化:所有落地的起点都是"把对话变成调用"1.1 Prompt工程解决的不只是"怎么写问题"很多刚接触大模型的朋友觉得Prompt工程就是"把需求描述得清楚一点",实际上这是对Prompt工程最大的误解。在大模型应用的语境里,Prompt工程是一套系统化的输入设计方法,目标是让模型的输出在最少的尝试次数内收敛到业务需要的格式和内容。我在项目里见过一个很典型的案例:某内部知识问答系统,最初直接拿用户问题去调用模型,返回结果时好时坏。后来团队成员花了整整一周重写Prompt,把"请回答以下问题"改成了带有角色设定、背景知识、输出格式约束、边界条件说明的结构化指令,并把系统提示词(System Prompt)与用户输入分开管理,效果立刻上了一个台阶。这个阶段最关键的是理解"模型对输入的敏感度"。同一个问题,表述方式不同,生成质量差异可以达到40%以上,这在有明确评分标准的任务里表现得尤为明显。比如让模型做实体抽取,直接说"抽出其中的地名"和给出完整的抽取目标定义、输出JSON格式示例、负例说明,效果的稳定性完全不同。但这还不是终点。Prompt工程真正的工程化,是把提示词从"写在代码字符串里"升级为"被管理的配置资产"。我在项目里会维护一套提示词版本管理机制,每次修改都记录版本号、变更原因、评测结果,方便回滚和对比。很多团队学到后期才发现,真正撑起Prompt效果的不是措辞技巧,而是这套管理机制。1.2 单轮Prompt的致命短板:无记忆、无工具、无状态如果只做Demo,单轮Prompt完全够用。但一旦进入真实业务,你会立刻撞上三堵墙:第一堵墙是无记忆。模型不会记住上次对话说过什么,多轮上下文要靠代码手动拼接。每次对话都把所有历史塞进上下文窗口,既浪费token,又容易让模型在长对话后期迷失重点。第二堵墙是无工具。模型只会"说"不会"做",它无法查数据库、无法调接口、无法操作文件系统,所有需要执行的动作都得靠外部系统处理。第三堵墙是无状态。每次调用都是孤立的,没有会话状态、没有流程状态、没有业务上下文。这三个短板是推动技术演进的原始动力。从这里开始,每一层技术演进都是在解决这三个问题中的某几个。理解这一点,你就不会把后面的RAG、Workflow、Multi-Agent当作孤立的技术名词,而是看作一整套"补短板"的连续方案。2. RAG与知识增强:让模型学会"查资料再回答"2.1 为什么"模型记不住知识"这件事无法靠训练解决大模型的参数空间是有限的,训练数据的时效性也是固定的。你不可能每隔一天就重新训练一次模型把新知识塞进去,成本和时间都不现实。这是RAG(检索增强生成)出现的根本原因——既然模型记不住,那就让它在回答之前去外部知识库里查。RAG的核心流程拆开看,其实就是一个三段式结构:先索引,把文档切块、向量化、存入向量数据库;再检索,把用户问题也向量化,去库里找最相似的文本块;最后生成,把检索到的相关文本块和用户问题一起拼进Prompt,让模型参考这些材料来组织答案。这个流程看起来简单,但每个环节都有魔鬼细节。文档切块的粒度直接影响检索质量,我在实践中试过128、256、512、1024这几个常见的块大小,发现没有绝对最优值,而是取决于你的文档类型。政策法规类适合小块精确检索,技术手册类适合大块保留上下文,混合型内容则需要按章节结构做父子分块。我记得有一次做某行业报告的知识问答,按固定512字切块后检索效果很差,很多问题是跨块的。后来改成按语义段落切块,再用标题结构做层级索引,回答准确率提升了一大截。这份经验后来被写进了团队的知识库建设规范。2.2 混合检索与重排:RAG效果的两个关键旋钮很多教程只会教你装向量数据库然后做相似度检索,但这在真实业务里远远不够。向量检索擅长语义匹配,但在处理精确数字、产品型号、姓名等关键词类型问题时经常翻车。比如用户问"2025年第二季度的营收",向量检索很可能会把"2025"和"第二季度"拆开处理,导致召回结果不准。更稳的做法是混合检索:同时跑向量相似度检索和关键词匹配检索,然后把两路结果合并去重。这时候会出现新的问题——两路检索结果的排序标准不一样,直接合并的排序是混乱的。所以需要引入重排模型(Reranker),统一对召回的候选片段按"与问题的相关性"重新打分排序。我在实际项目里给团队定了一条基准线:先用BM25关键词检索加向量检索做双路召回,候选集扩到原结果的两到三倍,然后接一个轻量级重排模型,最后只把Top 3到Top 5的结果拼进上下文。这条链路比单路向量检索在专业领域的准确率高出将近20个百分点,代价只是多了几十毫秒的延迟。如果你的应用对准确率敏感,这个代价非常值得。还有一个经常被忽视的点:RAG不是只做一次检索就够了。复杂问题需要拆解成多个子问题,分别检索,然后再汇总。这就是后面要讲的工作流的雏形——你会慢慢发现,所有复杂能力都是从一个简单的单步操作开始叠加出来的。3. Function Calling与工作流:把"大模型"变成"执行引擎"3.1 Function Calling让模型从"会说"到"会调"大模型应用落地最关键的一步,是让模型能够触发外部行动。Function Calling(函数调用)就是干这个事的——你给模型定义一批工具函数,包括函数名、参数说明、功能描述,模型在理解用户意图后,会输出一个结构化的调用指令,告诉系统"应该调用哪个函数、参数是什么"。一个容易误解的点是:模型并不真的去执行函数,它只是生成调用指令。真正执行的是你的后端代码。这意味着,你暴露给模型的函数描述(Function Schema)质量,直接决定了模型判断的准确性。描述写得含糊,模型就不知道该不该调用、传什么参数。做Function Calling这几年我积累了一条最实用的经验:给函数起名一定要动词开头且含义明确,比如get_user_balance比query_data好得多;参数描述要写明格式和取值范围,避免模型随意发挥;函数功能描述里要说明什么场景下该用、什么场景下不该用,给模型清晰的边界感。很多模型在函数选择上出错,不是模型不行,是函数定义写得像天书。另一个是异常处理。模型生成的调用参数偶尔会出现类型错误、缺字段、甚至幻觉出不存在的函数名。所以函数调用框架里必须有一层校验和兜底逻辑,调用失败时要把错误信息反馈给模型,让它重新生成。这一步很多初建系统的人会忽略,直到线上出了问题才发现。3.2 工作流(Workflow):把无序对话变成固定管道如果说Function Calling是给模型装上了手,那Workflow就是给这只手规划了一套动作顺序。在真实业务里,很少有任务能靠一次函数调用搞定。拿"查天气然后安排出行方式"这个场景举例,模型需要先调天气查询,拿到结果后再基于天气信息调用出行规划函数,中间还可能需要确认用户偏好。这类多步骤任务如果在代码里写死顺序,就会回到传统编程的老路——逻辑死板,没法应对用户输入的变化。如果全交给模型自由发挥,又会失控,可能跳过必要的步骤或者重复调用。工作流方案采取的是中间路线:把任务拆成有向无环图(DAG),节点是单个操作(可能是一次模型调用、一次函数执行、一次条件判断),边是执行顺序和流转条件。我在搭建工作流时有几个固定习惯:每个节点的输入输出都定义成JSON Schema,这样上下游交换数据时能自动校验格式;所有节点的日志都带上任务ID和节点ID,方便出问题时按图追踪;工作流定义用配置文件管理而不是硬编码在代码里,这样调整流程不需要重新发布。工作流真正解决了Prompt阶段"无状态"的问题。每个任务在工作流里都有明确的执行状态和上下文数据,可以暂停、可以重试、可以中途分流。从这一阶段开始,大模型应用才真正具备"可运维性"。3.3 状态机思维:从Workflow到复杂系统必过的一关做工作流设计,本质上是在做状态机设计。每个任务从创建、执行中、等待工具结果、到最终完成,状态流转必须是清晰的。我见过很多团队在工作流阶段翻车,根源是状态设计混乱——任务被重复执行、结果被覆盖、失败重试没有幂等保障。这里有一个实战经验想分享:任务执行必须具备幂等性。如果同一个任务因为网络超时被重试了两次,系统要能保证最终数据不会被写两次。我的解决方案是给每个任务生成唯一ID,在处理函数入口做去重检查,同时数据库操作尽量用条件更新代替先查后写。状态机思维的价值在于,它是通向Multi-Agent的必经桥梁。如果你的工作流在这个阶段就设计得乱七八糟,后面引入多个Agent时,状态复杂度会成倍增长,到时候你面对的关系数会是指数级的——四个Agent互相协作需要考虑的连接关系就已经相当复杂了,如果状态设计还不清晰,整个系统会迅速变成一坨理不清的乱麻。4. Multi-Agent协作:从"一个模型"到"一支团队"4.1 单Agent的极限与多Agent的核心逻辑当你把越来越多的技能塞给同一个Agent时,会遇到明显的性能瓶颈:上下文窗口很快被占满,频繁被长对话撑爆工具数量太多时,模型在函数选择上的准确率明显下滑提示词越来越长,模型越来越"不知所措",指令遵循率下降这是推动架构从单Agent走向多Agent的最直接动力。我测试过一个工具选择场景,当可调用的函数从10个增加到50个时,模型选错函数的概率几乎翻了一倍。更麻烦的是,当你为Agent加入越来越多的系统提示词来约束行为,它的核心任务表现可能反而变差。Multi-Agent的核心思路其实特别朴素:像组建一支团队一样拆分系统。每个Agent只负责一个专门的职责,拥有专属的提示词、工具集和上下文记忆。它们之间通过消息传递协作,共同完成复杂任务。这就像你不可能让一个员工同时又当前台、又做财务、又写代码,分工明确才能各司其职。我搭过的一个内容生产系统就是这种架构:一个策划Agent负责根据主题生成选题方向和内容大纲,一个写作Agent负责按大纲撰写初稿,一个审核Agent负责检查事实错误和合规风险。三个Agent各干各的,通过共享任务状态流转衔接。这样一个多月跑下来,产出质量的稳定性比之前用一个全能Agent好很多,关键问题是可定位了——内容出问题我能立刻知道是哪个环节出的。4.2 三种协作范式:编排式、管道式、协商式Multi-Agent的架构没有统一标准,但根据协作方式,可以归纳为三种常见范式。理解了这三种,你设计系统时就能选对起点。第一种是编排式(Orchestration)。一个中心化调度Agent负责理解用户请求、拆解任务、分发给各个子Agent执行,然后汇总结果。调度者拥有全局视野,子Agent各司其职。这种范式的好处是逻辑清晰、便于控制,适合任务边界比较明确的场景。第二种是管道式(Pipeline)。多个Agent按固定顺序依次处理,上一个Agent的输出是下一个Agent的输入。内容审核、信息抽取、报告生成这类有前置依赖关系的任务适合这种模式,就像工厂流水线。第三种是协商式(Negotiation/Peer-to-Peer)。没有中心调度者,多个Agent像同事一样自由讨论、互相传递消息、协商出最终结果。这种模式最灵活,但也是最难控制的——消息会爆炸、没有全局状态、容易陷入死循环。除非你的场景真的很需要,否则我建议从编排式起步。从Podcast到复杂项目管理系统,业界很多产品背后其实都是编排式架构。这个选择不是偶然——在线下团队里,一个项目经理比一群自由讨论的人更容易让事情落地。4.3 Agent通信与上下文隔离:Multi-Agent落地最关键的两个细节Multi-Agent听起来高级,但落地时最大的坑往往出现在两个细节上:Agent之间怎么说话、上下文怎么共享。通信方面,常见方案有直接消息传递、共享黑板(Blackboard)、结构化事件总线三种。直接传递简单但耦合度高;共享黑板适合多人协作场景但要注意读写冲突;事件总线解耦性强但需要设计消息Schema。实际项目里我倾向于用结构化事件总线,所有Agent都只通过总线收发消息,这样新增Agent时对现有系统侵入最小。上下文隔离是更隐蔽的问题。如果多个Agent共享同一个上下文窗口,会出现信息互相污染——A Agent的处理细节被带到了B Agent的任务里。解决方式是每个Agent维护自己的上下文存储,只把任务相关的必要信息传入,任务完成后把关键产出写入共享空间,然后清空私有上下文。这套机制做对了,Multi-Agent系统的稳定性和单Agent相比才有质的提升。另外一个具体的细节是:团队协作的效率不在于成员之间沟通多频繁,而在于沟通的信息密度。Agent之间的消息也应该精简——只传结论和必要数据,不传冗长的思考过程,思考过程留在各自的日志里供排查问题用。5. Agent的记忆机制与工具扩展:决定系统上限的两块天花板5.1 短期工作记忆与长期知识记忆的分层设计Multi-Agent系统跑起来之后,你很快会撞到下一个问题:Agent记不住东西。传统的无状态函数调用在Agent架构里撑不住了,因为Agent需要在一段较长的任务周期内,持续引用之前的中间结论。这里需要搭建两层记忆:短期工作记忆对应单个任务执行周期内的上下文数据,通常用内存存储加任务ID索引,任务结束就释放。长期知识记忆则是Agent跨任务积累的经验和偏好,这部分应该持久化到数据库或向量存储里,并按Agent隔离。我在一个客户服务Agent上做过这类设计,效果非常明显。这个Agent会把每次服务的关键结论和用户偏好写入长期记忆,下次对这个用户进行服务时先加载历史摘要再开始对话。用户会觉得"这个AI居然记得我上次说过的事",体验感完全是两回事。实现上就是加一步"对话前先查询历史摘要",成本不高但收益极为直观。记忆分层还有一个作用,是控制token消耗。长对话中的历史信息全部塞进上下文很快就爆炸了,用短期记忆加定期摘要的模式,可以把上下文控制在固定窗口内,成本稳定可预估。这一点在生产环境里至关重要,因为token费用直接关系到你的系统能不能活过试点期。5.2 工具集管理的边界:给Agent留出"正确的工具数量"前面提到,给Agent塞太多工具会显著降低选择准确率。这个现象背后的机制是:工具描述和用户意图之间的匹配空间变大,模型需要区分更多近似选项。应对策略有几个方向,我在项目里采用最多的是工具分层和按需挂载。工具分层是指把工具按领域分组,比如"用户域工具"、"订单域工具"、"商品域工具",上层用一个路由器Agent判断当前请求属于哪个域,再把请求分发给只挂载了对应工具集的子Agent处理。这样每个Agent手里的工具数量就没那么庞大了,选择的准确率自然提升。按需挂载更进一步,是动态决定给Agent暴露哪些工具。比如任务明确涉及订单查询,那就只挂载订单相关的函数定义,其余工具不进入这次调用的上下文。实现上需要任务理解模块做一次预判,多一次模型调用、多消耗一点token,但换来的是工具选择准确率的大幅提升。对有复杂工具矩阵的业务,这个代价绝对划算。工具扩展还有一个容易忽略的细节:工具执行的超时时间。模型在等待函数结果时如果一直没响应,整个任务会被卡住。我会给每个工具单独配置超时时间,并给Agent设定兜底回复策略——工具超时了要能向用户说明"这个操作响应比较慢,我再试一次"或者直接推荐人工处理。6. 工程化落地:从技术选型到生产可用的完整决策路径6.1 哪个阶段适合你:一张选型速查表讲了四个阶段之后,最实用的方法是教你对照自己的业务情况做判断。每家公司的资源和业务特征不同,直接照搬最高复杂度方案是在给自己埋坑。我整理了下面的判断逻辑,帮你快速定位当前项目应该处在哪个阶段:当前状态业务特征推荐方案刚接入大模型API简单问答、内容生成、不需要访问业务数据Prompt工程 + 结构化提示词管理模型幻觉严重、需要注入私有知识知识库问答、企业内部文档检索在Prompt基础上引入RAG链路需要执行操作、对接多个系统查订单、办流程、数据查询更新引入Function Calling + 工作流单一Agent溢出、工具过多选择不准复杂业务、跨多领域协同尝试编排式Multi-Agent架构注意,这个表格不是让你一步跨到底,而是建议你按顺序升级。每一步的升级都要有明确的性能指标驱动,不能因为"Multi-Agent听起来更高级"就强行上马。我见过一个团队做内部知识库问答,本来Prompt加RAG就足够了,却硬要搭三个Agent协作,结果维护成本翻倍、效果反而更不稳定,后来又退回简化方案。6.2 可观测性与评测体系:没有这两样,活不过生产环境大模型应用是概率系统,同一个输入每次的输出可能都不一样。这意味着传统软件工程里"测试通过就能上线"的逻辑不适用。生产环境会出现无数的bad case和雷人输出,所以必须建立两套基础设施:可观测性和评测体系。可观测性方面,我会对每次模型调用记录完整的输入输出、token消耗、延迟、模型版本。每次函数调用也要记录参数、返回结果、执行状态。每条外部消息要附带链路追踪ID,把一次完整请求涉及的模型调用、工具调用、Agent流转全部串起来。这些记录的排查价值在系统出问题时会呈指数级体现。评测体系方面,建立一个golden set,包含典型的用户问题、期望的模型行为、关键评估标准。每次修改Prompt或升级架构,都跑一遍这套数据集,对比通过率,防止"修好一个case、弄坏一片case"的情况。做Agent系统还会额外测一些对抗性用例:故意给模糊指令、给多指令混合、给超出边界的要求,看系统的兜底能力。我自己的习惯是每周跑一次完整回归评测,同时在每次线上反馈出来的bad case里挑选典型,补充进评测集。这样跑一两个月,系统质量就能维持在一个稳定的水位线上。6.3 成本与延迟的权衡:一个被严重低估的落地因素最后必须讲一下成本与延迟,因为大模型应用从Demo走向生产,真正劝退很多团队的往往是这两个问题。延迟方面,Multi-Agent系统因为涉及多轮模型调用串行执行,端到端延迟会比单次调用高出不少。如果是几秒钟的同步等待还能接受,要是超过十几秒用户基本就流失了。我的应对思路是尽量把串行改成并行——只要Agent之间没依赖关系就同时派发任务;需要长任务时改成异步处理,先给用户一个"处理中"的反馈,完成后通知,而不是让用户一直盯着加载转圈。成本方面,有两个策略我一直在用:一是用小模型过滤大模型,简单任务先用便宜的小模型处理,不行再升级到大模型;二是Prompt压缩,尽量减少不必要的历史记录和长指令。RAG链路里控制召回文档的块数和长度同样能有效压低成本。很多项目一个月的token账单高得离谱,不是模型选大了,就是Prompt设计冗长,挤一挤空间很大。7. 落地经验与避坑清单:来自一线的复盘做完这些项目之后,我对这套演进路线有几条切身的体会,拿出来分享给正在路上的人。第一,演进是打怪升级,不是重新装修。每次架构转型,都是因为当前阶段确实扛不住业务诉求了。不要因为看到新概念就觉得旧方案该丢,Prompt工程在Multi-Agent时代依然是最底层的地基。Agent的提示词写得烂,再多Agent也白搭。第二,先跑通再优化。很多团队死在过度设计的路上。第一版能用一个Agent加一个工作流解决,就不要上复杂的协作架构。先让业务跑起来,用真实数据暴露问题,再根据问题决定下一步往哪里演进。大模型应用迭代的速度远比传统软件快,你积累起真实调用数据和用户反馈后,架构升级会比闭门造车靠谱得多。第三,不要迷信"全自动"。大模型应用的很多环节需要人机协同,比如Agent执行到关键操作时要人工确认,审核Agent拿不准时要转人工,高价值决策一定要留人工兜底。自动化和人工介入的比例要设计清楚。我见过太多团队追求全自动化,把人工确认逻辑全部砍掉,结果出了事故后信心全无,又退回完全人工,之前的建设全部白费。好的落地方式是渐进式放权——先让AI出建议、人来决定,跑出信任后再逐步扩大自动化的边界。第四,架构要为未来的Agent演进留接口。即使你今天只做Prompt和RAG,也可以在数据层、调用层预留标准化的输入输出格式、消息协议和批处理接口。这样未来接Function Calling或Multi-Agent时,不需要推翻重来。我在不少项目里看到,头一版没有留接口,后面上多Agent时,所有工具和流程全部重写,浪费了大量返工成本。最后还有个实用小技巧:把所有的Agent角色、Prompt、工具定义都当成代码资产管理,走版本控制、走评审流程。大模型应用的改动频率极高,如果没有版本管理,一旦线上出了bad case,你根本不知道是哪个版本带的回归。这个习惯救过我很多次。从Prompt到Multi-Agent,技术形态在变,但解决问题的思路一以贯之:拆解任务、明确边界、控制状态、可观测可评测。把这四个原则刻在脑子里,你就能在快速变化的大模型技术栈里,稳稳地把应用立起来。