使用 Agent SDK 构建你的第一个 Claude 代理——从零到完成。
环境准备
# 安装 SDK
pip install anthropic
# 设置 API 密钥
export ANTHROPIC_API_KEY="sk-ant-..."
第一个代理
简单的代码审查代理
from anthropic import Anthropic
client = Anthropic()
def review_code(code):
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=2048,
system="""你是一个代码审查专家。
请检查代码中的:
1. 安全问题
2. 性能问题
3. 代码风格
4. 潜在的 Bug
""",
messages=[
{"role": "user", "content": f"请审查以下代码:
{code}"}
]
)
return message.content[0].text
# 使用
with open("main.py") as f:
code = f.read()
print(review_code(code))
带工具的代理
from anthropic import Anthropic
client = Anthropic()
tools = [
{
"name": "read_file",
"description": "读取文件内容",
"input_schema": {
"type": "object",
"properties": {
"path": {"type": "string", "description": "文件路径"}
},
"required": ["path"]
}
}
]
def run_agent(prompt):
messages = [{"role": "user", "content": prompt}]
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=2048,
tools=tools,
messages=messages
)
# 处理工具调用
for content in response.content:
if content.type == "tool_use":
print(f"代理调用工具: {content.name}")
print(f"参数: {content.input}")
return response
# 运行
result = run_agent("读取 main.py 并解释其功能")
实现代理循环
一个完整的代理需要循环:思考 → 行动 → 观察 → 重复。
def agent_loop(prompt):
messages = [{"role": "user", "content": prompt}]
for _ in range(10): # 最大循环次数
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=2048,
tools=tools,
messages=messages
)
tool_calls = [c for c in response.content if c.type == "tool_use"]
if not tool_calls:
# 没有工具调用,返回最终结果
return response.content[0].text
# 执行工具
for tool_call in tool_calls:
result = execute_tool(tool_call)
messages.append({"role": "assistant", "content": response.content})
messages.append({
"role": "user",
"content": [{
"type": "tool_result",
"tool_use_id": tool_call.id,
"content": result
}]
})
def execute_tool(tool_call):
if tool_call.name == "read_file":
with open(tool_call.input["path"]) as f:
return f.read()
return "未知工具"
下一步
- Agent SDK Agent 循环:更高级的代理循环
- Agent SDK 自定义工具:添加工具
- Agent SDK 子代理:并行处理