使用 Claude Code SDK 构建自定义 AI 代理
安装 SDK
@anthropic-ai/claude-code
:设置您的 API 密钥
ANTHROPIC_API_KEY
环境变量:创建您的第一个代理
运行代理
@anthropic-ai/claude-code
claude
命令。使用 --print
(或 -p
)标志以非交互模式运行并打印最终结果:标志 | 描述 | 示例 |
---|---|---|
--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 |
ANTHROPIC_API_KEY
环境变量,如快速开始中所示。
CLAUDE_CODE_USE_BEDROCK=1
环境变量并配置 AWS 凭据CLAUDE_CODE_USE_VERTEX=1
环境变量并配置 Google Cloud 凭据--allowedTools
标志明确允许它们。MCP 工具名称遵循模式 mcp__<serverName>__<toolName>
,其中:serverName
是您的 MCP 配置文件中的键toolName
是该服务器提供的特定工具mcp__<serverName>
),将允许该服务器的所有工具。不支持通配符模式(例如 mcp__go*
)。--permission-prompt-tool
传入一个 MCP 工具,我们将使用它来检查用户是否授予模型调用给定工具的权限。当模型调用工具时,会发生以下情况:
--allowedTools
和 --disallowedTools
;如果其中一个允许或拒绝工具调用,我们继续进行工具调用--permission-prompt-tool
中提供的 MCP 工具--permission-prompt-tool
MCP 工具传递工具名称和输入,并且必须返回带有结果的 JSON 字符串化负载。负载必须是以下之一:
updatedInput
告诉模型权限提示改变了其输入;否则,将 updatedInput
设置为原始输入,如上面的示例所示。例如,如果工具向用户显示文件编辑差异并让他们手动编辑差异,权限提示工具应该返回该更新的编辑。init
系统消息开始,然后是用户和助手消息列表,最后是带有统计信息的最终 result
系统消息。每条消息都作为单独的 JSON 对象发出。
Message
和 MessageParam
类型在 Anthropic SDK 中可用。例如,请参阅 Anthropic TypeScript 和 Python SDK。
stdin
提供的消息流,其中每条消息代表用户轮次。这允许对话的多个轮次而无需重新启动 claude
二进制文件,并允许在模型处理请求时向模型提供指导。
每条消息都是一个 JSON ‘用户消息’ 对象,遵循与输出消息模式相同的格式。消息使用 jsonl 格式格式化,其中输入的每一行都是一个完整的 JSON 对象。流式 JSON 输入需要 -p
和 --output-format stream-json
。
目前这仅限于纯文本用户消息。