Agent Loop
智能体循环思考 → 行动 → 观察 → 判断是否结束——所有 Agent 的核心循环。
详解
Agent Loop 是所有 Agent 系统的底层执行引擎,逻辑极为简单:模型思考当前状态 → 决定采取一个行动(通常是调用工具)→ 观察行动结果 → 再次思考,直到模型判断任务已完成或达到最大步数。循环的每一轮都至少有一次模型调用,工具调用结果作为新的观察值被追加到对话历史,让模型在下一轮基于真实反馈调整决策。这和纯粹的单次问答有本质区别:单次问答模型只能靠训练时的知识生成答案;Agent Loop 让模型每一步都能获得来自真实世界的反馈,从而自我纠错。循环的终止条件通常有两种:模型输出终止信号(stop_reason == "end_turn" 且无工具调用),或超出最大步数限制(防止死循环)。步数上限是工程上必须设置的安全阀——没有它,出错的 Agent 可能无限循环消耗 token。
一个类比
像厨师做菜:看菜谱(思考)→ 切菜下锅(行动)→ 尝一口看味道(观察)→ 再决定要不要加盐(下一步思考)。不是一口气把所有步骤想清楚再动手,而是每做一步都根据实际情况调整,直到觉得味道对了为止。
举个例子
# 最小 Agent Loop:while 循环 + 工具调用 + 终止判断
import anthropic
client = anthropic.Anthropic()
tools = [{
"name": "calculator",
"description": "执行数学计算,如加减乘除",
"input_schema": {
"type": "object",
"properties": {"expression": {"type": "string", "description": "数学表达式"}},
"required": ["expression"]
}
}]
def run_calculator(expression: str) -> str:
"""真实工具执行"""
try:
return str(eval(expression)) # 生产环境应用沙箱
except Exception as e:
return f"计算错误: {e}"
def agent_loop(user_question: str, max_steps: int = 10) -> str:
messages = [{"role": "user", "content": user_question}]
for step in range(max_steps): # 安全阀:最多 10 步
resp = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
tools=tools,
messages=messages
)
if resp.stop_reason == "end_turn": # 模型决定任务完成,退出循环
return resp.content[0].text
# 模型选择调工具 → 执行 → 追加观察值
tool_call = next(b for b in resp.content if b.type == "tool_use")
result = run_calculator(tool_call.input["expression"])
print(f"步骤 {step+1}: 计算 {tool_call.input['expression']} = {result}")
messages += [
{"role": "assistant", "content": resp.content},
{"role": "user", "content": [{
"type": "tool_result",
"tool_use_id": tool_call.id,
"content": result
}]}
]
return "超出最大步数,任务未完成"
print(agent_loop("123 乘以 456 等于多少?结果再加上 789?"))PYTHON 示例
相关概念
- → ReAct· Reasoning + Acting
- → Reflection· 反思