💡

文章摘要

2025 年末,Anthropic 将 Claude Code SDK 更名为 Claude Agent SDK,标志着从编码助手到通用 Agent 运行时的进化。本文深度解析 Claude Agent SDK 的核心概念(Agent 循环、工具、Hook、子 Agent、权限系统)、MCP 集成、生产部署最佳实践,以及与 LangGraph/CrewAI/OpenAI Agents SDK 的对比。

引言:从编码助手到通用 Agent 运行时

2025 年末,Anthropic 做了一个重大决定:将 Claude Code SDK 更名为 Claude Agent SDK。

这不是简单的品牌升级。Claude Code 最初是一个编码助手,但开发者们开始用它构建各种非编码场景的 Agent:邮件助手、研究助理、客服机器人、金融分析器。Anthropic 意识到,Claude Code 的底层能力——Agent 循环、工具执行、上下文管理——是一个通用 Agent 运行时,不应该被「编码」这个标签限制。

2026 年 6 月,Claude Agent SDK 已成为六大 Agent 框架之一,与 LangGraphCrewAI、OpenAI Agents SDK、Google ADKMastra 同台竞技。但它的设计哲学与其他框架截然不同:

其他框架:从零开始设计 Agent 抽象(图、角色、工作流)
Claude Agent SDK:将 Claude Code 的成熟运行时打包为库,让你复用经过数十万开发者验证的 Agent 循环

这意味着什么?

  1. 你不需要自己实现 Agent 循环Claude Code 的循环已经处理了工具调用、错误重试、上下文截断、子 Agent 管理等复杂逻辑
  2. 内置工具系统:文件读写、代码执行、Shell 命令等工具开箱即用
  3. MCP 原生支持:可以直接连接任何 MCP Server
  4. 权限系统:经过生产验证的安全模型,控制 Agent 能做什么、不能做什么
  5. 子 Agent 机制:可以创建专门的子 Agent 处理特定任务

本文将带你从零开始,用 Claude Agent SDK 构建一个生产级 Agent。 我们会覆盖:

  • 安装和第一个 Agent
  • 核心概念:Agent 循环、工具、Hook、子 Agent
  • 权限系统和安全模型
  • MCP 集成
  • 生产部署最佳实践
  • 与其他框架的对比

准备开始了吗?

图表加载中…

💡 一句话理解

Claude Agent SDK 的核心优势:你不需要重新发明 Agent 轮子。Claude Code 的运行时已经经过数十万开发者的生产验证。

⚠️ 常见踩坑

Claude Agent SDK 不是「最简单的」框架。如果你只需要一个轻量级的 Agent,Pydantic AISmolagents 可能更合适。

一、安装和第一个 Agent

Claude Agent SDK 提供 Python 和 TypeScript 两个版本。 本文以 Python 为例,TypeScript 的 API 几乎相同。

安装:

环境变量配置:

Claude Agent SDK 支持三种后端:Anthropic API、Amazon Bedrock、Google Cloud Vertex AI。

使用 Anthropic API:

使用 Amazon Bedrock:

使用 Google Cloud Vertex AI:

第一个 Agent:

让我们从一个最简单的例子开始:一个能回答问题的 Agent。

就这么简单。 但背后发生了什么?

  1. Agent 循环启动:SDK 启动 Claude Code 的 Agent 循环
  2. 系统提示注入:你的 system_prompt 被注入到对话开头
  3. LLM 调用:调用 Claude API,获取响应
  4. 工具检查:检查响应中是否包含工具调用
  5. 工具执行:如果有工具调用,执行工具并将结果返回给 LLM
  6. 循环继续:重复步骤 3-5,直到 LLM 返回最终答案(没有工具调用

这个循环就是 Claude Agent SDK 的核心。 所有的复杂性——上下文管理、错误处理、重试逻辑——都被封装在这个循环里。

添加自定义工具:

工具定义的关键:

  • 函数签名:参数类型必须明确(str、int、float 等)
  • Docstring:Claude 通过 docstring 理解工具的用途和参数含义
  • 返回值:必须是字符串(或可序列化为 JSON 的对象)

Claude 会自动:

  1. 从 docstring 生成工具的 JSON Schema
  2. 在需要时调用工具
  3. 将工具返回的字符串解析并融入回答
python
from claude_agent_sdk import ClaudeAgent, tool

@tool
def get_weather(city: str) -> str:
    """获取指定城市的天气信息。
    
    Args:
        city: 城市名称,如 "北京"、"上海"
    """
    # 模拟天气 API 调用
    weather_data = {
        "北京": "晴,25°C,湿度 40%",
        "上海": "多云,22°C,湿度 65%",
        "广州": "小雨,28°C,湿度 80%",
    }
    return weather_data.get(city, f"{city}:暂无天气数据")

@tool
def search_web(query: str) -> str:
    """搜索网络获取最新信息。
    
    Args:
        query: 搜索查询
    """
    # 模拟搜索 API
    return f"搜索结果:关于 '{query}' 的最新信息..."

# 创建 Agent
agent = ClaudeAgent(
    model="claude-sonnet-4-20250514",
    system_prompt="你是一个友好的 AI 助手,可以查询天气和网络信息。",
    tools=[get_weather, search_web],
    max_turns=10,  # 限制最大工具调用轮次
)

# 运行 Agent
response = agent.run("北京今天天气怎么样?顺便搜一下明天有没有什么科技新闻。")
print(response)
bash
pip install claude-agent-sdk
bash
export ANTHROPIC_API_KEY=your_api_key_here
bash
export CLAUDE_CODE_USE_BEDROCK=1
export AWS_REGION=us-east-1
export AWS_ACCESS_KEY_ID=your_access_key
export AWS_SECRET_ACCESS_KEY=your_secret_key
bash
export CLAUDE_CODE_USE_VERTEX=1
export CLOUD_ML_REGION=us-east5
export ANTHROPIC_VERTEX_PROJECT_ID=your_project_id
python
from claude_agent_sdk import ClaudeAgent

# 创建 Agent 实例
agent = ClaudeAgent(
    model="claude-sonnet-4-20250514",
    system_prompt="你是一个友好的 AI 助手。",
)

# 运行 Agent
response = agent.run("什么是 AI Agent?")
print(response)

💡 一句话理解

工具的 docstring 至关重要。Claude 通过 docstring 理解工具的用途,写得越清晰,工具调用越准确。

⚠️ 常见踩坑

max_turns 参数很重要。如果不限制,Agent 可能进入无限循环(特别是在工具调用失败时)。

二、核心概念深度解析

Claude Agent SDK 的核心概念包括:Agent 循环、工具、Hook、子 Agent、权限系统。

Agent 循环(Agent Loop):

Agent 循环是 Claude Agent SDK 的心脏。它的核心流程:

  1. 调用 Claude API 获取响应
  2. 检查响应中是否有工具调用
  3. 如果有 → 执行工具 → 将结果追加到消息历史 → 回到步骤 1
  4. 如果没有 → 返回最终答案

实际的 Agent 循环比这复杂得多:

  1. 上下文管理:当消息历史超过模型的上下文窗口时,自动截断早期消息
  2. 错误重试工具调用失败时,自动重试(最多 3 次)
  3. 权限检查:在执行工具前,检查是否通过权限验证
  4. Hook 触发:在关键节点触发用户定义的 Hook
  5. 流式输出:支持实时流式返回中间结果

工具(Tools):

工具是 Agent 与外部世界交互的接口。Claude Agent SDK 的工具系统有几个独特特性:

  1. 代码生成优先:Claude 更倾向于生成代码来解决问题,而不是调用 JSON 工具
  2. 内置工具:文件读写、代码执行、Shell 命令等工具开箱即用
  3. MCP 集成:可以直接连接 MCP Server,使用其提供的工具

Hook(钩子):

Hook 让你在 Agent 循环的关键节点插入自定义逻辑。

可用的 Hook:

  • pre_tool_call工具调用前触发,可以修改或阻止工具调用
  • post_tool_call工具调用后触发,可以修改工具结果
  • pre_llm_callLLM 调用前触发,可以修改输入消息
  • post_llm_callLLM 调用后触发,可以修改 LLM 响应

示例:用 Hook 实现工具调用日志

子 Agent(Subagents):

子 Agent 是 Claude Agent SDK 的强大特性。你可以创建专门的子 Agent 处理特定任务,主 Agent 在需要时调用子 Agent。

为什么要用子 Agent?

  1. 专业化:不同 Agent 专注不同任务
  2. 上下文隔离:子 Agent 有独立的上下文窗口,不会污染主 Agent
  3. 并行执行:多个子 Agent 可以并行工作

示例:主 Agent + 研究子 Agent + 写作子 Agent

子 Agent 的工作原理:

  1. 主 Agent 决定需要调用子 Agent
  2. 主 Agent 生成子 Agent 的输入(通常是任务描述)
  3. 子 Agent 独立运行,完成任务
  4. 子 Agent 返回结果给主 Agent
  5. 主 Agent 继续执行

关键:子 Agent 的上下文是独立的。 子 Agent 看不到主 Agent 的完整对话历史,只能看到主 Agent 传给它的输入。这意味着:

  • ✅ 子 Agent 不会污染主 Agent 的上下文
  • ✅ 子 Agent 可以有自己的工具集
  • ⚠️ 子 Agent 需要明确的输入,不能依赖主 Agent 的上下文
图表加载中…

💡 一句话理解

子 Agent 是解决「工具过多」问题的有效方法。如果一个 Agent 有 20+ 个工具,考虑拆分为多个专门的子 Agent。

⚠️ 常见踩坑

子 Agent 的上下文是独立的。确保主 Agent 在调用子 Agent 时,传递足够的上下文信息。

三、权限系统:生产级安全的关键

Claude Agent SDK 的权限系统是其最大的差异化特性之一。

当你让 Agent 能够读写文件、执行代码、调用 API 时,安全问题变得至关重要。Claude Agent SDK 的权限系统经过 Claude Code 的生产验证,提供了细粒度的控制。

权限模型:

Claude Agent SDK 的权限系统基于三个层次:

  1. 工具级权限:控制 Agent 能使用哪些工具
  2. 参数级权限:控制工具的参数范围(如文件路径白名单)
  3. 运行时权限:控制 Agent 是否需要在执行前获得用户批准

配置权限:

权限检查流程:

  1. Agent 决定调用工具
  2. SDK 检查权限规则
  3. 如果没有匹配的规则 → 拒绝
  4. 如果 allow=False → 拒绝
  5. 如果 require_approval=True → 暂停,等待用户批准
  6. 如果 condition 返回 False → 拒绝
  7. 否则 → 执行工具

交互式批准(Interactive Approval):

require_approval=True 时,Agent 会暂停并等待用户批准。这在交互式场景中很有用,但在自动化场景中会成为障碍。

自动化场景的权限策略:

对于无人值守的 Agent(如定时任务、API 服务),你需要:

  1. 严格的白名单:只允许特定的工具和参数范围
  2. 沙箱环境:在 Docker 容器或虚拟机中运行 Agent
  3. 资源限制:限制 CPU、内存、网络访问

示例:生产环境的权限配置

权限最佳实践:

  1. 最小权限原则:只授予 Agent 完成任务所需的最小权限
  2. 白名单优于黑名单:明确允许的操作比明确禁止的操作更安全
  3. 定期审计:检查 Agent 的实际工具调用,确保没有越权行为
  4. 日志记录:记录所有工具调用,包括被拒绝的调用
python
from claude_agent_sdk import ClaudeAgent, Permission, tool

@tool
def read_file(path: str) -> str:
    """读取文件内容。"""
    with open(path, 'r') as f:
        return f.read()

@tool
def write_file(path: str, content: str) -> str:
    """写入文件。"""
    with open(path, 'w') as f:
        f.write(content)
    return f"已写入 {path}"

@tool
def execute_shell(command: str) -> str:
    """执行 Shell 命令。"""
    import subprocess
    result = subprocess.run(command, shell=True, capture_output=True, text=True)
    return result.stdout

# 定义权限
permissions = [
    # 允许读取 /tmp 下的文件
    Permission(
        tool="read_file",
        condition=lambda args: args["path"].startswith("/tmp/"),
        require_approval=False,
    ),
    
    # 允许写入 /tmp/output 下的文件
    Permission(
        tool="write_file",
        condition=lambda args: args["path"].startswith("/tmp/output/"),
        require_approval=False,
    ),
    
    # Shell 命令需要批准
    Permission(
        tool="execute_shell",
        require_approval=True,
    ),
]

# 创建 Agent
agent = ClaudeAgent(
    model="claude-sonnet-4-20250514",
    tools=[read_file, write_file, execute_shell],
    permissions=permissions,
    interactive=True,  # 启用交互式批准
)

# 运行 Agent
response = agent.run("读取 /tmp/data.txt,统计字数,将结果写入 /tmp/output/result.txt")
print(response)
python
from claude_agent_sdk import ClaudeAgent, Permission

# 定义权限规则
permissions = [
    # 允许读取 /tmp 目录下的文件
    Permission(
        tool="read_file",
        condition=lambda args: args["path"].startswith("/tmp/"),
        require_approval=False,
    ),
    
    # 允许写入 /tmp/output 目录
    Permission(
        tool="write_file",
        condition=lambda args: args["path"].startswith("/tmp/output/"),
        require_approval=False,
    ),
    
    # 执行 Shell 命令需要用户批准
    Permission(
        tool="execute_shell",
        require_approval=True,  # 每次调用都需要用户批准
    ),
    
    # 禁止删除文件
    Permission(
        tool="delete_file",
        allow=False,  # 完全禁止
    ),
]

agent = ClaudeAgent(
    model="claude-sonnet-4-20250514",
    tools=[...],
    permissions=permissions,
)
python
# 生产环境:严格限制
production_permissions = [
    # 只允许读取特定目录
    Permission(
        tool="read_file",
        condition=lambda args: (
            args["path"].startswith("/data/input/") and
            not args["path"].endswith(".secret")
        ),
        require_approval=False,
    ),
    
    # 只允许写入特定目录
    Permission(
        tool="write_file",
        condition=lambda args: args["path"].startswith("/data/output/"),
        require_approval=False,
    ),
    
    # 禁止所有 Shell 命令
    Permission(tool="execute_shell", allow=False),
    
    # 禁止删除
    Permission(tool="delete_file", allow=False),
    
    # 只允许调用特定的 API
    Permission(
        tool="http_request",
        condition=lambda args: args["url"].startswith("https://api.example.com/"),
        require_approval=False,
    ),
]
python
from claude_agent_sdk import ClaudeAgent, Hook

def log_tool_call(tool_name, tool_args):
    print(f"[LOG] 调用工具: {tool_name}, 参数: {tool_args}")
    return None  # 返回 None 表示不修改工具调用

agent = ClaudeAgent(
    model="claude-sonnet-4-20250514",
    tools=[...],
    hooks=[
        Hook(event="pre_tool_call", handler=log_tool_call),
    ],
)
python
from claude_agent_sdk import ClaudeAgent, Subagent

# 研究子 Agent
research_agent = Subagent(
    name="researcher",
    model="claude-sonnet-4-20250514",
    system_prompt="你是一个研究助理,专门收集和整理信息。",
    tools=[search_web, read_document],
)

# 写作子 Agent
writing_agent = Subagent(
    name="writer",
    model="claude-sonnet-4-20250514",
    system_prompt="你是一个写作助理,专门将信息整理成清晰的文章。",
    tools=[write_file],
)

# 主 Agent
main_agent = ClaudeAgent(
    model="claude-sonnet-4-20250514",
    system_prompt="你是一个项目经理,协调研究和写作任务。",
    subagents=[research_agent, writing_agent],
)

response = main_agent.run("写一篇关于 AI Agent 可观测性的文章。")

💡 一句话理解

权限系统是 Claude Agent SDK 的核心优势。不要跳过它——即使是在开发环境中。

⚠️ 常见踩坑

永远不要在 Agent 代码中硬编码 API 密钥或敏感信息。使用环境变量或密钥管理服务。

四、MCP 集成:连接外部工具生态

Claude Agent SDK 原生支持 MCPModel Context Protocol),这是其最大的生态优势之一。

MCP 是 Anthropic 提出的标准化协议,让 Agent 可以连接任何外部工具和数据源。2026 年 6 月,已有超过 10,000 个公开 MCP Server,覆盖 GitHub、Slack、数据库、文件系统等各种场景。

为什么 MCP 很重要?

没有 MCP

  • 每个 Agent 框架都有自己的工具定义方式
  • 工具不能跨框架复用
  • 集成 N 个工具到 M 个 Agent 需要 N×M 个适配器

有了 MCP

  • 统一的工具定义和调用协议
  • 一个 MCP Server 可以被任何支持 MCP 的 Agent 使用
  • 集成 N 个工具到 M 个 Agent 只需要 N+M 个组件

在 Claude Agent SDK 中使用 MCP

MCP Server 示例:GitHub MCP Server

Anthropic 官方提供了 GitHub MCP Server,让 Agent 可以操作 GitHub:

MCP vs 内置工具:

维度 内置工具 MCP 工具
定义方式 Python 函数 + @tool 装饰器 MCP Server 暴露
执行位置 Agent 进程内 MCP Server 进程(可以是远程)
安全隔离 共享进程空间 独立进程,更好的隔离
复用性 只能在当前 Agent 使用 可以被任何 MCP 客户端使用
生态 需要自己实现 10,000+ 现成 Server

最佳实践:

  1. 优先使用 MCP:如果有现成的 MCP Server,优先使用而不是自己实现
  2. 本地 MCP Server:对于敏感操作(文件读写、数据库访问),使用本地 MCP Server(stdio 传输)
  3. 远程 MCP Server:对于公共服务(GitHub、Slack),可以使用远程 MCP Server(HTTP/SSE 传输)
  4. 权限控制:即使使用 MCP,也要在 Agent 层配置权限
python
from claude_agent_sdk import ClaudeAgent, MCPClient, tool

# 自定义工具(内置)
@tool
def calculate(expression: str) -> str:
    """计算数学表达式。"""
    return str(eval(expression))

# MCP Server 1:GitHub
github_mcp = MCPClient(
    command="npx",
    args=["-y", "@modelcontextprotocol/server-github"],
)

# MCP Server 2:文件系统
fs_mcp = MCPClient(
    command="npx",
    args=["-y", "@modelcontextprotocol/server-filesystem", "/tmp"],
)

# 创建 Agent,同时使用内置工具和 MCP 工具
agent = ClaudeAgent(
    model="claude-sonnet-4-20250514",
    tools=[calculate],  # 内置工具
    mcp_clients=[github_mcp, fs_mcp],  # MCP 工具
)

# Agent 可以混合使用所有工具
response = agent.run("""
1. 列出我的 GitHub 仓库
2. 找到 star 数最多的仓库
3. 计算 star 数的平方根
4. 将结果写入 /tmp/result.txt
""")
print(response)
python
from claude_agent_sdk import ClaudeAgent, MCPClient

# 连接 MCP Server
mcp_client = MCPClient(
    server_url="http://localhost:3000",  # MCP Server 地址
    # 或者使用 stdio(本地进程)
    # command="npx",
    # args=["-y", "@modelcontextprotocol/server-github"],
)

# 创建 Agent,注册 MCP 工具
agent = ClaudeAgent(
    model="claude-sonnet-4-20250514",
    mcp_clients=[mcp_client],
)

# Agent 可以自动发现并使用 MCP Server 提供的工具
response = agent.run("列出我的 GitHub 仓库")
bash
# 安装 GitHub MCP Server
npm install -g @modelcontextprotocol/server-github

# 配置 GitHub Token
export GITHUB_TOKEN=your_github_token
python
from claude_agent_sdk import ClaudeAgent, MCPClient

# 连接 GitHub MCP Server
github_mcp = MCPClient(
    command="npx",
    args=["-y", "@modelcontextprotocol/server-github"],
)

agent = ClaudeAgent(
    model="claude-sonnet-4-20250514",
    mcp_clients=[github_mcp],
)

# Agent 可以:
# - 列出仓库
# - 创建 Issue
# - 提交 Pull Request
# - 查看 CI 状态
# - 等等
response = agent.run("在我的 awesome-project 仓库创建一个 Issue,标题是 'Bug: 修复登录问题'")

💡 一句话理解

MCP 是 Agent 工具生态的未来。优先使用 MCP,可以让你的 Agent 立即获得 10,000+ 工具的支持。

⚠️ 常见踩坑

MCP Server 的质量参差不齐。在使用第三方 MCP Server 前,先审查其代码和权限要求。

五、生产部署最佳实践

将 Claude Agent SDK 从开发环境带到生产环境,需要考虑:成本、性能、安全、可观测性

1. 成本控制

Claude Agent SDK 的成本主要来自 LLM API 调用。一个复杂的 Agent 任务可能涉及 10+ 次 LLM 调用,成本可能迅速累积。

成本优化策略:

  • 使用合适的模型:简单任务用 Haiku(便宜、快),复杂任务用 Sonnet/Opus(贵、强)
  • 限制 max_turns:避免 Agent 进入无限循环
  • 缓存常见响应:对于重复性问题,直接返回缓存结果
  • 批量处理:将多个小任务合并为一个大任务,减少 LLM 调用次数

2. 性能优化

Agent 的性能瓶颈通常是 LLM 调用延迟。一次 LLM 调用可能需要 1-5 秒,多次调用会累积。

性能优化策略:

  • 流式输出:使用 stream=True 实时返回中间结果
  • 并行工具调用:如果多个工具调用之间没有依赖,可以并行执行
  • 上下文压缩:定期清理消息历史,只保留关键信息

3. 安全加固

生产环境的安全要求远高于开发环境。

安全加固清单:

  • 最小权限原则:只授予 Agent 完成任务所需的最小权限
  • 沙箱环境:在 Docker 容器或虚拟机中运行 Agent
  • 输入验证:验证用户输入,防止提示注入攻击
  • 输出过滤:过滤 Agent 输出,防止泄露敏感信息
  • 审计日志:记录所有工具调用,包括被拒绝的调用
  • 速率限制:限制 Agent 的 API 调用频率,防止滥用

4. 可观测性

生产环境的 Agent 需要可观测性——你需要知道 Agent 在做什么、花了多少钱、出了什么错。

可观测性方案:

5. 错误处理

Agent 可能遇到各种错误:LLM API 超时、工具调用失败、权限被拒绝等。

错误处理策略:

  • 重试:对于临时性错误(网络超时),自动重试
  • 降级:如果主模型不可用,切换到备用模型
  • 告警:对于严重错误(权限被拒绝、工具失败),发送告警

6. 部署架构

生产环境的 Agent 部署架构:用户请求 → API Gateway → Agent Service(Docker)→ Claude API,Agent Service 同时连接 MCP Server(本地/远程),底层对接 数据库/文件系统/外部 API

关键考虑:

  • 无状态:Agent Service 应该是无状态的,便于水平扩展
  • 会话管理:使用 Redis 或数据库存储会话状态
  • 资源限制:为每个 Agent 实例设置 CPU、内存限制
  • 健康检查:实现健康检查端点,便于 Kubernetes 管理
python
from claude_agent_sdk import ClaudeAgent, Permission, Hook, RetryPolicy
from opentelemetry import trace
import logging

# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

# 配置 OpenTelemetry
tracer = trace.get_tracer("production-agent")

# 审计日志 Hook
def audit_hook(event, data):
    logger.info(f"[AUDIT] {event}: {data}")
    if event == "pre_tool_call":
        span = tracer.start_span(f"tool.{data['tool_name']}")
        span.set_attribute("tool.input", str(data['tool_args']))
    elif event == "post_tool_call":
        span = trace.get_current_span()
        span.set_attribute("tool.output", str(data['tool_result']))
        span.end()

# 严格的权限规则
permissions = [
    Permission(
        tool="read_file",
        condition=lambda args: args["path"].startswith("/data/input/"),
        require_approval=False,
    ),
    Permission(
        tool="write_file",
        condition=lambda args: args["path"].startswith("/data/output/"),
        require_approval=False,
    ),
    Permission(tool="execute_shell", allow=False),
    Permission(tool="delete_file", allow=False),
]

# 生产级 Agent 配置
agent = ClaudeAgent(
    model="claude-sonnet-4-20250514",
    system_prompt="你是一个生产级 AI Agent。遵循最小权限原则,避免不必要的工具调用。",
    tools=[...],
    permissions=permissions,
    max_turns=10,
    timeout=300,
    retry_policy=RetryPolicy(
        max_retries=3,
        retry_on=[TimeoutError, ConnectionError],
        backoff_factor=2,
    ),
    fallback_model="claude-haiku-3-5-20241022",
    hooks=[
        Hook(event="pre_tool_call", handler=lambda data: audit_hook("pre_tool_call", data)),
        Hook(event="post_tool_call", handler=lambda data: audit_hook("post_tool_call", data)),
    ],
    audit_log={
        "enabled": True,
        "log_file": "/var/log/agent/audit.log",
        "log_level": "INFO",
    },
)
python
# 成本优化示例
agent = ClaudeAgent(
    model="claude-haiku-3-5-20241022",  # 使用更便宜的模型
    max_turns=5,  # 限制工具调用轮次
    system_prompt="简洁回答,避免不必要的工具调用。",  # 引导模型节省 token
)
python
# 流式输出示例
for chunk in agent.run("写一篇长文", stream=True):
    print(chunk, end="", flush=True)
python
# 生产环境安全配置
agent = ClaudeAgent(
    model="claude-sonnet-4-20250514",
    tools=[...],
    permissions=[...],  # 严格的权限规则
    max_turns=10,
    timeout=300,  # 5 分钟超时
    # 审计日志
    audit_log={
        "enabled": True,
        "log_file": "/var/log/agent/audit.log",
        "log_level": "INFO",
    },
)
python
from claude_agent_sdk import ClaudeAgent, Hook
from opentelemetry import trace

tracer = trace.get_tracer("agent-observability")

def otel_hook(event, data):
    if event == "pre_tool_call":
        span = tracer.start_span(f"tool.{data['tool_name']}")
        span.set_attribute("tool.input", str(data['tool_args']))
    elif event == "post_tool_call":
        span = trace.get_current_span()
        span.set_attribute("tool.output", str(data['tool_result']))
        span.end()

agent = ClaudeAgent(
    model="claude-sonnet-4-20250514",
    tools=[...],
    hooks=[
        Hook(event="pre_tool_call", handler=lambda data: otel_hook("pre_tool_call", data)),
        Hook(event="post_tool_call", handler=lambda data: otel_hook("post_tool_call", data)),
    ],
)
python
from claude_agent_sdk import ClaudeAgent, RetryPolicy

agent = ClaudeAgent(
    model="claude-sonnet-4-20250514",
    tools=[...],
    retry_policy=RetryPolicy(
        max_retries=3,
        retry_on=[TimeoutError, ConnectionError],
        backoff_factor=2,
    ),
    fallback_model="claude-haiku-3-5-20241022",  # 备用模型
)

💡 一句话理解

生产环境的 Agent 需要可观测性。从第一天就集成 OpenTelemetry 或 Langfuse,不要等到出问题。

⚠️ 常见踩坑

永远不要在 Agent 代码中硬编码 API 密钥。使用环境变量或密钥管理服务(如 AWS Secrets Manager、HashiCorp Vault)。

六、与其他框架的对比

2026 年 6 月,六大 Agent 框架各有所长。

框架 设计哲学 最适合 学习曲线 生产就绪
Claude Agent SDK Claude Code 运行时即服务 编码、复杂工具调用 中等 ✅ 是
LangGraph 图状态机 复杂工作流、多 Agent ✅ 是
CrewAI 角色扮演 多 Agent 协作 ✅ 是
OpenAI Agents SDK OpenAI 原生 OpenAI 生态 ✅ 是
Google ADK Google 原生 Google Cloud 中等 ✅ 是
Mastra TypeScript 优先 Web 开发 ⚠️ 早期

Claude Agent SDK vs LangGraph

  • Claude Agent SDK:更简单,开箱即用,但与 Claude 绑定
  • LangGraph:更灵活,支持任何模型,但需要自己设计图结构

选择建议:

  • 如果你主要用 Claude,且需要强大的工具调用能力 → Claude Agent SDK
  • 如果你需要复杂的多 Agent 工作流,且想支持多个模型 → LangGraph
  • 如果你想快速原型,且团队熟悉角色扮演 → CrewAI
  • 如果你全栈 OpenAI → OpenAI Agents SDK
  • 如果你在 Google Cloud → Google ADK
  • 如果你是 TypeScript/Web 开发 → Mastra

Claude Agent SDK 的独特优势:

  1. Claude Code 运行时:经过数十万开发者验证的 Agent 循环
  2. 内置工具系统:文件读写、代码执行、Shell 命令开箱即用
  3. 权限系统:生产级的安全模型
  4. MCP 原生支持:10,000+ 现成工具

Claude Agent SDK 的局限:

  1. 与 Claude 绑定:不能用于其他模型
  2. 学习曲线:比 CrewAI、OpenAI Agents SDK 复杂
  3. 成本:Claude API 的价格相对较高

结论:

Claude Agent SDK 不是「最好的」框架,但它是「最适合某些场景」的框架。如果你的场景是:

  • 编码 Agent
  • 需要强大工具调用的复杂任务
  • 需要生产级安全和权限控制
  • 主要使用 Claude 模型

那么 Claude Agent SDK 是最佳选择。

图表加载中…

💡 一句话理解

没有「最好的」框架,只有「最适合的」框架。根据你的场景、团队技能、模型偏好选择。

⚠️ 常见踩坑

不要同时使用多个框架。选择一个,深入学习,只有在真正需要时才考虑切换。

结论:Claude Agent SDK 的定位与未来

Claude Agent SDK 在 2026 年的 Agent 生态中占据独特位置。

它不是最灵活的(LangGraph 更灵活),不是最简单的(CrewAI 更简单),不是最便宜的(Smolagents 更便宜)。但它是最成熟的编码 Agent 运行时,并且正在向通用 Agent 运行时进化。

Claude Agent SDK 的核心优势:

  1. Claude Code 运行时:经过数十万开发者验证
  2. 内置工具系统:文件、代码、Shell 开箱即用
  3. 权限系统:生产级安全
  4. MCP 原生支持:10,000+ 工具生态

Claude Agent SDK 的未来方向:

  • 多模态支持:支持图像、音频输入输出
  • 更长的上下文:支持 1M+ token 上下文
  • 更好的成本控制:提供更细粒度的成本优化选项
  • 企业级功能:SSO、审计日志、合规认证

如果你正在构建 Agent,Claude Agent SDK 值得一试。 特别是如果你的场景是编码、复杂工具调用、或需要生产级安全控制。

下一步:

  1. 安装 Claude Agent SDK
  2. 构建你的第一个 Agent
  3. 集成 MCP Server
  4. 部署到生产环境

祝你好运!

  • Claude Agent SDK 是 Claude Code 运行时的可编程版本

  • 核心概念:Agent 循环、工具、Hook、子 Agent、权限系统

  • 权限系统是生产级安全的关键

  • MCP 集成让 Agent 立即获得 10,000+ 工具支持

  • 生产部署需要考虑成本、性能、安全、可观测性

  • 与其他框架相比,Claude Agent SDK 最适合编码和复杂工具调用场景

💡 一句话理解

Claude Agent SDK 的学习曲线比 CrewAI 陡峭,但比 LangGraph 平缓。投入 1-2 天学习,可以获得强大的回报。

⚠️ 常见踩坑

Claude Agent SDK 与 Claude 模型绑定。如果你需要支持多个模型,考虑 LangGraphCrewAI