Skip to content

API 客户端

概述

Claude Code 的 API 客户端负责将对话消息发送到 Claude API 并处理流式响应。核心实现在 services/api/claude.ts 中。

Source: src/services/api/claude.ts

核心函数

queryModelWithStreaming()

Source: src/services/api/claude.ts:753-781

这是主查询循环 (query.ts) 调用的 API 函数:

typescript
export async function* queryModelWithStreaming({
  messages,
  systemPrompt,
  thinkingConfig,
  tools,
  signal,
  options,
}: {
  messages: Message[]
  systemPrompt: SystemPrompt
  thinkingConfig: ThinkingConfig
  tools: Tools
  signal: AbortSignal
  options: Options
}): AsyncGenerator<
  StreamEvent | AssistantMessage | SystemAPIErrorMessage,
  void
> {
  return yield* withStreamingVCR(messages, async function* () {
    yield* queryModel(messages, systemPrompt, thinkingConfig, tools, signal, options);
  });
}

关键点:

  • Generator 函数 — 逐步产出流式事件
  • VCR 包装withStreamingVCR() 用于测试录制/回放
  • 委托给 queryModel() — 实际的 API 调用逻辑

queryModel() — 内部实现

构建请求参数并调用 Anthropic SDK:

请求参数构建

API 请求包含以下核心字段:

字段来源说明
modeloptions.model模型 ID (如 claude-sonnet-4-20250514)
systemsystemPrompt系统提示词数组
messagesmessages对话历史
toolstools工具定义列表
max_tokens计算得出最大输出 token 数
streamtrue始终使用流式传输
betas根据功能启用的 Beta 功能

流式事件类型

API 返回的 BetaRawMessageStreamEvent 包含多种事件类型:

事件类型说明
message_start消息开始
content_block_start内容块开始(文本/工具调用)
content_block_delta内容块增量更新
content_block_stop内容块结束
message_delta消息级别更新(stop_reason 等)
message_stop消息结束

executeNonStreamingRequest()

Source: src/services/api/claude.ts:819-917

非流式请求函数,用于降级场景和辅助查询(如 autocompact、classifier):

typescript
export async function* executeNonStreamingRequest(
  clientOptions,
  retryOptions,
  paramsFromContext,
  onAttempt,
  captureRequest,
): AsyncGenerator<SystemAPIErrorMessage, BetaMessage>

重试与降级

withRetry 机制

API 调用内置重试逻辑:

模型降级

当主模型失败时,可以降级到 fallbackModel

typescript
// query.ts 中的降级处理
catch (error) {
  if (error instanceof FallbackTriggeredError) {
    // 切换到降级模型
    // 清除孤立消息和工具结果
    // 使用新模型重试
  }
}

下一步