跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonNode.jsAI

Python 版 Claude Code SDK 实战:从安装到自定义工具开发

Python 版 Claude Code SDK 提供了与 Claude AI 助手集成的完整解决方案。内容涵盖环境搭建、基础查询调用、内置工具权限控制及自定义 MCP 服务器开发。重点解析了钩子机制、流模式处理及异常捕获策略,帮助开发者快速构建具备工具执行能力的 AI 应用。

DevOpsTeam发布于 2026/3/29更新于 2026/10/2699 浏览

Python 版 Claude Code SDK 实战:从安装到自定义工具开发

claude-code-sdk-python 是专为 Claude Agent 设计的 Python 开发工具包,它让开发者能轻松将 Claude AI 助手集成到自己的应用中。这篇指南会从环境搭建讲起,一直深入到高级自定义工具的开发细节。

环境准备与安装

在开始之前,确保你的环境满足以下要求:

  • Python 3.10+
  • Node.js(用于运行 Claude Code CLI)
  • Claude Code 2.0.0+ 版本

安装过程很简单,先在终端通过 pip 安装 SDK:

pip install claude-agent-sdk 

接着全局安装 Claude Code CLI:

npm install -g @anthropic-ai/claude-code 

快速上手

基础查询

最基础的用法就是发送一个查询并获取流式响应。注意这里使用了 anyio 来管理异步事件循环。

import anyio
from claude_agent_sdk import query

async def main():
    async for message in query(prompt="What is 2 + 2?"):
        print(message)

anyio.run(main)

如果你需要更灵活的控制,比如设置系统提示或限制对话轮数,可以使用 ClaudeAgentOptions 配置对象。

from claude_agent_sdk import query, ClaudeAgentOptions

options = ClaudeAgentOptions(
    system_prompt="You are a helpful assistant",
    max_turns=1
)

async for message in query(prompt="Tell me a joke", options=options):
    print(message)

核心功能解析

SDK 的核心在于 query() 函数和 ClaudeSDKClient 类。前者适合简单的单次交互,后者则支持双向对话、自定义工具注册以及钩子(Hooks)机制,适合构建复杂的 Agent 应用。

内置工具的使用

要让 Claude 调用文件读写或执行命令等内置能力,需要在选项中显式声明允许的工具列表。

options = ClaudeAgentOptions(
    allowed_tools=[, , ],
    permission_mode=  
)

  message  query(
    prompt=,
    options=options
):
    
    
"Read"
"Write"
"Bash"
'acceptEdits'
# 自动接受文件编辑
async
for
in
"Create a hello.py file"
# 处理工具使用和结果
pass

权限控制与钩子

对于敏感操作,比如 Bash 命令执行,我们可以通过钩子进行细粒度拦截。例如,你可以阻止包含特定危险模式的命令。

async def check_bash_command(input_data, tool_use_id, context):
    tool_name = input_data["tool_name"]
    tool_input = input_data["tool_input"]
    
    if tool_name != "Bash":
        return {}
        
    command = tool_input.get("command", "")
    block_patterns = ["rm -rf", "foo.sh"]
    
    for pattern in block_patterns:
        if pattern in command:
            return {
                "hookSpecificOutput": {
                    "hookEventName": "PreToolUse",
                    "permissionDecision": "deny",
                    "permissionDecisionReason": f"Command contains invalid pattern: {pattern}",
                }
            }
    return {}

options = ClaudeAgentOptions(
    allowed_tools=["Bash"],
    hooks={
        "PreToolUse": [
            HookMatcher(matcher="Bash", hooks=[check_bash_command]),
        ],
    }
)

自定义工具开发

这是 SDK 最强大的部分之一。你不需要启动额外的进程,可以直接在 Python 进程中定义 MCP 服务器,这样性能更好且部署更简单。

定义工具函数

使用 @tool 装饰器标记你的异步函数。参数类型注解会自动映射为 JSON Schema。

from typing import Any
from claude_agent_sdk import tool, create_sdk_mcp_server, ClaudeAgentOptions, ClaudeSDKClient

# 定义一个简单的问候工具
@tool("greet", "Greet a user", {"name": str})
async def greet_user(args):
    return {
        "content": [
            {"type": "text", "text": f"Hello, {args['name']}!"}
        ]
    }

# 创建 SDK MCP 服务器
server = create_sdk_mcp_server(
    name="my-tools",
    version="1.0.0",
    tools=[greet_user]
)

# 在客户端中注册并使用
options = ClaudeAgentOptions(
    mcp_servers={"tools": server},
    allowed_tools=["mcp__tools__greet"]
)

async with ClaudeSDKClient(options=options) as client:
    await client.query("Greet Alice")
    async for msg in client.receive_response():
        print(msg)

计算器工具示例

下面是一个完整的计算器工具集实现,展示了如何组合多个工具到一个服务器中。

from typing import Any
from claude_agent_sdk import tool, create_sdk_mcp_server

# 加法
@tool("add", "Add two numbers", {"a": float, "b": float})
async def add_numbers(args: dict[str, Any]) -> dict[str, Any]:
    result = args["a"] + args["b"]
    return {"content": [{"type": "text", "text": f"{args['a']} + {args['b']} = {result}"}]}

# 减法
@tool("subtract", "Subtract one number from another", {"a": float, "b": float})
async def subtract_numbers(args: dict[str, Any]) -> dict[str, Any]:
    result = args["a"] - args["b"]
    return {"content": [{"type": "text", "text": f"{args['a']} - {args['b']} = {result}"}]}

# 更多工具如 multiply, divide 等...

# 组装服务器
calculator = create_sdk_mcp_server(
    name="calculator",
    tools=[add_numbers, subtract_numbers]  # 加上其他运算工具
)

options = ClaudeAgentOptions(
    mcp_servers={"calc": calculator},
    allowed_tools=[
        "mcp__calc__add",
        "mcp__calc__subtract",
        # ... 其他工具 ID
    ],
)

错误处理与异常捕获

SDK 定义了多种异常类型,方便我们针对不同场景做处理。比如找不到 CLI、连接失败或进程退出等情况。

from claude_agent_sdk import (
    ClaudeSDKError,
    CLINotFoundError,
    CLIConnectionError,
    ProcessError,
    CLIJSONDecodeError,
)

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}")

高级特性

流模式处理

通过 ClaudeSDKClient 的上下文管理器,可以实时接收并处理 Claude 的流式响应,这对于提升用户体验很有帮助。

async with ClaudeSDKClient(options=options) as client:
    await client.query("Tell me a story")
    async for message in client.receive_response():
        # 实时处理消息
        print(message)

混合 MCP 服务器

你甚至可以同时加载进程内 SDK 服务器和外部子进程服务器,实现更复杂的架构。

options = ClaudeAgentOptions(
    mcp_servers={
        "internal": sdk_server,  # 进程内 SDK 服务器
        "external": {            # 外部子进程服务器
            "type": "stdio",
            "command": "external-server"
        }
    }
)

迁移与总结

如果你是从旧版 SDK(<0.1.0)升级,需要注意一些命名变更,比如 ClaudeCodeOptions 已重命名为 ClaudeAgentOptions,并且系统提示配置方式有所调整。

总的来说,claude-code-sdk-python 为 Python 开发者提供了一套完善的工具链。无论是简单的问答集成,还是复杂的自定义工具编排,这套 SDK 都能胜任。掌握这些内容后,你就能构建出真正具备自主执行能力的 AI 应用了。

目录

  1. Python 版 Claude Code SDK 实战:从安装到自定义工具开发
  2. 环境准备与安装
  3. 快速上手
  4. 基础查询
  5. 核心功能解析
  6. 内置工具的使用
  7. 权限控制与钩子
  8. 自定义工具开发
  9. 定义工具函数
  10. 定义一个简单的问候工具
  11. 创建 SDK MCP 服务器
  12. 在客户端中注册并使用
  13. 计算器工具示例
  14. 加法
  15. 减法
  16. 更多工具如 multiply, divide 等...
  17. 组装服务器
  18. 错误处理与异常捕获
  19. 高级特性
  20. 流模式处理
  21. 混合 MCP 服务器
  22. 迁移与总结

更多推荐文章

查看全部
  • 基于 Milvus 混合检索的云厂商文档智能问答系统:Java SpringBoot 实现
  • 基于 Dify、大模型与智能体构建私有化智能助手指南
  • Python 基础语法与常用命令详解
  • CSS 7球旋转加载动画:实现与避坑
  • GitHub 新手入门指南:注册、仓库与版本控制
  • Flutter eip55 库在 OpenHarmony 上的以太坊地址校验适配
  • Flutter 集成 BIP340 实现鸿蒙端 Schnorr 签名实战
  • 基于 Spring Boot 与 Vue 的高校校园招聘系统设计与实现
  • Dart 设计模式:原型模式
  • 前端可访问性:语义化 HTML 与 ARIA 最佳实践
  • 10 款常用网络安全渗透测试工具详解
  • Java Web 学习:前端 HTML 基础与常用标签
  • 用 ComfyUI 搭图像生成流水线:从节点到工作流
  • Virt A Mate (VAM) v1.22 中文汉化整合
  • Claude Code 效率提升指南:Superpower 与 Mem 插件实战
  • Kali Linux 系统安装与基础配置指南
  • Kimi 视觉思考版实测:推理与多模态能力解析
  • 前端部署:从开发到生产的最后一公里
  • Qoder 与通义灵码 IDE 功能对比及安装指南
  • OpenClaw 深度调优:5 步让 AI 助手真正“能干活”

相关免费在线工具

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online