智能体推理能力论文
智能体(Agent)需要超越简单的指令执行,具备规划、推理、反思和工具使用等高级认知能力。本文梳理智能体推理能力的论文进展,从 ReAct 到 Reflexion 再到树搜索规划。
智能体推理的核心维度
智能体推理包含多个相互关联的维度:
| 维度 | 描述 | 代表工作 |
|---|---|---|
| 行动推理 | 决定采取什么行动 | ReAct |
| 反思推理 | 评估和修正行动结果 | Reflexion |
| 规划推理 | 制定多步骤行动计划 | Tree of Planning |
| 工具推理 | 选择和使用合适工具 | Toolformer |
| 社交推理 | 与其他智能体协作 | CAMEL |
ReAct:推理+行动
Yao et al. (2022) 提出的 ReAct 框架将推理和行动交织:
python
class ReActAgent:
"""ReAct 智能体:推理与行动交替"""
def __init__(self, llm, tools):
self.llm = llm
self.tools = tools
def run(self, question, max_steps=10):
trajectory = []
for step in range(max_steps):
# 思考:推理当前状态
thought = self.llm.generate(
f"问题:{question}\n轨迹:{trajectory}\n思考:"
)
trajectory.append(f"思考{step+1}:{thought}")
# 行动:选择并执行工具
action = self.llm.generate(
f"问题:{question}\n轨迹:{trajectory}\n行动:"
)
tool_name, tool_input = self.parse_action(action)
if tool_name == "finish":
return tool_input
observation = self.tools[tool_name](tool_input)
trajectory.append(f"行动{step+1}:{tool_name}({tool_input})")
trajectory.append(f"观察{step+1}:{observation}")
return self.llm.generate(f"基于轨迹给出最终答案:{trajectory}")Reflexion:自我反思
Shinn et al. (2023) 的 Reflexion 让智能体从失败中学习:
- 执行任务,如果失败则进行反思
- 反思生成语言反馈,指出失败原因
- 将反思存入记忆,指导后续尝试
- 多次尝试直到成功或达到上限
规划与搜索
LLM 规划
智能体需要将复杂目标分解为可执行的子目标:
- HuggingGPT:LLM 作为控制器,调度专家模型
- Voyager:在 Minecraft 中自动发现和执行技能
- Tree of Planning:树搜索式的多步规划
蒙特卡洛树搜索
将 MCTS 应用于 LLM 规划:
python
class MCTSPlanner:
"""LLM + MCTS 规划"""
def __init__(self, llm, reward_fn, num_simulations=50):
self.llm = llm
self.reward_fn = reward_fn
self.num_simulations = num_simulations
def plan(self, initial_state, goal):
root = Node(state=initial_state)
for _ in range(self.num_simulations):
node = self.select(root)
if not node.is_terminal:
children = self.expand(node, goal)
value = self.simulate(node, goal)
self.backpropagate(node, value)
return self.best_action(root)推理与行动的平衡
纯推理(CoT)不与外部环境交互,纯行动(直接执行)缺乏深思熟虑。ReAct 的关键洞察是推理和行动应该交替进行——推理指导行动,行动的观察反馈给推理。
工具使用推理
智能体需要推理何时使用工具、使用哪个工具:
- Toolformer:模型自主学习何时调用 API
- Gorilla:训练 LLM 使用数千个 API
- ToolLLM:大规模工具使用评估