Chapter 09
API 与模型集成
Claude Code 支持多个 API Provider,通过统一的客户端层实现流式调用、Thinking 模式和故障转移。
多 Provider 支持
Claude Code 不仅可以直连 Anthropic API,还支持多种云厂商的部署:
Anthropic 直连
默认 Provider。直接调用 Anthropic API。支持所有 Beta 功能(prompt caching, extended thinking)。
AWS Bedrock
通过 Amazon Bedrock 访问 Claude。使用 AWS 凭证认证。可能有功能差异。
Google Vertex AI
通过 Google Cloud Vertex AI 访问 Claude。使用 GCP 凭证认证。
Azure Foundry
通过 Azure 访问 Claude。使用 Azure 凭证认证。
Provider 选择逻辑在 src/utils/model/providers.ts:
// Provider 选择优先级 1. 环境变量 CLAUDE_CODE_PROVIDER 2. 配置文件 settings.json 3. CLI 参数 --provider 4. 默认: "anthropic"
API 客户端 (claude.ts)
核心 API 客户端位于 src/services/api/claude.ts,负责:
- 请求构建 — 组装 system prompt、messages、tools、betas 列表
- 流式调用 — 调用 Anthropic SDK 的 streaming endpoint
- 事件处理 — 解析
BetaRawMessageStreamEvent事件流 - 错误处理 — 速率限制、token 超限、网络错误
// API 调用核心 (简化) async function ask(params: AskParams) { const requestParams = { model: params.model, max_tokens: params.maxTokens, system: params.systemPrompt, // BetaSystemPromptBlock[] messages: params.messages, // 标准化后的消息 tools: params.tools, // 工具 schema 列表 stream: true, betas: [ 'prompt-caching-2024-07-31', 'extended-thinking-2025-04-14', // ... 更多 beta 功能 ], }; // 调用 Anthropic SDK return anthropic.messages.stream(requestParams); }
流式响应处理
API 返回的流式事件类型:
BetaRawMessageStreamEvent ├── message_start // 消息开始 (含 usage 信息) ├── content_block_start // 内容块开始 (text/tool_use/thinking) ├── content_block_delta // 内容增量 │ ├── text_delta // 文本增量 │ ├── input_json_delta // 工具输入 JSON 增量 │ └── thinking_delta // 思考内容增量 ├── content_block_stop // 内容块结束 └── message_stop // 消息结束 (含 stop_reason) // stop_reason 类型 'end_turn' // 正常结束 'tool_use' // 需要执行工具 'max_tokens' // 达到 token 限制
Extended Thinking
Extended Thinking 让模型在生成回答前先进行推理(chain-of-thought):
- Thinking blocks 作为
content_block在流式事件中传输 - 默认最大 10,000 tokens
- 三种模式:Adaptive (自动)、Explicit (手动)、Disabled
- Thinking 内容显示在 UI 中但不计入对话历史的"可见"部分
Fallback 策略
当主模型调用失败时,系统会自动切换到备用模型:
1
主模型调用失败
API 错误、速率限制、或模型不可用。
2
切换 Fallback Model
自动使用备用模型重试请求。抛出 FallbackTriggeredError。
3
记录分析事件
触发 tengu_model_fallback 分析事件,用于监控和统计。
Prompt Caching: Claude Code 利用 Anthropic 的 prompt caching 功能,将 System Prompt 作为可缓存的 block 传入。相同的 System Prompt 在多次调用中只需传输一次,显著减少 token 使用和延迟。Fork Agent 也利用此特性,传递父级的渲染 System Prompt 以复用缓存。