智能体为什么会出错?把计划、工具调用、记忆讲明白。
把智能体想成一位会先列步骤、再拿工具办事的实习同事:它不是只会聊天,也不是天然拥有所有权限。前端、后端、运维和 Web Coding 开发者今天就能从一条可回滚的接口联调检查开始,只开放脱敏契约、测试结果和本地报告;做到每一步有输入、结果和停点,就足够看清问题。生产写入、代码合并、发版和对外发送仍由人确认。
为什么“看起来都对”仍会出错?
智能体的错误常常不是一句话答错,而是流程里某一环悄悄偏了。它可能把“核对订单状态”计划成“修改状态”,把工具返回的字符串误当成成功,或者在下一步引用了上一轮残留的记忆。页面和代码都能运行,只说明入口通了,不说明任务边界、工具契约和上下文已经对齐。
下面的本地排查台故意保留一条可复现的失败:目标是检查接口状态,计划却包含写入动作;工具返回字段名与计划假设不一致;记忆里还留着旧版本的状态枚举。排查重点不是让模型“再想一遍”,而是找出哪一个事实没有被验证。
计划错在哪里?先检查目标、步骤和完成条件
计划是把自然语言目标变成可执行步骤的中间层。一个合格的计划至少写清四件事:输入是什么、允许调用哪些工具、每步产出什么、什么情况必须停下。
例如“核对接口状态”可以拆成:
- 读取脱敏的接口契约和最近一次测试结果。
- 比对状态枚举、字段类型和异常响应。
- 生成带来源的差异清单。
- 发现写入、隐私数据或结论矛盾时暂停。
如果计划里出现“直接修正生产字段”,那不是模型能力强,而是目标和权限没有分开。Anthropic 的工程文章把可控工作流与更自主的智能体区分开来,并强调先用简单、可组合的模式验证任务边界。[1]
工具调用错在哪里?把参数、返回值和副作用对上
工具是智能体触碰外部世界的接口。OpenAI Agents SDK 的工具指南把函数、托管、代理和本地运行工具作为连接外部能力的受控方式,并要求开发者定义输入与结果形状。[2] 工具名写对,不等于参数写对;返回“已接受”也不等于业务动作已经完成。
排查工具调用时,逐项核对:
- 参数:字段名、类型、枚举和默认值是否与契约一致。
- 权限:工具是否只读,失败时是否会重试或产生副作用。
- 结果:返回值是否带版本、来源和错误码,是否被下一步正确解析。
- 重试:网络超时后,重试会不会重复提交或放大影响。
本地运行记录把一次错误固定下来:第一次调用用了旧字段state=done,工具返回“枚举不存在”;第二次调用改为读取契约并标记“待人工确认”,没有写入任何数据。这里的英文只出现在代码字段中,正文紧邻给出中文含义,属于必要的代码例外。
记忆错在哪里?区分任务内事实和长期知识
“记忆”至少有两层:一次运行里为了避免重复读取而保存的任务事实,以及经过审阅、可更新、可撤回的长期知识。OpenAI Agents SDK 的会话文档把会话历史视为可持久化的上下文边界,开发者仍需决定保存什么、何时清理以及怎样隔离不同任务。[3]
接口联调排查只需要记住:本次输入版本、已执行的检查、每项结果和未确认差异。服务职责、状态枚举说明和回滚手册可以进入长期知识库,但必须带版本与来源。不要把密码、令牌、个人信息、未脱敏日志或内部地址塞进“方便以后使用”的记忆。
一条很实用的规则是:记忆里的事实必须能回到来源,记忆里的结论必须能被重新验证。当契约版本变更时,旧枚举应标为过期,而不是继续参与下一轮计划。
怎样把三类错误串成一次可复查运行?
可以把一次低风险任务固定成“计划检查 -> 工具试跑 -> 记忆核对 -> 结果交接”四步:
- 计划检查:先列允许动作和停止条件,拒绝把修复、发布混进只读目标。
- 工具试跑:用一份脱敏输入跑单次调用,保存参数、返回值和错误码。
- 记忆核对:给每条上下文标注版本、来源和有效期,清理过期事实。
- 结果交接:输出已核对事实、未知项、证据位置和下一位确认人。
这条链的价值是让“出错”变成可定位的记录:计划错了看任务卡,工具错了看参数和返回值,记忆错了看版本与来源。没有证据的推测要明确写成“未知”,不要为了让流程看起来完整而补猜结论。
Vibe Coding 生成了原型,为什么还需要可控执行?
Vibe Coding 更擅长把自然语言想法快速变成页面、接口骨架和交互原型;智能体要补的是另一段:把目标拆成步骤,连接受限工具,保留上下文,执行验证,再生成交接记录。原型能跑是起点,可控执行要求每一步都能解释、能停止、能回放。
因此可以先让 Vibe Coding 生成一个排查台,再让只读智能体读取本地契约和测试结果。它可以帮忙整理差异、标出旧字段、生成复现步骤,但“是否改接口”“是否合并代码”“是否进入生产”仍必须由人决定。OWASP 的提示注入风险说明输入可能改变模型行为;MCP 工具规范则明确建议始终保留能拒绝工具调用的人在回路,说明工具边界与输入隔离不能只靠一句提示词。[4][5]
人工确认点应该放在哪里?
只要动作会改变外部系统、影响用户或产生难以回滚的后果,就把确认放在动作之前。至少保留以下停点:
- 修改生产数据、配置、权限或基础设施。
- 合并代码、创建发布包、灰度或全量发布。
- 对外发送工单、邮件、公告或客户回复。
- 依据不完整、结果相互矛盾,或输入包含隐私与安全风险。
确认界面要让人看到“将要做什么、影响哪里、依据是什么、如何回滚”。智能体负责收集和解释证据,人负责承担质量、业务和上线责任。
今天就能做的只读实验
选一个不会写生产数据、可以随时回滚的任务,例如核对一条接口状态或整理一次构建失败。准备一张小任务卡:目标、输入、允许工具、完成条件、停止条件各写一行。然后只运行一次本地检查,保存计划、工具返回和记忆版本;最后逐条人工核对来源。
做到“错误能定位、证据能回看、动作有停点”就先停在这里,不必急着接入多智能体或发布接口。
趋势推断:可回放记录可能成为智能体的基础设施
这是趋势推断,不是已经发生的行业结论。依据是,Anthropic 的工程资料强调简单可组合的工作流,[1] OpenAI Agents SDK 文档持续把工具、会话和人工介入作为显式能力,[2][3],OWASP 对提示注入的风险说明与 MCP 工具规范对人审提示都把“可拒绝、可回看”放在工具调用附近。[4][5] 在任务可拆分、输入可脱敏、工具权限可限制、验证结果可保存且团队愿意复核的条件下,可以推断开发团队可能更重视可回放记录,而不只比较一次生成速度。
不确定性仍然很大:不同项目的契约质量、测试覆盖、上下文完整度、工具可靠性和人工审查成本差异明显。上述来源不能证明所有团队都会提效,更不能推出智能体会取代开发者或自动承担上线责任。
来源与事实边界
- [1] Anthropic Engineering:《Building effective agents》,2024-12-19。用于说明工作流与更自主智能体的差别,以及先从简单模式验证边界的工程观点。
- [2] OpenAI Agents SDK:《Tools》。用于核对智能体通过受控工具连接外部能力、工具需要明确输入输出的文档事实。
- [3] OpenAI Agents SDK:《Sessions》。用于核对会话历史与上下文持久化边界,不把会话历史等同于无限永久记忆。
- [4] OWASP GenAI Security Project:《LLM01:2025 Prompt Injection》。用于核对提示注入会影响模型行为、需要输入隔离和防护的风险说明。
- [5] Model Context Protocol 规范:《Tools》。用于核对工具调用应有清晰的用户界面、调用提示和能拒绝调用的人在回路。
文中的排查台、终端输出和任务数据均为本地可运行的脱敏演示,不是生产系统截图、故障实测结论或效率承诺。本篇为 AI 辅助创作。