Reflection:让 Agent 学会自我纠错
作者:程序员马丁
Ragent AI —— 从 0 到 1 纯手工打造企业级 Agentic RAG,拒绝 Demo 玩具!AI 时代,助你拿个offer。
上一篇用跨品类场景验证了 TinyAgent 的组合编排能力——单任务用 Skill 保稳定,复合任务用 Plan-and-Execute 保完整。结尾留了一个悬念:如果 Agent 在执行过程中翻车了——工具返回错误、LLM 理解偏差、步骤结果不符预期——怎么办?回顾一下第 15 篇的 Re-plan 机制——当步骤执行抛出异常时,让 Planner 重新规划剩余步骤。这个机制只覆盖了“抛异常”这一种情况,还没有让 Agent 自己反思哪里做错了、结果够不够好。
这一篇,咱们给 TinyAgent 装上 Reflection(反思)机制——让 Agent 不只会执行,还能自我评估、自我纠错。
本项目中具体代码已上传 GitHub TinyAgent,大家 Clone 项目后,将代码分支切换到 1.13.x,默认主分支是最新代码。运行前复制
.env.example为.env,把自己的 API Key 填进去,默认阿里云百炼平台;.env已加入.gitignore,切分支时不会丢。
Agent 翻车的三种姿势
在聊怎么修之前,先把问题分个类。比特严选智能体在执行过程中可能遇到的错误,大致分三种:
1. 工具返回错误
这是最直接的一类——工具调用本身就报错了。
举个例子:用户说“帮我催一下快递,单号 SF0000000”,Agent 调 queryLogistics("SF0000000"),物流接口返回 {"error":"运单号不存在:SF0000000"}。原因可能是用户复制了错误的快递单号,也可能是商家已生成运单但物流公司尚未揽收。
这类错误的特征是工具返回值里带明确的错误信息,Agent 只要读懂错误就能做出合理的下一步——告知用户运单不存在,建议确认快递单号。
2. 推理偏差
比直接报错更隐蔽的是推理偏差——工具调用成功了,结果也拿到了,但 LLM 在理解和总结时偏离了用户的真实意图。
举个例子:用户说“我家养了两只长毛猫,帮我在 R1 和 R7 Pro 两款扫地机里挑一个”,Agent 调 compareProducts 拿到了两款的完整规格参数,但在总结时做了全维度平铺对比(价格、吸力、续航……),没意识到对养猫用户来说,滚刷防不防缠绕才是决定性因素。工具没错,LLM 也确实做了对比,但结果偏离了用户的真实处境。这类偏差不报错、也不抛异常,是反思重点要盯的对象——不过它到底能不能被反思纠回来,还得看关键信息藏在哪,这点后面 Demo 会掰开讲。