Agent 核心循环
问题
Agent 的核心执行循环是什么?ReAct 模式如何工作?
答案
一、ReAct 模式
ReAct(Reasoning + Acting)是最经典的 Agent 模式,交替进行推理和行动:
ReAct Prompt 模板
Answer the following question using the available tools.
Available Tools:
- search(query): 搜索互联网
- calculator(expression): 计算数学表达式
Format:
Thought: 分析当前情况,决定下一步
Action: tool_name(arguments)
Observation: 工具返回结果
... (重复 Thought/Action/Observation)
Thought: 我现在有足够信息回答了
Final Answer: 最终回答
二、Agent 执行流程(代码实现)
from openai import OpenAI
client = OpenAI()
tools = [
{
"type": "function",
"function": {
"name": "search",
"description": "搜索互联网获取信息",
"parameters": {
"type": "object",
"properties": {
"query": {"type": "string", "description": "搜索查询"}
},
"required": ["query"]
}
}
}
]
def agent_loop(user_message: str, max_iterations: int = 10):
messages = [
{"role": "system", "content": "你是一个有用的助手,可以使用工具完成任务。"},
{"role": "user", "content": user_message}
]
for i in range(max_iterations):
# 1. LLM 决策
response = client.chat.completions.create(
model="gpt-4o",
messages=messages,
tools=tools,
)
message = response.choices[0].message
# 2. 如果没有工具调用,返回最终答案
if not message.tool_calls:
return message.content
# 3. 执行工具调用
messages.append(message)
for tool_call in message.tool_calls:
result = execute_tool(tool_call.function.name, tool_call.function.arguments)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": str(result)
})
# 4. 继续循环
return "达到最大迭代次数"
三、Agent 设计模式
Anthropic 总结了几种核心模式,从简单到复杂:
| 模式 | 复杂度 | 说明 | 适用场景 |
|---|---|---|---|
| Prompt Chaining | 低 | 固定流程,前一步输出作为后一步输入 | 线性流程 |
| Routing | 低 | 根据输入类型分发到不同处理流程 | 分类+处理 |
| Parallelization | 中 | 多个子任务并行执行后汇总 | 独立子任务 |
| Orchestrator-Workers | 中 | 中心 Agent 分配任务给 Worker Agent | 任务分解 |
| Evaluator-Optimizer | 中 | 生成-评估-优化循环 | 质量要求高 |
| Autonomous Agent | 高 | 完全自主的 ReAct 循环 | 开放式任务 |
Anthropic 的建议
"从最简单的模式开始。Prompt Chaining 能解决的问题不要用 Agent。Agent 的不确定性和成本都更高。"
四、循环控制
# 必须有终止条件,避免无限循环
STOP_CONDITIONS = {
"max_iterations": 10, # 最大迭代次数
"max_tool_calls": 20, # 最大工具调用次数
"timeout_seconds": 60, # 超时时间
"max_tokens": 100_000, # 最大 Token 消耗
}
常见面试问题
Q1: ReAct 和 Chain-of-Thought 的区别?
答案:
- CoT 纯推理:Thought → Thought → ... → Answer,不与外部交互
- ReAct 推理+行动:Thought → Action → Observation → Thought → ...,可以获取外部信息
- ReAct 通过行动获取信息弥补了 CoT 仅依赖模型内部知识的局限
Q2: Agent 的循环什么时候应该终止?
答案:
- 正常终止:LLM 返回 Final Answer(无 tool_calls)
- 迭代上限:防止无限循环
- Token 上限:防止成本失控
- 超时:防止用户等待太久
- 错误重试上限:同一工具连续失败 N 次后终止