Skip to content

Claude Agent SDK 使用说明

Claude Agent SDK 让你能够构建可以自主读取文件、运行命令、搜索网络、编辑代码等的 AI Agent。

Claude Agent SDK 将驱动 Claude Code 的工具、Agent 循环和上下文管理能力开放为可编程的 Python 和 TypeScript 库。

简单来说,这是一个把 Claude Code 作为库来使用的 SDK,你可以把它嵌入到自己的应用、CI 流水线或自动化脚本中,构建能自主完成复杂任务的 AI Agent。


核心能力

SDK 内置了读取文件、运行命令和编辑代码的工具,你的 Agent 无需自己实现工具执行逻辑,可以立即开始工作。主要能力包括:

能力说明
内置工具文件读写、终端命令、代码编辑、Web 搜索等
Hooks在工具调用前后执行自定义逻辑
子 Agent(Subagents)将大任务分解,并行交给独立的子 Agent 执行
MCP 服务器连接数据库、浏览器、外部 API 等
权限控制精细控制 Agent 能做什么、何时需要用户审批
会话管理(Sessions)构建保持上下文的多轮对话 Agent

前提条件

  • Node.js 18+(TypeScript)或 Python 3.10+
  • 一个 Anthropic 账号,并获取 API Key(在此注册

第一步:安装 SDK

TypeScript

bash
npm install @anthropic-ai/claude-agent-sdk

TypeScript SDK 会将适用于你当前平台的 Claude Code 二进制文件作为可选依赖一起打包,无需单独安装 Claude Code。

Python

bash
# 使用 pip
pip install claude-agent-sdk

# 或使用 uv(推荐)
uv add claude-agent-sdk

注意:Claude Code CLI 会自动随包一起安装,无需单独安装!SDK 默认使用打包的 CLI。

如果你希望使用系统级安装或指定版本,可以通过 ClaudeAgentOptions(cli_path="/path/to/claude") 指定路径。


第二步:配置 API Key

Claude Console 获取 API Key,然后在项目目录创建 .env 文件:

bash
ANTHROPIC_API_KEY=your-api-key-here

或直接设置为环境变量:

bash
export ANTHROPIC_API_KEY=your-api-key-here

支持第三方云平台

SDK 也支持通过第三方 API 提供商进行认证:Amazon Bedrock(设置 CLAUDE_CODE_USE_BEDROCK=1 环境变量并配置 AWS 凭证)、Google Vertex AI(设置 CLAUDE_CODE_USE_VERTEX=1)以及 Microsoft Azure(设置 CLAUDE_CODE_USE_FOUNDRY=1)。

⚠️ 重要:除非事先获得 Anthropic 批准,否则不允许第三方开发者在基于 Claude Agent SDK 构建的产品中提供 claude.ai 登录或速率限制。请使用文档中描述的 API Key 认证方式。


第三步:运行你的第一个 Agent

以下示例创建一个 Agent,列出当前目录中的文件:

Python

实例

python
import asyncio

from claude_agent_sdk import query, ClaudeAgentOptions

async def main():

    async for message in query(

        prompt="What files are in this directory?",

        options=ClaudeAgentOptions(allowed_tools=["Bash", "Glob"]),

    ):

        if hasattr(message, "result"):

            print(message.result)

asyncio.run(main())

TypeScript

实例

javascript
import { query } from "@anthropic-ai/claude-agent-sdk";

async function main() {

  for await (const message of query({

    prompt: "What files are in this directory?",

    options: { allowedTools: ["Bash", "Glob"] },

  })) {

    if ("result" in message) {

      console.log(message.result);

    }

  }

}

main();

实战:构建一个自动修复 Bug 的 Agent

下面通过一个完整示例,演示 Agent SDK 的核心用法。

准备一个有 Bug 的文件

创建 utils.py,包含两处有意为之的 Bug:

实例

python
def calculate_average(numbers):

    total = 0

    for num in numbers:

        total += num

    return total / len(numbers)   # Bug: 空列表时除以 0

def get_user_name(user):

    return user["name"].upper()   # Bug: user 为 None 时报 TypeError

编写 Agent

创建 agent.py

实例

python
import asyncio

from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage

async def main():

    async for message in query(

        prompt="Review utils.py for bugs that would cause crashes. Fix any issues you find.",

        options=ClaudeAgentOptions(

            allowed_tools=["Read", "Edit", "Glob"],  # 允许使用的工具

            permission_mode="acceptEdits",            # 自动批准文件编辑

        ),

    ):

        if isinstance(message, AssistantMessage):

            for block in message.content:

                if hasattr(block, "text"):

                    print(block.text)          # Claude 的推理过程

                elif hasattr(block, "name"):

                    print(f"Tool: {block.name}") # 正在调用的工具

        elif isinstance(message, ResultMessage):

            print(f"Done: {message.subtype}")  # 最终结果

asyncio.run(main())

运行

bash
python agent.py

运行后查看 utils.py,你会看到 Agent 自主完成了以下操作:

  1. 读取utils.py 文件
  2. 分析了代码逻辑,识别出可能导致崩溃的边界情况
  3. 编辑了文件,添加了完善的错误处理

核心概念解析

函数 —— Agent 循环的入口

query 是创建 Agent 循环的主要入口点,返回一个异步迭代器,因此你使用 async for 来实时流式获取 Claude 工作时产生的消息。循环在 Claude 完成任务或遇到错误时结束。SDK 负责编排(工具执行、上下文管理、重试),你只需消费这个消息流。

每次迭代会产生一条消息,可能是:

  • Claude 的推理过程
  • 一次工具调用
  • 工具调用结果
  • 最终结果

工具(Tools)—— 控制 Agent 能做什么

工具组合Agent 能力
Read, Glob, Grep只读分析
Read, Edit, Glob分析并修改代码
Read, Edit, Bash, Glob, Grep完整自动化
加上 WebSearch加入网络搜索能力

权限模式(Permission Modes)—— 控制人工监督程度

模式行为适用场景
acceptEdits自动批准文件编辑,其他操作仍需确认受信任的开发工作流
dontAsk拒绝 allowedTools 之外的所有操作锁定的无人值守 Agent
auto(仅 TypeScript)模型分类器自动审批/拒绝每个工具调用带安全护栏的自主 Agent
bypassPermissions无需提示直接运行所有工具沙箱化 CI 环境
default需提供 canUseTool 回调处理审批自定义审批流程

自定义 Agent 行为

添加 Web 搜索

bash
options = ClaudeAgentOptions(
    allowed_tools=["Read", "Edit", "Glob", "WebSearch"],
    permission_mode="acceptEdits"
)

添加自定义系统提示

bash
options = ClaudeAgentOptions(
    allowed_tools=["Read", "Edit", "Glob"],
    permission_mode="acceptEdits",
    system_prompt="You are a senior Python developer. Always follow PEP 8 style guidelines.",
)

允许执行终端命令

bash
options = ClaudeAgentOptions(
    allowed_tools=["Read", "Edit", "Glob", "Bash"],
    permission_mode="acceptEdits"
)
# 可以尝试:
# prompt="Write unit tests for utils.py, run them, and fix any failures"

加载项目配置(CLAUDE.md 等)

SDK 构建于与 Claude Code 相同的基础之上,SDK Agent 可以访问相同的基于文件系统的功能:项目说明(CLAUDE.md 和 rules)、技能、Hooks 等。默认情况下 SDK 不加载任何文件系统设置。

bash
options = ClaudeAgentOptions(
    allowed_tools=["Read", "Edit"],
    # "user" 从 ~/.claude/ 加载,"project" 从 ./.claude/ 加载
    setting_sources=["user", "project"],
)

错误处理

python
from claude_agent_sdk import (
    ClaudeSDKError,      # 基础错误
    CLINotFoundError,    # Claude Code 未安装
    CLIConnectionError,  # 连接问题
    ProcessError,        # 进程失败
    CLIJSONDecodeError,  # JSON 解析失败
)

try:
    async for message in query(prompt="Hello"):
        pass
except CLINotFoundError:
    print("请先安装 Claude Code")
except ProcessError as e:
    print(f"进程失败,退出码:{e.exit_code}")
except CLIJSONDecodeError as e:
    print(f"响应解析失败:{e}")

Agent SDK vs. 其他 Claude 工具

Agent SDKClient SDK(Messages API)Claude Code CLI
使用方式Python/TypeScript 库HTTP API 调用终端命令行工具
工具执行内置,自动执行需手动实现内置,交互式
适用场景构建自主 Agent、应用集成一般 LLM 调用直接编码辅助
状态管理有状态,支持会话无状态有状态,交互式

SDK 功能对照表

SDK 还支持 Claude Code 的基于文件系统的配置。若要使用这些功能,需在选项中设置 setting_sources=["project"](Python)或 settingSources: ['project'](TypeScript)。

功能说明位置
Skills(技能)用 Markdown 定义的专项能力.claude/skills/*/SKILL.md
Slash Commands常用任务的自定义命令.claude/commands/*.md
Memory(记忆)项目上下文和指令CLAUDE.md
Plugins(插件)通过 plugins 选项扩展通过代码配置

AI 思考中...

JetBrains IDEs 中使用 Claude Code

Claude Code 开发配置

基于 VitePress 构建,部署于 GitHub Pages