1. 智能体工程到底在定义什么:边界与核心概念
智能体工程(Agent Engineering)这两年一跃成为技术圈的核心议题,但真正能把"它是什么、解决什么问题、边界在哪里"讲清楚的内容并不多。不少团队把"接一个大模型API + 写一段Prompt"就叫做Agent,结果一上线就发现稳定性差得没法交付,然后回头质疑"是不是大模型能力不行"。以我这两年在一线做智能体系统的经验看,问题多半不出在模型身上,而是缺少一套系统化的工程方法论——而这套方法论,正是智能体工程要补上的核心拼图。
先给一个我自己在项目里反复打磨过的定义:智能体工程是以大语言模型为核心推理引擎,通过任务拆解、工具编排、状态管理和结果校验等系统化手段,构建能够自主完成多步骤复杂任务的软件系统的工程实践。
这个定义有三个关键词值得展开。第一是"核心推理引擎"。智能体的大脑是LLM,它负责理解用户意图、生成执行规划、判断中间状态、决定下一步动作。第二是"系统化手段",意味着这不是靠零散的提示技巧堆出来的作品,而是有架构模式、有工程规范、有可复现流程的体系。第三是"多步骤复杂任务",这是智能体与普通对话型AI应用最本质的分水岭。帮用户写一封简短邮件,一次模型调用就能完成,不需要智能体;但"把销售数据从业务系统里拉出来、做清洗、完成多维分析、生成图表、按固定格式输出周报",这种需要模型自主决策路径、连续调用多个外部工具的任务,才是智能体真正发挥价值的场景。
再把边界梳理清楚,免得概念被滥用。智能体工程不是Prompt Engineering的"升级版",Prompt只是整个智能体系统里占比很小的一环,它管不到任务编排、管不到状态管理、管不到结果校验。智能体工程也不是RAG应用开发,RAG解决的是"如何把外部知识库的内容检索出来喂给模型"的问题,而智能体解决的是"如何让模型自主完成一件复杂的事"的问题。两者可以结合使用——智能体在推理过程中可能需要检索知识库——但它们的核心问题域并不一样。智能体工程本质上是把大模型能力与软件工程能力深度融合的一套系统设计方法,核心关注点包括:怎样把模糊的大目标拆解成可执行的子任务?怎样设计工具让模型安全高效地操作外部系统?怎样管理短期上下文和长期记忆?怎样验证模型每一步的产出是否可信?这些问题在传统软件工程里都能找到对应物,但一旦加上"LLM这个概率性组件",每一件都需要重新设计。
1.1 为什么智能体工程会被单独提出来
这两年围绕大模型的应用开发出现过好几拨概念热潮,从提示工程到RAG再到Agent,每一波都在解决上一波没解决的问题。提示工程解决的是"怎么让模型在单次对话里输出更符合预期",它面对的是单一交互场景;RAG解决的是"怎么让模型借助外部知识回答专业问题",它面对的是知识密集型场景;到了Agent这一步,场景从"回答"变成了"执行",模型不再只是给一个答案,而是要去操作工具、推进任务、处理异常、交付结果。这种从"问与答"到"目标导向型任务执行"的转变,是智能体工程被单独提出来讨论的根本原因。
另一个原因是生产环境对可靠性的要求。Demo阶段,模型跑偏了大不了重来一次;生产环境则不行,任务做到一半卡住、工具调错、结论编造,每一个问题都对应真实的信任损失。传统软件工程习惯于确定性逻辑,所有分支都是可枚举的,而LLM引入的是概率性行为,同一个Prompt每次输出都有差异。这种概率性不能靠"调优"消灭,只能靠架构设计去约束。智能体工程把这些约束方法沉淀成一套可复用的方法论,才让大模型应用从"能跑"走向"能交付"。
1.2 智能体工程与相关技术的边界
为了不让概念无限膨胀,值得花点篇幅把智能体工程和相关技术栈的边界说清楚。下面是基于我实践经验的整理:
| 技术方向 | 核心问题 | 典型应用 |
|---|---|---|
| Prompt Engineering | 如何让单次模型输出更符合预期 | 文本改写、分类、抽取 |
| RAG | 如何让模型利用外部知识回答问题 | 企业知识库问答、客服 |
| Fine-tuning | 如何让模型适配特定领域的表达习惯 | 法律文书生成、代码补全 |
| Agent Engineering | 如何让模型自主完成多步骤复杂任务 | 自动报表、流程自动化、数据分析 |
注意,这些技术不是互斥的,实践中经常叠加使用。一个智能体系统内部可能同时用到了RAG(让模型在分析时检索历史报告模板)、Prompt技巧(结构化输出约束),甚至微调(让模型更适配领域术语)。但智能体工程的方法论重心始终放在"任务的自主执行"上,这也是它与其它技术方向最根本的区别。边界清楚了,做设计时才不会东一榔头西一棒子。
2. 智能体工程方法论的四大设计支柱
谈方法论之前,必须先建立一个底层认知:**在智能体工程里,LLM是概率性组件,不是确定性组件。**传统软件里,同一个输入对应同一个输出,错误可以通过穷举分支来处理;LLM则完全不同,同一个Prompt、同一套参数,每次返回几乎都会有细微差异,极端情况下甚至出现完全跑偏的中间结果。因此,智能体工程的核心目标不是消除概率性——那在物理上不可能,而是通过架构设计把不确定性约束在可控边界内,让系统整体呈现"确定性服务"的表象。
我把自己在多个项目里反复验证过的设计思路归纳为四大支柱:规划、工具、记忆、验证。无论一个智能体系统表面架构多复杂,落地时最终都会落到这四个支柱上。逐个拆开讲。
2.1 规划支柱:任务拆解与路径决策怎么做
规划层的职责,是把用户的一个大目标转换成模型可执行的步骤序列。规划做得好不好,直接决定了智能体在复杂任务上的上限。
业界常见的规划模式有三种,我都在项目里实测过,各自有明确的适用场景。
- 单一规划:模型在执行前一次性输出完整的步骤清单,后续基本照单执行。优点是简洁、开销低、路径可预测;缺点是遇到计划外情况时反应能力差,容易僵住。适合流程相对固定的场景,比如"生成固定格式的业务周报"。
- 逐步规划:每次只决定下一步做什么,执行完一步后带着最新状态重新决策。优点是对不确定环境的适应能力极强,缺点是token开销大,执行链条长,且模型可能在岔路上越走越远。适合探索性强、路径高度不确定的场景,比如"帮我调研这个技术方向的优劣势并给出落地建议"。
- 层次规划:先做粗粒度任务拆解,得到多个大子目标,再对每个子目标做细粒度步骤规划。这种模式把全局视野与局部灵活度结合起来,适合特别长、层级深的复杂任务,比如"从零搭建一套完整的营销活动方案并拆解执行计划"。
选择哪种模式,判断依据是任务的"可预期程度"。我的建议是从单一规划起步,同时给系统加一层"动态重规划"能力——当模型发现当前路径走不通时,允许它回到规划层重新生成后续步骤,而不是死磕原计划。这个组合能覆盖绝大多数生产场景。
规划层还有一个容易忽略的关键点:必须给模型设定"规划边界"。哪些步骤属于任务内、哪些超出范围需要停下来请用户确认,这些要在初始Prompt里写死。否则模型容易过度执行,把用户没要求的操作也一并做了,这在生产环境里是高风险行为。
2.2 工具支柱:让模型安全高效地操作外部世界
规划得再漂亮,最终落地依然要靠工具调用。工具层是智能体的手和脚,没有工具,模型就只是个比较聪明的聊天机器人。
工具设计方面的坑,我这几年前前后后踩了不少,梳理下来有三个关键点。
第一是工具粒度。给模型暴露的工具太粗,比如只有一个"处理数据"工具,模型不知道该传什么参数;太细则模型每完成一个微小操作就要调一次工具,时间和错误率同步上升。我的经验是把工具设计到"一个完整且可独立验证的业务动作"这个粒度。做数据报告智能体的时候,我没有设计"读文件""解析列"这种底层工具,而是设计了"拉取销售数据""检测异常波动"这种直接对应业务语义的工具,模型调用准确率立刻上了一个台阶。生活里做类比就是:你不是给实习生一台显微镜和一堆零件让他自己组装设备,而是直接把已经校准好的测量仪器递给他,他要做的是"测"而不是"装"。
第二是工具描述质量。工具描述直接决定模型能否在正确时机选中正确工具,它比工具本身的实现还要重要。描述里必须包含四要素:工具做什么、什么场景下使用、关键参数的含义、返回结果的结构。我还有一个长期坚持的习惯:在每个工具描述的末尾附上一到两个"正确调用示例"。别小看这几行字,实测能把工具选择准确率提升10个百分点以上,因为模型对具体范例的跟随能力远强于对抽象文字的理解能力。
第三是工具失败语义。很多人在设计工具时只想到"成功路径",忽略了失败场景。工具可能超时、可能返回空结果、可能抛出异常,这些都要在设计阶段想清楚,并且把失败返回格式明确写进Prompt。我见过太多智能体,工具一失败模型就开始"编",硬说某个操作已经成功然后继续往下推,最终产出一份误导性报告。所以我内部有一条硬性原则:每个工具都必须返回明确的结构化错误信息,Prompt里写明"收到错误返回时必须说明错误原因并尝试重试或更换策略,禁止假装成功"。
2.3 记忆支柱:短期上下文与长期知识的协同管理
记忆支柱要解决的是"模型怎么记住做过的事、知道什么背景"。大量智能体的疑难杂症,追根溯源都出在记忆管理上。
短期记忆本质上就是上下文窗口。早期智能体最典型的问题是:执行长任务时上下文越积越长,模型开始"忘事",或者被无关的中间信息干扰。我把短期记忆管理拆成三个动作:裁剪、摘要、结构化存储。裁剪是把已完成步骤的原始对话压成一行摘要;摘要是对长对话分段生成过程性记录;结构化存储是把关键状态信息(任务目标、已完成步骤、待决策项)单独抽出来,在每次模型调用时以固定格式注入。三个动作配合,基本能把失控的上下文救回来。
长期记忆则更像传统应用里的数据库,但它存储的内容面向模型,必须"以模型容易检索和使用的方式"组织。常见的长期记忆包括:用户偏好档案、历史任务经验、领域知识库(这个可以和RAG结合)、执行偏好备注。长期记忆的价值不只是"记住",更在于"复用"——比如某位用户做报告时指定过格式偏好,下次再做同类任务,模型能够自动带上,这种连续体验的提升是单次对话无法做到的。
记忆层还有一个高频踩坑点:记忆更新策略。什么时候往长期记忆里写入内容?写入前需不需要用户确认?这些不设计好,模型可能把一次偶然偏好当成长期规则,或者把错误信息固化下来。我的建议是:对高风险记忆写入(比如"用户希望以后所有对外报告都用表格形式")必须经过用户确认;对低风险的执行结果记录(比如"这个任务上周已完成过")可以直接写入。简单说,越容易影响未来行为的记忆,写入门槛越高。
2.4 验证支柱:让概率性输出变得可度量、可追责
验证支柱是被讨论最少、但实际作用最大的一个。LLM的输出不可完全信任,所以智能体在每个关键节点上都必须有验证或校验机制,这是"概率性模型"走向"确定性交付"的唯一路径。
我把验证拆成三层来落地。
第一层是格式验证。模型的输出是不是合法的JSON?工具调用参数是否符合接口schema?这类验证成本最低,直接用程序化校验就能完成,甚至可以通过结构化输出或约束解码从源头避免大部分格式问题。
第二层是语义验证。模型的产出在语义上是否合理?这一步通常需要让模型对结果做一次自我审视,或者用一个专门的验证模型来把关。在数据报告智能体里,我让一个"审核模型"检查报告中的关键结论是否有数据支撑,这个简单的动作就能拦截大量"编造式分析"。
第三层是业务验证。结果是否符合业务规则?比如"发给客户的报告里不能出现内部缩写"这类规则,靠模型自觉不靠谱,最好用程序化规则做最后一道闸门。
三层验证叠加,系统才能达到生产环境要求的可靠性。但这里有一个设计原则:验证粒度要与风险等级匹配。对外发送的正式报告,每一步都必须严格验证;内部处理的中间结果,验证可以适度放松。如果所有步骤都做最高等级验证,延迟和成本会高到无法接受。
3. 架构选型:从单Agent到多Agent的演进逻辑
四大支柱讲的是单个智能体系统的设计维度。实际项目里,常被问到的一个问题是"要不要上多Agent架构"。我的答案很直接:不是越复杂越好,而是要看任务是否真的需要角色分工。
3.1 单Agent的可靠性设计要点
优先推荐大多数项目从单Agent架构开始。单Agent并不是"一个模型跑到底"那么简单,它的可靠性设计有自己的一套重点。
第一,引入状态机来建模执行过程。把智能体的生命周期定义成有限状态集合:初始态(接收任务)、规划态(生成执行计划)、工具调用态(请求外部资源)、验证态(检查执行结果)、完成态(输出最终结果)、异常态(处理错误)。知道当前处于哪个状态,是排查问题的前提。没有状态机的话,你很难说清楚"任务做到一半卡住"到底卡在哪一环。
第二,模块化组织Prompt。我把智能体的系统Prompt拆成六个独立模块:角色与任务说明、目标定义、已知约束、可用工具列表、执行规则、输出格式要求。每个模块独立维护,避免一段超长混杂的Prompt让模型失焦。比如"可用工具列表"更新时,完全不用动其他模块;"执行规则"里新增一条禁止行为,也不会影响角色设定。这样既有利于迭代,也能控制模型注意力。
第三,明确"自主性的边界"。不要指望模型什么事都自己决定。我的习惯是划一条线:成本高、不可逆、对外有影响的操作(比如发送邮件、发起支付、对外发布),执行前必须请求用户确认;低风险、可逆的内部操作(比如读取数据、生成草稿、内部计算),模型可以自主执行。这条边界一旦缺失,智能体就变成了一个"失控的实习生",什么动作都敢做,后果很可怕。
3.2 多Agent协作的价值与成本
多Agent这两年确实很火,各种"Agent团队""多角色协作"的演示视频层出不穷。但作为工程实践者,我必须说句实话:多Agent带来的好处常被夸大,复杂度却被严重低估。
多Agent架构的核心价值不是"让系统看起来更智能",而是角色隔离。比如用不同Agent分别承担规划、工具调用、结果审核的职责。最典型的场景是"验证Agent":让一个独立的模型实例审核主模型的输出,而不是让模型自审。因为自审天然有盲区,自己刚编出来的内容很难被自己识别为"编的",独立审核才有实际拦截效果。另一个价值是"能力异构":可以用一个轻量快速的小模型做路由分发,用大模型做深度推理,用领域微调模型做专业审核,各取所长。
但多Agent的引入也会带来系统性问题:每个Agent都是概率性组件,Agent之间的通信协议如果不稳定,错误会被层层放大;多个Agent之间需要共享全局状态,这个状态同步的复杂度在工程实现上很棘手;调试的时候,你很难快速判断错误到底出在哪个Agent的哪个环节。我的建议是:先用单Agent把垂直场景跑通,如果确实遇到单Agent无法解决的具体问题——最常见的是上下文污染无法通过摘要解决、或者自审盲区严重——再考虑引入第二个专职Agent。多Agent是"不得已的手段",不是"更高级的架构"。
4. 实操全过程:从零落地一个数据报告生成智能体
理论讲再多,最终都要落地。下面用一个具体场景——"销售数据报告生成智能体"——完整展示从需求分析到系统落地的全流程。为避免泄露具体信息,我对项目做了脱敏处理,但核心思路和工程设计完全保留。这个例子很有代表性:它涉及数据获取、分析推理、工具调用、格式输出和结果校验,基本把所有关键环节都覆盖了。
4.1 需求分析:先把任务边界划清楚
项目背景:某业务团队每周需要一份销售数据周报,包含销售额整体趋势、重点品类表现、异常波动提示和归因分析四个部分。过去由数据分析师手动完成,从取数到成稿每次要花半天。我们的目标是做一个智能体,让业务人员输入一句"帮我做上周的销售周报",系统自动完成取数、分析、生成报告。
拿到需求后的第一个动作不是写Prompt,而是和业务方一起把任务边界彻底对齐。这是整个项目里最重要的一步。我们明确了几个关键决策:
- 数据源:固定在内部数据平台的销售明细表,连接方式提前配好,不需要模型自己去探索数据来自哪里。
- 报告格式:固定四段式模板,不允许模型自由发挥调整结构。
- 分析深度:只有波动超过预设阈值的数据点才需要做归因,归因必须能从明细数据中找到证据,禁止凭空猜测。
- 操作权限:智能体只有读取数据和生成报告的权限,没有修改数据、没有对外发邮件、没有其他高风险操作。
这四条边界一划,后面所有设计都有了判断依据。比如权限这条,让智能体在最开始就明确自己"只能读、不能改、不能发",做工具设计和Prompt时就不需要为高风险操作写复杂分支,整个系统简洁了一大截。
4.2 工具设计:四个业务动作搞定取数与分析
基于任务边界,我把工具层设计成四个业务动作,不多不少。
| 工具名称 | 功能 | 关键参数 | 返回结果 |
|---|---|---|---|
| fetch_sales_data | 按日期范围拉取销售明细 | start_date、end_date、category(可选) | 日期、品类、销售额、销量、同比、环比的结构化数据 |
| detect_anomaly | 检测销售额异常波动 | date_range、threshold(波动阈值) | 异常点列表及波动幅值 |
| query_dimension_data | 按维度做下钻分析 | dimension、filters | 分维度汇总数据 |
| generate_chart | 生成趋势图和对比图 | chart_type、data_range、title | 图表文件路径 |
注意,我没有设计"读取文件""解析CSV""转换日期格式"这类底层工具。原因就是前面讲过的工具粒度原则:模型更适合理解"拉取销售数据"这个业务动作,而不是"打开文件、分隔字段、转换类型"这一串技术动作。工具越贴近业务语义,模型做工具选择时就越不容易出错。
每个工具的描述,我都坚持写清楚四要素:作用、使用场景、参数含义、返回结构。然后在描述末尾加一个正确调用示例。比如fetch_sales_data的示例是"用户需要上周数据时,调用fetch_sales_data(start_date='2024-06-03', end_date='2024-06-09')"——就这么一句话,实测效果比大段说明要好得多。
4.3 规划与Prompt:模块化组织,明确边界
系统Prompt按照前面说的模块化思路来组织。下面是核心内容的脱敏版:
角色与任务说明:你是销售数据分析助手,负责根据用户请求生成规范周报。
目标定义:当用户说"帮我做上周周报"时,按以下流程执行:先拉取数据、接着检测异常、再进行维度分析、然后生成图表、最后输出完整报告。
已知约束:只能使用已提供的分析工具;禁止编造或使用训练数据中的任何数字;异常归因必须能在明细数据中找到证据;所有结论必须标注数据来源。
可用工具列表:列出上述四个工具及参数schema,附正确调用示例。
执行规则:遇到数据缺失时,先尝试缩小日期范围或更换分析维度;工具调用失败最多重试两次;两次仍失败必须向用户明确说明失败原因,禁止假装成功;每个分析结论必须引用对应的数据来源。
输出格式要求:报告必须包含趋势总结、Top3品类分析、异常波动分析、数据支持的结论建议四个区块,并嵌入生成的图表。
这段Prompt看起来不长,但已经把最关键的边界都划清了。实测中,"结论必须有数据支撑"这条规则直接抑制了模型最常见的"编数据"毛病;"失败必须说明原因"这条规则让系统在异常情况下的行为变得可预期。Prompt不是越长越好,关键是每条规则都要对应一个真实风险。
4.4 结果校验:用双通道把关报告质量
为了确保最终报告质量,我在系统里加了一个"验证Agent",用另一个独立的模型实例对主模型生成的报告做复核。说到底就是验证支柱里的语义验证层落地。验证Agent重点检查三件事:
- 报告里出现的每一个数字,是否能在工具返回的数据里找到对应来源。
- 异常分析的结果,是否与detect_anomaly工具返回的结果一致。
- 每个分析结论,是否有明确的数据引用支撑。
为什么用独立模型验证而不是让主模型自查?因为自审的盲区是结构性的:刚生成完内容的模型会自然倾向于认为"自己写的没问题",换个上下文、换个角色的模型来看同一份报告,反而更容易发现问题。实测加了这个验证Agent之后,报告里出现"无依据结论"的比例大概下降了七成。这个成本是值得花的。
为了保证验证本身不拖慢系统太多,我把验证Agent的输入做了裁剪:不注入完整历史对话,只把工具返回的结构化数据和最终报告文本放进去。这样既隔离了无关上下文,又降低了推理成本。
4.5 上线效果与迭代方向
系统上线后,把周报生成时长从人工3小时降到了系统3分钟。业务人员的实际使用体验是:输入一句需求,偶尔改一下日期范围,报告质量基本可用。
不过上线后也持续暴露了一些之前没预见到的问题,这里挑两个有代表性的说一下。
一类问题是某类特殊品类数据量极少,模型容易把噪音波动当成趋势来分析。后来我在工具层加了一个"最小数据量提示":当某个维度的样本量低于阈值时,工具主动在返回结果里标注"样本过少,统计结论可能不显著",让模型知道该谨慎下结论。
另一类问题是周五导出数据有延迟,周二做周报时最后一天的数据可能不完整,模型却照常分析。后来我在流程里加了"数据完整性检查"步骤,在开始分析前先确认最近一天的数据是否到位,没有到位就先明确告知用户数据延迟,避免基于残缺数据得出误导性结论。
这类问题,每解决一个,系统就离"完全可交付"更近一步。这也正是智能体工程和写Demo最大的不同:Demo只要把主路径跑通就算成功,生产系统要把无数条"边界路径"都走稳才算数。
5. 高频问题排查实录:让系统从能用走向可靠
最后这部分,我把实践里反复遇到的高频问题整理成一份"排障速查",每个问题都给出症状、排查顺序和解决方案。这些经验不是从文档里抄来的,全部来自真实上线项目的复盘,希望对正在做或准备做智能体系统的朋友有直接帮助。
5.1 智能体"绕圈子"不收敛怎么办
症状:模型反复调用同一类工具,结果没啥变化但就是不结束;或者在一个分支路径上反复横跳,主线任务毫无进展。这在长任务里非常常见,本质上是模型"不知道什么时候该停"。
排查顺序我固定为三步。第一步看规划层:Prompt里有没有明确的"完成判据"?如果没有告诉模型"满足什么条件算任务完成",模型就没有结束任务的信息基础。解决办法是定义完成判据,比如"当报告包含四个必需区块且所有结论都有数据引用时,可以输出最终结果"。第二步看工具层:工具返回的结果是否具有误导性?有时候工具一直返回空数据,模型不知道该换策略还是该继续,只能在原地打转。第三步看上下文:历史记录里是否累积了大量中间状态和无关信息,让模型找不到主线了。这时候需要清理上下文,把已完成部分压缩成摘要。
5.2 工具调用频繁报错的根治方法
症状:模型返回的工具调用参数频繁出现格式错误,比如JSON里多了逗号、字段名拼错、参数类型和schema不匹配。
这类问题的根源通常不是模型太笨,而是你的调用链路太"自由"。我建议从源头把格式问题消灭掉,而不是靠事后修复。最有效的手段是使用模型的"强制工具调用"模式,让输出直接走结构化通道,从机制上绕开自由文本的格式漂移。如果使用的框架不支持这种模式,那就老老实实在系统Prompt里放两三个正确调用示例,用few-shot的方式把输出格式"框住"。实测里面,几个正确的示例比十行文字描述管用得多。
还有一个常被忽略的原因:你的工具schema是不是写得太过复杂?层级嵌套太深、可选参数太多,模型很容易被绕晕。保持参数扁平化、可选参数尽量少、参数名尽量符合自然语义,都能显著降低格式错误率。
5.3 上下文污染与模型"失忆"的处理
症状:任务执行到后期,模型开始忘掉用户最初的核心需求,或者被中间步骤产生的噪音信息带偏思路,输出的结果和用户原始目标渐行渐远。
这个问题的根源几乎都在记忆管理。先说短期记忆侧:把"摘要替换原始记录"这一步做实。每当一个子任务完成,就把它的原始输入输出压缩成一句话摘要,替换掉上下文里的长文本,避免无关细节残留堆积。我一般在代码里用一个固定的"上下文管理模块"来做这件事,而不是让模型自己决定怎么处理。再说关键信息侧:把"用户核心目标"这个固定字段在每个关键节点重新注入Prompt,相当于在模型的注意力里放置一个"锚点",反复提醒它别忘了主线任务。这两个动作配合下来,长任务后期的"失忆"问题基本能消除。
5.4 模型"编数据"怎么办
症状:模型在工具返回的数据不够用或者没有数据时,会自行"脑补"一些数字或结论,做分析类任务时尤其致命。这是智能体所有问题里最危险的一种,因为用户很难分辨哪里是真实分析、哪里是模型编造。
我的处理经验是三层防御,缺一不可。第一层,Prompt层面:明确写入"所有数字必须来自工具返回,禁止使用训练数据中的任何数值"。这句话必须写得直白,因为模型对"禁止"类指令的敏感度远比很多人想象中高。第二层,工具层面:工具的返回结果必须带上"数据时间戳"和"数据来源标识",让模型有据可依,也方便后续验证。第三层,验证层面:用程序化校验把报告中的关键数字和工具返回的数字逐一比对,对不上就直接拦截。三层都部署到位,编数据的问题基本可以杜绝。我见过一些项目只做了第一层,然后抱怨"模型还是会编",原因就是没有把后两层验证补上。
5.5 最后的排查建议
做智能体工程这么久,最深的体会是:**大多数系统性问题都不是"模型不够聪明"造成的,而是"工程边界没划清楚"造成的。**模型的能力边界其实比大多数人想象的要宽,关键是你敢不敢放手让它做、有没有给它清晰的约束、有没有在它犯错的时候及时拦住它。
如果你现在正被某个智能体的"诡异行为"困扰,我建议你先不要急着换更强的模型或者调更复杂的参数,而是退一步,用四大支柱做一次系统体检:规划层有没有明确完成判据?工具层有没有清晰的失败语义?记忆层有没有做摘要和锚点注入?验证层有没有至少一道程序化校验?把这四个问题逐一回答清楚,大多数问题都能找到答案。智能体工程的真谛,不是让模型变成万能的上帝,而是通过系统和流程的设计,让模型在概率性的底色之上,长出确定性的骨架。