Claude Code SDK
使用 Claude Code SDK 构建自定义 AI 代理
为什么使用 Claude Code SDK?
Claude Code SDK 提供了构建生产就绪代理所需的所有构建块:
- 优化的 Claude 集成:自动提示缓存和性能优化
- 丰富的工具生态系统:文件操作、代码执行、网络搜索和 MCP 扩展性
- 高级权限:对代理功能的细粒度控制
- 生产必需品:内置错误处理、会话管理和监控
您可以使用 SDK 构建什么?
以下是您可以创建的一些示例代理类型:
编码代理:
- 诊断和修复生产问题的 SRE 代理
- 审计代码漏洞的安全审查机器人
- 分类事件的值班工程助手
- 执行风格和最佳实践的代码审查代理
业务代理:
- 审查合同和合规性的法律助手
- 分析报告和预测的财务顾问
- 解决技术问题的客户支持代理
- 为营销团队提供的内容创建助手
SDK 目前在 TypeScript 和 Python 中可用,并提供命令行界面 (CLI) 用于快速原型设计。
快速开始
在 5 分钟内让您的第一个代理运行:
安装 SDK
从 NPM 安装 @anthropic-ai/claude-code
:
从 NPM 安装 @anthropic-ai/claude-code
:
从 NPM 安装 @anthropic-ai/claude-code
:
从 PyPI 安装 claude-code-sdk
并从 NPM 安装 @anthropic-ai/claude-code
:
(可选)安装 IPython 用于交互式开发:
设置您的 API 密钥
从 Anthropic Console 获取您的 API 密钥并设置 ANTHROPIC_API_KEY
环境变量:
创建您的第一个代理
创建以下示例代理之一:
运行代理
将上面的命令直接复制并粘贴到您的终端中。
将上面的命令直接复制并粘贴到您的终端中。
- 设置项目:
-
在您的 package.json 中添加
"type": "module"
-
将上面的代码保存为
legal-agent.ts
,然后运行:
上面的每个示例都创建了一个工作代理,它将:
- 使用 Claude 的推理能力分析提示
- 规划解决问题的多步骤方法
- 使用文件操作、bash 命令和网络搜索等工具执行操作
- 基于分析提供可操作的建议
核心用法
概述
Claude Code SDK 允许您从应用程序中以非交互模式与 Claude Code 进行接口。
先决条件
- Node.js 18+
- 来自 NPM 的
@anthropic-ai/claude-code
基本用法
Claude Code 的主要命令行界面是 claude
命令。使用 --print
(或 -p
)标志以非交互模式运行并打印最终结果:
配置
SDK 利用 Claude Code 中可用的所有 CLI 选项。以下是 SDK 使用的关键选项:
标志 | 描述 | 示例 |
---|---|---|
--print , -p | 以非交互模式运行 | claude -p "query" |
--output-format | 指定输出格式(text 、json 、stream-json ) | claude -p --output-format json |
--resume , -r | 通过会话 ID 恢复对话 | claude --resume abc123 |
--continue , -c | 继续最近的对话 | claude --continue |
--verbose | 启用详细日志记录 | claude --verbose |
--append-system-prompt | 附加到系统提示(仅与 --print 一起使用) | claude --append-system-prompt "自定义指令" |
--allowedTools | 允许工具的空格分隔列表,或 逗号分隔工具列表的字符串 | claude --allowedTools mcp__slack mcp__filesystem claude --allowedTools "Bash(npm install),mcp__filesystem" |
--disallowedTools | 拒绝工具的空格分隔列表,或 逗号分隔工具列表的字符串 | claude --disallowedTools mcp__splunk mcp__github claude --disallowedTools "Bash(git commit),mcp__github" |
--mcp-config | 从 JSON 文件加载 MCP 服务器 | claude --mcp-config servers.json |
--permission-prompt-tool | 用于处理权限提示的 MCP 工具(仅与 --print 一起使用) | claude --permission-prompt-tool mcp__auth__prompt |
有关 CLI 选项和功能的完整列表,请参阅 CLI 参考 文档。
先决条件
- Node.js 18+
- 来自 NPM 的
@anthropic-ai/claude-code
基本用法
Claude Code 的主要命令行界面是 claude
命令。使用 --print
(或 -p
)标志以非交互模式运行并打印最终结果:
配置
SDK 利用 Claude Code 中可用的所有 CLI 选项。以下是 SDK 使用的关键选项:
标志 | 描述 | 示例 |
---|---|---|
--print , -p | 以非交互模式运行 | claude -p "query" |
--output-format | 指定输出格式(text 、json 、stream-json ) | claude -p --output-format json |
--resume , -r | 通过会话 ID 恢复对话 | claude --resume abc123 |
--continue , -c | 继续最近的对话 | claude --continue |
--verbose | 启用详细日志记录 | claude --verbose |
--append-system-prompt | 附加到系统提示(仅与 --print 一起使用) | claude --append-system-prompt "自定义指令" |
--allowedTools | 允许工具的空格分隔列表,或 逗号分隔工具列表的字符串 | claude --allowedTools mcp__slack mcp__filesystem claude --allowedTools "Bash(npm install),mcp__filesystem" |
--disallowedTools | 拒绝工具的空格分隔列表,或 逗号分隔工具列表的字符串 | claude --disallowedTools mcp__splunk mcp__github claude --disallowedTools "Bash(git commit),mcp__github" |
--mcp-config | 从 JSON 文件加载 MCP 服务器 | claude --mcp-config servers.json |
--permission-prompt-tool | 用于处理权限提示的 MCP 工具(仅与 --print 一起使用) | claude --permission-prompt-tool mcp__auth__prompt |
有关 CLI 选项和功能的完整列表,请参阅 CLI 参考 文档。
先决条件
- Node.js 18+
- 来自 NPM 的
@anthropic-ai/claude-code
要查看 TypeScript SDK 源代码,请访问 NPM 上的 @anthropic-ai/claude-code
页面。
基本用法
通过 TypeScript SDK 的主要接口是 query
函数,它返回一个异步迭代器,在消息到达时流式传输消息:
配置
TypeScript SDK 接受命令行支持的所有参数,以及以下附加选项:
参数 | 描述 | 默认值 |
---|---|---|
abortController | 中止控制器 | new AbortController() |
cwd | 当前工作目录 | process.cwd() |
executable | 要使用的 JavaScript 运行时 | 在 Node.js 中运行时为 node ,在 Bun 中运行时为 bun |
executableArgs | 传递给可执行文件的参数 | [] |
pathToClaudeCodeExecutable | Claude Code 可执行文件的路径 | 与 @anthropic-ai/claude-code 一起提供的可执行文件 |
permissionMode | 会话的权限模式 | "default" (选项:"default" 、"acceptEdits" 、"plan" 、"bypassPermissions" ) |
先决条件
- Python 3.10+
- 来自 PyPI 的
claude-code-sdk
- Node.js 18+
- 来自 NPM 的
@anthropic-ai/claude-code
要查看 Python SDK 源代码,请参阅 claude-code-sdk
仓库。
对于交互式开发,请使用 IPython:pip install ipython
基本用法
Python SDK 提供两个主要接口:
ClaudeSDKClient
类(推荐)
最适合流式响应、多轮对话和交互式应用程序:
SDK 还支持传递结构化消息和图像输入:
此页面上的 Python 示例使用 asyncio
,但您也可以使用 anyio
。
query
函数
用于简单的一次性查询:
配置
由于 Python SDK 通过 ClaudeCodeOptions
类接受命令行支持的所有参数。
身份验证
Anthropic API 密钥
对于基本身份验证,从 Anthropic Console 检索 Anthropic API 密钥并设置 ANTHROPIC_API_KEY
环境变量,如快速开始中所示。
第三方 API 凭据
SDK 还支持通过第三方 API 提供商进行身份验证:
- Amazon Bedrock:设置
CLAUDE_CODE_USE_BEDROCK=1
环境变量并配置 AWS 凭据 - Google Vertex AI:设置
CLAUDE_CODE_USE_VERTEX=1
环境变量并配置 Google Cloud 凭据
有关第三方提供商的详细配置说明,请参阅 Amazon Bedrock 和 Google Vertex AI 文档。
多轮对话
对于多轮对话,您可以恢复对话或从最近的会话继续:
使用计划模式
计划模式允许 Claude 分析代码而不进行修改,对代码审查和规划更改很有用。
计划模式限制编辑、文件创建和命令执行。有关详细信息,请参阅权限模式。
自定义系统提示
系统提示定义您的代理的角色、专业知识和行为。这是您指定要构建的代理类型的地方:
高级用法
通过 MCP 的自定义工具
模型上下文协议 (MCP) 让您为代理提供自定义工具和功能。这对于构建需要特定领域集成的专门代理至关重要。
示例代理工具配置:
用法示例:
使用 MCP 工具时,您必须使用 --allowedTools
标志明确允许它们。MCP 工具名称遵循模式 mcp__<serverName>__<toolName>
,其中:
serverName
是您的 MCP 配置文件中的键toolName
是该服务器提供的特定工具
这种安全措施确保 MCP 工具仅在明确允许时使用。
如果您只指定服务器名称(即 mcp__<serverName>
),将允许该服务器的所有工具。
不支持通配符模式(例如 mcp__go*
)。
自定义权限提示工具
可选地,使用 --permission-prompt-tool
传入一个 MCP 工具,我们将使用它来检查用户是否授予模型调用给定工具的权限。当模型调用工具时,会发生以下情况:
- 我们首先检查权限设置:所有 settings.json 文件,以及传递给 SDK 的
--allowedTools
和--disallowedTools
;如果其中一个允许或拒绝工具调用,我们继续进行工具调用 - 否则,我们调用您在
--permission-prompt-tool
中提供的 MCP 工具
--permission-prompt-tool
MCP 工具传递工具名称和输入,并且必须返回带有结果的 JSON 字符串化负载。负载必须是以下之一:
实现示例:
使用说明:
- 使用
updatedInput
告诉模型权限提示改变了其输入;否则,将updatedInput
设置为原始输入,如上面的示例所示。例如,如果工具向用户显示文件编辑差异并让他们手动编辑差异,权限提示工具应该返回该更新的编辑。 - 负载必须是 JSON 字符串化的
输出格式
SDK 支持多种输出格式:
文本输出(默认)
JSON 输出
返回包括元数据的结构化数据:
响应格式:
流式 JSON 输出
在接收到每条消息时流式传输:
每个对话都以初始的 init
系统消息开始,然后是用户和助手消息列表,最后是带有统计信息的最终 result
系统消息。每条消息都作为单独的 JSON 对象发出。
消息模式
从 JSON API 返回的消息根据以下模式严格类型化:
我们将很快以 JSONSchema 兼容格式发布这些类型。我们对主要 Claude Code 包使用语义版本控制来传达此格式的重大更改。
Message
和 MessageParam
类型在 Anthropic SDK 中可用。例如,请参阅 Anthropic TypeScript 和 Python SDK。
输入格式
SDK 支持多种输入格式:
文本输入(默认)
流式 JSON 输入
通过 stdin
提供的消息流,其中每条消息代表用户轮次。这允许对话的多个轮次而无需重新启动 claude
二进制文件,并允许在模型处理请求时向模型提供指导。
每条消息都是一个 JSON ‘用户消息’ 对象,遵循与输出消息模式相同的格式。消息使用 jsonl 格式格式化,其中输入的每一行都是一个完整的 JSON 对象。流式 JSON 输入需要 -p
和 --output-format stream-json
。
目前这仅限于纯文本用户消息。
代理集成示例
SRE 事件响应机器人
自动化安全审查
多轮法律助手
Python 特定最佳实践
关键模式
IPython/Jupyter 提示
最佳实践
-
使用 JSON 输出格式进行响应的程序化解析:
-
优雅地处理错误 - 检查退出代码和 stderr:
-
使用会话管理在多轮对话中维护上下文
-
考虑超时用于长时间运行的操作:
-
尊重速率限制通过在多个请求之间添加延迟
相关资源
- CLI 用法和控制 - 完整的 CLI 文档
- GitHub Actions 集成 - 使用 Claude 自动化您的 GitHub 工作流程
- 常见工作流程 - 常见用例的分步指南