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
实例
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"]), ): ifhasattr(message,"result"): print(message.result)
asyncio.run(main())
TypeScript
实例
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:
实例
def calculate_average(numbers):
total =0 for num in numbers:
total += num return total / len(numbers)# Bug: 空列表时除以 0
def get_user_name(user): returnuser["name"].upper()# Bug: user 为 None 时报 TypeError
编写 Agent
创建 agent.py :
实例
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",# 自动批准文件编辑 ), ): ifisinstance(message, AssistantMessage): for block in message.content: ifhasattr(block,"text"): print(block.text)# Claude 的推理过程 elifhasattr(block,"name"): print(f"Tool: {block.name}")# 正在调用的工具 elifisinstance(message, ResultMessage): print(f"Done: {message.subtype}")# 最终结果
asyncio.run(main())
运行
python agent.py
运行后查看 utils.py ,你会看到 Agent 自主完成了以下操作:
读取 了 utils.py 文件
分析 了代码逻辑,识别出可能导致崩溃的边界情况
编辑 了文件,添加了完善的错误处理
核心概念解析
函数 —— Agent 循环的入口
query 是创建 Agent 循环的主要入口点,返回一个异步迭代器,因此你使用 async for 来实时流式获取 Claude 工作时产生的消息。循环在 Claude 完成任务或遇到错误时结束。SDK 负责编排(工具执行、上下文管理、重试),你只需消费这个消息流。
options =ClaudeAgentOptions(
allowed_tools=["Read","Edit","Glob"],
permission_mode="acceptEdits",
system_prompt="You are a senior Python developer. Always follow PEP 8 style guidelines.",)
允许执行终端命令
options =ClaudeAgentOptions(
allowed_tools=["Read","Edit","Glob","Bash"],
permission_mode="acceptEdits")# 可以尝试:# prompt="Write unit tests for utils.py, run them, and fix any failures"
from claude_agent_sdk import(ClaudeSDKError,# 基础错误CLINotFoundError,# Claude Code 未安装CLIConnectionError,# 连接问题ProcessError,# 进程失败CLIJSONDecodeError,# JSON 解析失败)try:
async for message in query(prompt="Hello"):passexceptCLINotFoundError:print("请先安装 Claude Code")exceptProcessErroras e:print(f"进程失败,退出码:{e.exit_code}")exceptCLIJSONDecodeErroras e:print(f"响应解析失败:{e}")
Agent SDK vs. 其他 Claude 工具
Agent SDK
Client SDK(Messages API)
Claude Code CLI
使用方式
Python/TypeScript 库
HTTP API 调用
终端命令行工具
工具执行
内置,自动执行
需手动实现
内置,交互式
适用场景
构建自主 Agent、应用集成
一般 LLM 调用
直接编码辅助
状态管理
有状态,支持会话
无状态
有状态,交互式
SDK 功能对照表
SDK 还支持 Claude Code 的基于文件系统的配置。若要使用这些功能,需在选项中设置 setting_sources=["project"] (Python)或 settingSources: ['project'] (TypeScript)。