用 Claude API 构建你的第一个 Agent
从 Tool Use 到多轮对话,手把手教你用 Claude API 搭建一个能自主决策的 AI Agent。
什么是 AI Agent?
AI Agent 是一个能够自主决策、调用工具并完成复杂任务的智能系统。与简单的对话不同,Agent 可以:
- 分析任务并制定计划
- 调用外部工具获取信息
- 根据结果调整策略
- 多轮迭代直到完成目标
Claude 的 Tool Use
Claude API 提供了原生的 Tool Use 能力,让 Agent 开发变得简单:
import anthropic
client = anthropic.Anthropic()
tools = [
{
"name": "get_weather",
"description": "获取指定城市的天气信息",
"input_schema": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "城市名称"}
},
"required": ["city"]
}
}
]
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
tools=tools,
messages=[{"role": "user", "content": "北京今天天气怎么样?"}]
)
Agent 循环
一个完整的 Agent 需要实现循环逻辑:
- 发送请求 — 将用户输入和历史消息发送给 Claude
- 检查响应 — 如果 Claude 返回
tool_use,执行对应工具 - 返回结果 — 将工具结果作为
tool_result发回 - 重复 — 直到 Claude 返回最终文本回答
def run_agent(user_message, tools_handler):
messages = [{"role": "user", "content": user_message}]
while True:
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=4096,
tools=tools,
messages=messages
)
if response.stop_reason == "end_turn":
return response.content[0].text
# 处理 tool_use
tool_results = []
for block in response.content:
if block.type == "tool_use":
result = tools_handler(block.name, block.input)
tool_results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": result
})
messages.append({"role": "assistant", "content": response.content})
messages.append({"role": "user", "content": tool_results})
最佳实践
- 清晰的工具描述:Claude 根据描述决定何时调用工具
- 错误处理:工具执行失败时返回有意义的错误信息
- 上下文管理:定期总结历史消息避免超出上下文窗口
- 安全边界:限制 Agent 可执行的操作范围
总结
Claude 的 Tool Use 让构建 Agent 变得直观而强大。通过合理的工具设计和循环控制,你可以构建出能解决实际问题的智能 Agent。