🚀 Claude Agent SDK 使用指南:快速开始

2 阅读4分钟

在 AI Agent 开发领域,Anthropic Agent SDK 提供了一套强大的工具链,让 Claude 能够直接操作文件、执行命令并自主完成任务。

本文将带你通过一个实战案例——构建一个自动发现并修复 Python 代码 Bug 的 Agent,深入理解该 SDK 的核心用法。

🛠️ 准备工作 (Prerequisites)

在开始之前,请确保你满足以下条件:

  • Python 环境:Python 3.10 或更高版本。
  • API Key:拥有一个 Anthropic Console 账号并创建了 API Key。

📦 安装 SDK (Installation)

首先,我们需要安装 Python 版本的 Agent SDK。打开终端执行以下命令:

Bash

pip install claude-agent-sdk

接着,设置你的 API Key 环境变量(或者将其写入 .env 文件):

Bash

export ANTHROPIC_API_KEY="your-api-key-here"

📝 实战:构建自动修复 Agent

我们将创建一个包含故意错误的代码文件,然后编写一个 Agent 来自动读取、分析并修复它。

第一步:创建“有 Bug”的文件

在你的项目目录下创建一个名为 utils.py 的文件,填入以下包含潜在 Bug 的代码:

Python

# utils.py
def calculate_average(numbers):
    total = 0
    for num in numbers:
        total += num
    # Bug 1: 如果 numbers 为空列表,这里会抛出 ZeroDivisionError
    return total / len(numbers)

def get_user_name(user):
    # Bug 2: 如果 user 为 None,这里会抛出 TypeError
    return user["name"].upper()

第二步:编写 Agent 代码

创建一个名为 agent.py 的文件。我们将使用 SDK 的 query 函数来启动一个 Agent 循环。

注意代码中的 ClaudeAgentOptions 配置,我们赋予了 Agent 读取 (Read)编辑 (Edit)列出文件 (Glob) 的权限,并设置 permission_mode="acceptEdits" 以允许自动应用修改。

Python

# agent.py
import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage

async def main():
    print("🤖 Agent 正在启动,开始分析 utils.py ...")
    
    # 配置 Agent 的能力和权限
    options = ClaudeAgentOptions(
        # 授予 Agent 读取、编辑文件和文件搜索的工具权限
        allowed_tools=["Read", "Edit", "Glob"],
        # ⚠️ acceptEdits 模式会自动批准 Agent 的文件修改请求,适合无人值守运行
        permission_mode="acceptEdits", 
    )

    # 启动 Agent 循环
    # query() 函数返回一个异步迭代器,随着 Claude 的思考和操作实时生成消息
    async for message in query(
        prompt="Review utils.py for bugs that would cause crashes. Fix any issues you find.",
        options=options
    ):
        # 处理并打印 Agent 的实时反馈
        if isinstance(message, AssistantMessage):
            for block in message.content:
                if hasattr(block, "text"):
                    # 打印 Claude 的思考过程
                    print(f"💡 思考: {block.text}")
                elif hasattr(block, "name"):
                    # 打印 Agent 正在调用的工具(如 Read, Edit)
                    print(f"🔧 调用工具: {block.name}")
        
        # 打印最终结果
        elif isinstance(message, ResultMessage):
            print(f"✅ 完成: {message.subtype}")

if __name__ == "__main__":
    asyncio.run(main())

第三步:运行 Agent

在终端运行 agent.py

Bash

python agent.py

🎉 运行结果

你会看到终端中打印出 Agent 的思考过程。它通常会执行以下步骤:

  1. Read: 读取 utils.py 的内容。
  2. Analysis: 分析代码,发现空列表除零错误和 NoneType 访问错误。
  3. Edit: 调用编辑工具,自动重写 utils.py 增加防御性代码。

运行结束后,再次查看 utils.py,你会发现代码已经被自动修复了(类似于以下内容):

Python

def calculate_average(numbers):
    if not numbers:
        return 0
    total = 0
    for num in numbers:
        total += num
    return total / len(numbers)

def get_user_name(user):
    if user is None:
        return ""
    return user.get("name", "").upper()

🔍 核心代码解析

1. query() 函数

这是 SDK 的核心入口。它建立了一个与 Claude 的会话循环。

  • 流式响应:通过 async for 我们可以实时获取 Agent 的每一步操作(思考、调用工具、工具返回结果),而不是傻等任务全部结束。
  • 自动编排:SDK 自动处理了“模型思考 -> 调用工具 -> 获取工具结果 -> 再次思考”的复杂循环。

2. ClaudeAgentOptions

这是控制 Agent 行为的关键配置对象。

  • allowed_tools: 决定了 Agent 的能力边界。

    • Read, Glob, Grep: 只读权限,适合代码审查。
    • Edit: 允许修改文件,适合自动重构或修复。
    • Bash: 允许执行 Shell 命令(慎用!适合自动化运维)。
  • permission_mode:

    • acceptEdits: 自动批准文件修改,实现全自动化。
    • default: 在执行敏感操作(如写文件)前会暂停并等待人工确认(通过回调函数)。

🚀 进阶:自定义 Agent 能力

你可以通过修改 options 轻松扩展 Agent 的能力。

场景:给 Agent 增加“上网”和“执行命令”的能力

Python

options = ClaudeAgentOptions(
    # 增加 WebSearch 和 Bash 工具
    allowed_tools=["Read", "Edit", "Glob", "WebSearch", "Bash"], 
    permission_mode="acceptEdits"
)

# 此时你可以尝试这样的 Prompt:
# "搜索最新的 Python 3.12 特性,并写一个 demo.py 演示其中三个特性,然后运行它。"

⚠️ 注意事项

  1. 安全权限:在使用 Bash 工具或 acceptEdits 模式时请务必小心,确保 Agent 运行在受控环境(如 Docker 容器)中,防止误删文件。
  2. 成本控制:Agent 循环可能会消耗较多 Token,建议在开发测试阶段关注 API 使用量。

通过这篇指南,你已经掌握了使用 Python 版本的 Anthropic Agent SDK 构建自修复代码助手的基础。现在的 AI 不仅仅是对话机器人,更是能实实在在帮你干活的“数字员工”。快去尝试构建你自己的 Agent 吧!