跳到主要内容

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 的循环什么时候应该终止?

答案

  1. 正常终止:LLM 返回 Final Answer(无 tool_calls)
  2. 迭代上限:防止无限循环
  3. Token 上限:防止成本失控
  4. 超时:防止用户等待太久
  5. 错误重试上限:同一工具连续失败 N 次后终止

相关链接