Claude Agent SDK for Python 架构设计
目录
执行摘要
Claude Agent SDK for Python 是一个用于与 Claude Code 交互的高级 Python 软件开发工具包。该 SDK 提供了两种主要交互模式:
- 一次性查询模式 (
query()函数):适用于简单的、无状态的问答场景 - 交互式会话模式 (
ClaudeSDKClient类):适用于需要双向通信、状态管理和实时交互的场景
关键特性
- MCP (Model Context Protocol) 服务器支持:支持进程内和外部 MCP 服务器
- 钩子 (Hooks) 系统:提供 11 种不同的钩子事件用于生命周期管理
- 子代理 (Subagents) 支持:可定义和使用具有特定工具集的自定义代理
- 权限控制:灵活的工具权限管理机制
- 错误恢复:完善的错误处理和重试机制
技术栈
- 异步框架:anyio (支持 asyncio 和 trio)
- 子进程管理:通过 Claude Code CLI 进行通信
- 类型安全:完整的类型注解和数据类定义
- MCP 集成:兼容 MCP (Model Context Protocol) 规范
系统概述
系统定位
Claude Agent SDK 作为 Python 应用与 Claude Code CLI 之间的桥梁,提供了高层抽象接口,使开发者能够轻松集成 Claude 的 AI 能力到自己的应用中。
核心设计理念
- 分层抽象:提供从简单到复杂的多层次 API
- 类型安全:完整的类型注解支持
- 异步优先:所有 I/O 操作都是异步的
- 可扩展性:通过钩子和 MCP 服务器支持自定义扩展
系统架构
整体架构图
包结构
src/claude_agent_sdk/
├── __init__.py # 公共 API 导出
├── _cli_version.py # CLI 版本信息
├── _errors.py # 错误类定义
├── _version.py # SDK 版本信息
├── client.py # ClaudeSDKClient 类
├── query.py # query() 函数
├── types.py # 类型定义
└── _internal/
├── __init__.py
├── client.py # InternalClient 实现
├── message_parser.py # 消息解析器
├── query.py # Query 控制协议处理
├── session_mutations.py # 会话变更操作
├── sessions.py # 会话列表和查询
└── transport/
├── __init__.py
└── subprocess_cli.py # 子进程 CLI 传输实现
组件关系图
核心组件详解
1. 公共 API 层
1.1 query() 函数 - 一次性查询
位置: src/claude_agent_sdk/query.py
用途: 用于简单的、无状态的一次性查询场景。
特点:
- 单向通信:发送所有输入,接收所有 输出
- 自动管理连接生命周期
- 适合批量处理和自动化脚本
工作流程:
1.2 ClaudeSDKClient 类 - 交互式会话
位置: src/claude_agent_sdk/client.py
用途: 用于需要双向通信、状态管理和实时交互的场景。
核心方法:
| 方法 | 用途 |
|---|---|
connect() | 建立连接并初始化会话 |
query() | 发送新的查询 |
receive_messages() | 接收所有消息 |
receive_response() | 接收直到 ResultMessage |
interrupt() | 中断当前执行 |
set_permission_mode() | 动态更改权限模式 |
set_model() | 动态更改模型 |
get_mcp_status() | 获取 MCP 服务器状态 |
get_context_usage() | 获取上下文使用情况 |
disconnect() | 关闭连接 |
生命周期: