
能跑通对话和工具调用的Agent原型,几行代码就能搭出来。但把它扔进真实业务,执行失控、逻辑跑偏、幻觉频发、无法追溯的问题会集中爆发。绝大多数项目死在这一步,停在Demo阶段出不来。
差别不在模型参数。在于有没有用对设计模式。Agent开发和传统软件工程一样,存在大量重复出现的共性问题,成熟模式就是被反复验证过的解法。下面按能力层次拆开讲,顺序和常见教程不同,从执行模型往上叠到工程化形态。
推理与行动交替:ReAct是执行底层
ReAct把”想”和”做”编成循环。Agent接到任务不直接吐答案,先推理:目标是什么、已有信息够不够、下一步调哪个工具、为什么调。推理完执行动作,拿到工具返回结果再进入下一轮判断,直到收敛。
这个循环解决的是LLM黑盒输出的老问题。每一步动作都挂着推理依据,出错时能定位到具体哪一轮判断偏了。动作建立在工具返回的真实数据上,幻觉空间被大幅压缩。工具报错时还能动态改策略,而不是一条道走到黑。
工程上有三个参数必须卡死。推理粒度太粗会逻辑跳跃,太细会陷入无效循环空转。输出格式要用提示词锁死结构,思考、行动、观察、结论四段分开,否则解析器拿不到可执行的动作。最大循环轮次必须设上限,这是防止任务卡死的最后一道闸。
思维链:复杂推理的拆解工具
CoT和ReAct定位不同。ReAct是推理加行动的全流程模型,CoT只解决推理环节本身——把复杂问题拆成可追溯的中间步骤,像做数学题写演算过程,而不是直接报答案。
提示词里加一句”逐步说明推理过程”是最简形态,效果有限。真正管用的是Few-shot:给两三个贴合业务的标准推理示例,让模型模仿步骤结构。示例本身必须逻辑严谨,模型会照抄示例里的推理模式,示例错了输出必错。
合同审核这类场景,要显式规定推理维度:合规性、完整性、风险点、权责划分逐项过。维度不规定,模型就自由发挥,漏项是常态。
任务拆解:把不可控变成可控
复杂任务失控,根子往往在没拆。直接丢一个模糊的大目标给Agent,逻辑混乱和目标遗漏几乎是必然。
拆解借鉴WBS思路:大目标切成单一职责、可独立验证、无循环依赖的子任务,每个子任务明确输入输出、验收标准、前置依赖。拆完逐个击破,成功率立刻不一样。
原则是MECE——子任务之间不重叠,合起来完全覆盖目标。粒度控制在”单一职责且能独立验收”,太粗依然不可控,太细任务数爆炸、调度开销吃掉收益。依赖关系必须提前梳理,循环依赖会让整个任务图死锁。
并行执行:效率与限流的博弈
拆解后出现大量无依赖子任务时,串行执行是浪费。识别出互不影响的子任务,分给多个执行单元同时跑,主Agent统一汇总结果。
收益很直接:数小时的批量处理压到几分钟。单个子任务失败不拖垮整体,解耦执行天然带隔离性。
真正的坑在限流。并发数拉高后,LLM API返回429 Too Many Requests是高频故障。根因是请求速率超过账户的RPM或TPM配额,不是代码逻辑错误。处置分两层:客户端做指数退避重试,首次退避1秒、每次翻倍、加随机抖动避免重试风暴;服务端侧用令牌桶控制发出速率,把并发数压到配额以内。只加重试不做速率控制,退避窗口会越拉越长,吞吐反而崩掉。并发上限要按API配额和工具承载能力取最小值,不能拍脑袋定。
函数调用:接口演进与权限红线
Function Calling让Agent突破文本边界,能查库、调API、发消息、执行代码。机制是预先定义函数规范——名称、描述、入参出参、异常规则,模型自主判断调不调、调哪个、传什么参数,执行器完成调用后把结果回灌给模型。
接口层面有个版本差异必须注意。OpenAI早期用functions参数传函数定义,后来迁移到tools参数,函数定义包在{“type”:”function”,”function”:{…}}结构里。老代码照旧文档写functions字段,新接口会直接报参数校验错误。另一个开关是parallel_tool_calls,默认开启时模型可能在一轮里返回多个工具调用,执行器必须能处理数组形式的tool_calls,按id逐个回填结果;如果业务要求严格串行,显式设为false。
权限是红线。最小权限原则,只开完成任务必需的函数,数据库删除、系统命令全量执行这类高危能力绝不能默认开放。入参执行前必须校验合法性,异常要捕获并回传清晰错误信息,让模型有机会改参数重试。每次调用记录时间、入参、结果、异常,审计链路不能断。
智能体交接:专业分工的边界
跨领域任务靠单个Agent全场景精通不现实。Handoff的架构是主Agent做调度,多个专用子Agent各守一个领域,各自带专属提示词、工具、知识库。
主Agent拆完任务,把子任务交给匹配的子Agent,结果回收后统一校验输出。新增业务场景只需挂一个新子Agent,主Agent和存量逻辑不动,扩展性是插拔式的。
交接协议必须标准化:任务格式、上下文传递规则、结果验收标准写清楚,否则主Agent和子Agent之间信息丢失、理解错位。职责边界要硬,重叠会导致任务错配。拆分克制一点,子Agent过碎会让系统复杂度和维护成本指数上升,协同效率反降。
自我批判:单次输出的质量闸门
输出质量差,常见原因是模型只生成一次、不做校验。Self-Critique让Agent生成初稿后切换角色,站到审核者立场按预设标准找茬,再基于批判结果迭代优化。
关键是批判标准要可量化。只说”批判你的输出”没有意义,要列维度:合规性、权责清晰度、风险点、格式规范、条款完整性。角色切换要强制,从”撰写者”切到”资深法务审核专家”,立场不换,批判必然流于形式。
迭代轮次设上限,满足验收标准立即终止。为微小优化烧掉大量Token和时间不划算。
自我反思:跨任务的长期迭代
Self-Critique管单次任务内的质量,Self-Reflection管长期成长。每次任务结束后复盘:成功因素、失败根因、踩过的坑、可优化的策略、边界规则,结构化沉淀进长期记忆。下次同类任务自动召回,避免重复踩坑。
反思模板要固定,比如”目标、结果、成功经验、失败原因、优化方案、边界规则”六段式,否则反思内容空泛无实现价值。沉淀的经验必须做有效性校验,错误经验被复用会造成系统性偏差,定期清理过期条目。
边界要划清:反思只优化执行策略和流程规则,核心业务规则的修改必须走人工审核,不能让Agent自主改规则。
情景记忆:解决失忆与合规删除
多轮对话忘约定、跨任务记不住偏好、长周期任务丢关键信息,都是上下文失忆。情景记忆把每次交互、每个任务作为独立片段结构化存储:时间、目标、用户需求、执行过程、关键信息、决策依据、反馈、结果。新任务执行时通过向量检索加关键词检索加时间权重召回相关片段,注入当前上下文。
分层管理是前提。短期记忆存当前会话,长期记忆存结构化情景,避免无关记忆挤占上下文窗口。检索要精准,召回一堆无关历史反而干扰模型理解。
合规层面有个容易被忽略的硬约束。记忆库存储大量用户信息,在GDPR和个人信息保护法框架下,用户行使删除权时,不仅要删结构化记录,向量库里的嵌入向量也必须同步删除或失效。只删元数据不删向量,语义检索仍可能召回已删除内容,构成合规风险。校验方法是删除后执行一次相同语义的检索查询,确认目标片段不再出现在召回结果中,才算删除生效。加密存储、权限管控、脱敏处理是基础,删除链路的完整性同样要测。
LLM工作流:工程化的最终形态
前面九种模式解决局部问题,LLM Workflow把它们收进一个可视化、可管控、可审计的执行链路。复杂逻辑拆成标准节点:触发、推理、工具调用、任务拆解、条件判断、循环、人工审核、异常处理,节点间按流转规则连接,支持实时监控、异常熔断、流程回溯、人工介入。
这一步把黑盒执行变成白盒。每步有节点定义,出问题能快速定位止损。线下业务流程可以直接映射成工作流节点,而不是另起一套脱离业务的Demo。高风险操作挂人工审核节点,强监管行业的合规要求才过得去。流程变更只调节点和流转规则,不用大改代码和提示词。
设计必须贴真实业务,异常场景、审批环节、兜底方案都要考虑进去,理想化流程落不了地。每个节点配异常处理、重试、降级、熔断,单点失败不能拖垮整条流。节点粒度别太碎,简单流程拆成一堆细节点,维护成本和执行开销都会失控。
模式组合与实现取舍
没有单一模式能包打天下。生产级Agent都是按场景组合出来的。合同全流程管理:任务拆解切分子任务,Handoff分派给业务、法务、财务子Agent,Function Calling对接合同系统和OA,Self-Critique做多轮校验,LLM Workflow管全流程审批,情景记忆存客户偏好和历史规则。研发辅助Agent:CoT做逻辑设计,ReAct跑编码调试全流程,并行执行加速多模块开发和单测,Function Calling接代码库和CI/CD,自我反思沉淀编码规范,情景记忆记住项目架构和历史问题。
实现有几条硬规矩。场景优先,先明确目标、痛点、边界再选模式,为用模式而用模式必然过度设计。从ReAct、Function Calling、任务拆解这些基础件起步,跑通业务验证价值,再逐层叠加。两个模式能解决的别上五个,复杂度飙升会直接吃掉稳定性。可控性永远排第一,黑盒自治的Agent在企业里没有生存空间。模块之间做好解耦,记忆、推理、执行、调度分开,替换和维护才不会牵一发动全身。
竞争焦点早就不是能不能做出Demo,而是能不能在生产环境稳定创造价值。模式是踩坑踩出来的方法论,用对了,玩具系统才有机会变成生产工具。
ID:7464