Agent的反思机制
一、什么是 Agent 的反思机制(Reflection)?
Agent 反思机制指的是:
Agent 在完成某一步任务后,不直接结束,而是让模型重新检查自己的行为、结果和错误,然后根据评价结果进行修正。
简单理解:
普通 Agent:
任务
↓
思考
↓
执行
↓
结果
↓
结束
带反思机制的 Agent:
任务
↓
思考
↓
执行
↓
检查结果
↓
发现问题
↓
修改策略
↓
重新执行
↓
完成
它类似人做事情:
比如写代码:
第一次:
写完代码,运行报错
普通 Agent:
报错信息返回给用户
反思 Agent:
为什么错?是逻辑错误还是边界问题?修改代码,再测试。
二、为什么 Agent 需要反思?
因为 LLM 本身存在几个问题:
(1)一次推理容易出错
大模型生成结果不是确定计算。
例如:
用户:
写一个排序算法
Agent:
第一次生成:
for(int i=0;i<n;i++) { for(int j=0;j<n;j++)可能:
越界
时间复杂度错误
漏处理边界
如果没有反思:
直接返回错误答案。
有反思:
生成代码
↓
Reviewer:
检查复杂度
检查边界
检查语法
↓
发现问题
↓
重新生成
准确率提升。
(2)复杂任务需要持续优化
比如:
用户:
帮我设计一个机器人导航系统
第一次:
Agent可能:
ROS
SLAM
Navigation
控制
但是没有考虑:
网络延迟
故障恢复
电量管理
反思:
检查设计完整性
发现:
缺少异常处理
补充:
故障检测模块
(3)避免 Agent 陷入错误方向
Agent执行:
搜索资料
↓
分析
↓
生成方案
可能中途:
错误假设
例如:
认为:
机器人使用GPS定位
但是实际:
室内机器人没有GPS。
反思:
当前假设是否合理?
↓
发现错误
↓
重新规划
三、Agent反思机制有哪些类型?
常见有三种:
① Self-Reflection(自我反思)
最简单。
让同一个LLM评价自己的结果。
结构:
用户任务
|
↓
Agent生成答案
|
↓
Reflection Prompt
|
↓
"检查你的答案有什么问题"
|
↓
修改答案
例如:
第一次:
Prompt:
写一个TCP服务器
输出:
代码A
然后:
反思:
请检查上述代码:
1. 是否线程安全?
2. 是否存在资源泄露?
3. 是否符合C++规范?
模型:
发现:
socket关闭遗漏
修改代码
② Critic-Actor(评价者-执行者)
更工程化。
拆成两个Agent:
Task
|
↓
Actor Agent
(执行者)
|
↓
Result
|
↓
Critic Agent
(评价者)
|
┌──────┴──────┐
↓ ↓
通过 修改
③ Reflection Memory(反思记忆)
更高级。
不仅改当前任务,还保存经验。
例如:
第一次:
机器人导航失败:
原因:
低电量没有提前返回充电
存入Memory:
经验:
导航任务必须检查电量
下一次:
Agent:
规划导航任务
读取历史经验
提前检查电量
