你已经进行了 API 调用,但单个调用只返回一个响应。如果你想自动化工作流,Claude 需要执行、查看结果、决定下一步并继续。这个模式就是人们谈论 智能工作流 时的意思。
Agent 是 Claude 的自主版本,在没有人类介入的情况下运行消息循环的两端。Agent 接收任务、选择工具并在循环中执行代码,直到 Claude 决定任务完成。
实现 agent 循环最简单的方式如下:
end_turn。将其视为一个轮次交替的对话:用户启动,agent 调用工具,工具返回结果,agent 继续直到有答案。
要看到这个循环端到端运行而不涉及数据库或 UI,我们将连接一个名为 get_weather 的假工具并询问 Claude 今天在奥斯汀应该穿什么。Claude 自己无法知道天气,所以它必须调用工具、读取结果,然后给你答案。
这是完整的脚本:
import anthropic
client = anthropic.Anthropic()
# tools 数组告诉 Claude 有什么可用:
# 一个名称、一个描述和一个输入的 JSON 模式。
tools = [
{
"name": "get_weather",
"description": "Get the current weather for a city.",
"input_schema": {
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "The city to get weather for",
}
},
"required": ["city"],
},
}
]
# run_tool 只是一个硬编码的查询。
# 在真实的应用中,这会访问你的数据库、API 等。
def run_tool(name, tool_input):
if name == "get_weather":
return f"Weather in {tool_input['city']}: 95F, sunny"
raise ValueError(f"Unknown tool: {name}")
messages = [
{"role": "user", "content": "What should I wear in Austin today?"}
]
# Agent 循环。每次迭代将消息发送给 Claude
# 并在响应的停止原因上 switch。
while True:
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
tools=tools,
messages=messages,
)
if response.stop_reason == "end_turn":
# Claude 完成。打印最终文本并中断。
for block in response.content:
if block.type == "text":
print(block.text)
break
if response.stop_reason == "tool_use":
# 在响应中找到工具使用块并运行每个。
tool_results = []
for block in response.content:
if block.type == "tool_use":
result = run_tool(block.name, block.input)
tool_results.append(
{
"type": "tool_result",
"tool_use_id": block.id,
"content": result,
}
)
# 将助手的响应和我们的工具结果
# 推回消息,然后再次循环以便 Claude 回答。
messages.append({"role": "assistant", "content": response.content})
messages.append({"role": "user", "content": tool_results})
登录 参与讨论
三件事要注意:
run_tool 只是一个硬编码的查询。在真实的应用中,这会访问你的数据库、API 等。end_turn 上,Claude 完成——打印最终文本并中断。在 tool_use 上,找到工具使用块,运行每个,将助手的响应和你的工具结果推回 messages,再次循环以便 Claude 回答。当你运行脚本时,你会看到两个轮次:
tool_use。Claude 请求奥斯汀的 get_weather,你的代码返回温度和条件。end_turn,Claude 告诉你穿轻便透气的衣服。两次 API 调用,一次工具执行,一个最终答案。这就是整个循环。你使用 Claude API 构建的任何东西都将与此类似。
在真实环境中,这个相同的循环驱动类似自动审查端点的东西:一个合规 agent 读取结构报告,通过工具查找相关建筑规范,并在工作时逐个将风险发现写回数据库。
循环的形状与你刚才运行的完全相同。区别是:
end_turn 时停止。