使用 Agent SDK 构建一个 AI 智能体,它可以读取您的代码、查找错误并修复它们,全程无需人工干预。
您将完成的内容:
创建项目文件夹
为此快速入门创建一个新目录:
mkdir my-agent && cd my-agent对于您自己的项目,您可以从任何文件夹运行 SDK;默认情况下,它可以访问该目录及其子目录中的文件。
安装 SDK
为您的语言安装 Agent SDK 包:
设置 API 密钥
从 Claude 控制台 获取 API 密钥,然后在项目目录中创建 .env 文件:
ANTHROPIC_API_KEY=your-api-keySDK 还支持通过第三方 API 提供商进行身份验证:
CLAUDE_CODE_USE_BEDROCK=1 环境变量并配置 AWS 凭证CLAUDE_CODE_USE_VERTEX=1 环境变量并配置 Google Cloud 凭证CLAUDE_CODE_USE_FOUNDRY=1 环境变量并配置 Azure 凭证有关详细信息,请参阅 Bedrock、Vertex AI 或 Azure AI Foundry 的设置指南。
除非事先获得批准,Anthropic 不允许第三方开发者为其产品(包括基于 Claude Agent SDK 构建的智能体)提供 claude.ai 登录或速率限制。请改用本文档中描述的 API 密钥身份验证方法。
本快速入门将引导您构建一个能够查找和修复代码错误的智能体。首先,您需要一个包含一些故意错误的文件供智能体修复。在 my-agent 目录中创建 utils.py 并粘贴以下代码:
def calculate_average(numbers):
total = 0
for num in numbers:
total += num
return total / len(numbers)
def get_user_name(user):
return user["name"].upper()这段代码有两个错误:
calculate_average([]) 会因除以零而崩溃get_user_name(None) 会因 TypeError 而崩溃如果您使用 Python SDK,请创建 agent.py;如果使用 TypeScript,请创建 agent.ts:
import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, ResultMessage
async def main():
# 智能体循环:在 Claude 工作时流式传输消息
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"], # Claude 可以使用的工具
permission_mode="acceptEdits" # 自动批准文件编辑
)
):
# 打印人类可读的输出
if isinstance(message, AssistantMessage):
for block in message.content:
if hasattr(block, "text"):
print(block.text) # Claude 的推理
elif hasattr(block, "name"):
print(f"Tool: {block.name}") # 正在调用的工具
elif isinstance(message, ResultMessage):
print(f"Done: {message.subtype}") # 最终结果
asyncio.run(main())这段代码有三个主要部分:
query:创建智能体循环的主入口点。它返回一个异步迭代器,因此您使用 async for 在 Claude 工作时流式传输消息。请参阅 Python 或 TypeScript SDK 参考中的完整 API。
prompt:您希望 Claude 做什么。Claude 会根据任务确定使用哪些工具。
options:智能体的配置。此示例使用 allowedTools 将 Claude 限制为 Read、Edit 和 Glob,并使用 permissionMode: "acceptEdits" 自动批准文件更改。其他选项包括 systemPrompt、mcpServers 等。查看 Python 或 TypeScript 的所有选项。
async for 循环在 Claude 思考、调用工具、观察结果并决定下一步操作时持续运行。每次迭代都会产生一条消息:Claude 的推理、工具调用、工具结果或最终结果。SDK 处理编排(工具执行、上下文管理、重试),因此您只需消费流即可。当 Claude 完成任务或遇到错误时,循环结束。
循环内的消息处理会过滤出人类可读的输出。如果不进行过滤,您会看到原始消息对象,包括系统初始化和内部状态,这对调试有用,但在其他情况下会产生噪音。
此示例使用流式传输来实时显示进度。如果您不需要实时输出(例如,用于后台作业或 CI 管道),您可以一次性收集所有消息。有关详细信息,请参阅流式传输与单轮模式。
您的智能体已准备就绪。使用以下命令运行它:
运行后,检查 utils.py。您会看到处理空列表和空用户的防御性代码。您的智能体自主完成了以下操作:
utils.py 以理解代码这就是 Agent SDK 的不同之处:Claude 直接执行工具,而不是要求您来实现它们。
如果您看到"API key not found",请确保您已在 .env 文件或 shell 环境中设置了 ANTHROPIC_API_KEY 环境变量。有关更多帮助,请参阅完整故障排除指南。
现在您的智能体已设置好,尝试一些不同的提示:
"Add docstrings to all functions in utils.py""Add type hints to all functions in utils.py""Create a README.md documenting the functions in utils.py"您可以通过更改选项来修改智能体的行为。以下是一些示例:
添加网络搜索功能:
options=ClaudeAgentOptions(
allowed_tools=["Read", "Edit", "Glob", "WebSearch"],
permission_mode="acceptEdits"
)为 Claude 提供自定义系统提示:
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"
)启用 Bash 后,尝试:"Write unit tests for utils.py, run them, and fix any failures"
工具 控制您的智能体可以做什么:
| 工具 | 智能体可以做什么 |
|---|---|
Read、Glob、Grep | 只读分析 |
Read、Edit、Glob | 分析和修改代码 |
Read、Edit、Bash、Glob、Grep | 完全自动化 |
权限模式 控制您需要多少人工监督:
| 模式 | 行为 | 使用场景 |
|---|---|---|
acceptEdits | 自动批准文件编辑,其他操作需要询问 | 受信任的开发工作流 |
bypassPermissions | 无需提示即可运行 | CI/CD 管道、自动化 |
default | 需要 canUseTool 回调来处理审批 | 自定义审批流程 |
上面的示例使用 acceptEdits 模式,该模式自动批准文件操作,使智能体可以在没有交互式提示的情况下运行。如果您想提示用户进行审批,请使用 default 模式并提供一个收集用户输入的 canUseTool 回调。如需更多控制,请参阅权限。
现在您已经创建了第一个智能体,了解如何扩展其功能并根据您的用例进行定制:
Was this page helpful?