首页 教程 常见问题

13.2 Agent SDK 快速入门

使用 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 "未知工具"

下一步