实现 Claude Agent 的智能循环——代理自主思考和行动的核心机制。
代理循环模型
代理循环是 AI 代理的核心逻辑:
- 思考:基于当前上下文,决定下一步行动
- 行动:调用工具获取更多信息或改变环境
- 观察:收集工具调用的结果
- 重复:直到任务完成
基本实现
def agent_loop(prompt, max_iterations=10):
messages = [{"role": "user", "content": prompt}]
for iteration in range(max_iterations):
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=2048,
tools=tools,
messages=messages
)
# 检查是否有工具调用
tool_uses = [c for c in response.content
if c.type == "tool_use"]
if not tool_uses:
# 代理完成了任务
final_text = [c.text for c in response.content
if c.type == "text"]
return final_text[0] if final_text else "无输出"
# 执行每个工具调用
results = []
for tool_use in tool_uses:
result = execute_tool(tool_use)
results.append(result)
# 将结果添加回消息
messages.append({
"role": "assistant",
"content": response.content
})
messages.append({
"role": "user",
"content": [{
"type": "tool_result",
"tool_use_id": tool_use.id,
"content": result
}]
})
return "达到最大迭代次数"
终止条件
代理循环应该有明确的退出条件:
- 最大迭代次数:防止无限循环
- 超时:防止长时间运行
- 任务完成检测:当代理输出最终答案时停止
- 错误处理:工具调用失败时优雅退出
多步推理
代理循环支持复杂的多步推理:
# 每个迭代中,Claude 可以:
# 1. 决定使用哪个工具
# 2. 基于之前的结果决定下一步
# 3. 自行判断何时完成
# 4. 返回最终答案
# Claude 的推理过程:
# "我需要先读取文件 → 分析结构 → 搜索引用 → 总结"
下一步
- Agent SDK 子代理:并行处理
- Agent SDK 自定义工具:扩展能力
- Agent SDK 会话管理:持久化会话