Skip to content

Latest commit

 

History

History
119 lines (79 loc) · 4.6 KB

File metadata and controls

119 lines (79 loc) · 4.6 KB

23. API Client、鉴权与 Provider 路由

所属专题簇:运行协议与接入面

建议前读:17. 系统提示词与模型决策

建议后读:24. GrowthBook、Analytics 与 Feature Control

研究问题

Claude Code 最终是如何把一次模型调用真正发往 Anthropic、Bedrock、Vertex 或 Foundry 的?

一句话结论

模型选择只是第一层;真正的执行还要经过 provider 路由、认证准备、region 决策、session ingress、retry 与错误处理,Claude Code 在这一层实现的是完整的模型接入控制面。

这篇讲什么

这一章解释 Claude Code 在 prompt / model 决策之后,如何真正建立 API client、选择 provider、准备 auth 与网络参数,并把请求可靠发出去。

如果你不看源码,只看这一章,应该记住什么

  • model 不等于 provider,Claude Code 明确区分两者。
  • 鉴权方式不是单一 API key,而是支持 OAuth、AWS、GCP、Foundry 等多种路径。
  • API client 层对 Claude Code 很重要,因为它决定了同一套 agent 行为能否跨不同模型平台复用。

Claude Code 在这里想解决什么

如果 Claude Code 只是一个“只会请求 Anthropic 官方 API”的客户端,这一层会很薄。但当前实现显然假设它需要面对多种模型来源、不同云提供商和不同认证方式。

所以这一层的目标不是“发请求”,而是把“统一的 Claude Code agent 行为”映射到“异构 provider 的接入现实”。

源码依据

Mermaid 图:模型请求接入链路图

flowchart TD
    A["session model decision"] --> B["provider resolution"]
    B --> C["auth preparation"]
    C --> D["region / endpoint / proxy"]
    D --> E["Anthropic SDK client"]
    E --> F["retry / error handling / session ingress"]
    F --> G["response back to QueryEngine"]
Loading

API client 层已经明确支持多 provider

src/services/api/client.ts 顶部注释和 import 可以直接确认至少有这些接入面:

  • Direct Anthropic API
  • AWS Bedrock
  • Azure Foundry
  • Vertex AI

这说明 Claude Code 并不是把“模型 API”写死成单一 Anthropic 终点,而是把 provider 当作正式的运行时维度。

鉴权方式是分层准备的

同一文件中直接 import 了:

  • getAnthropicApiKey
  • getClaudeAIOAuthTokens
  • refreshAndGetAwsCredentials
  • refreshGcpCredentialsIfNeeded

这说明 Claude Code 既支持直接 API key,也支持 Claude.ai OAuth,以及云厂商风格的短期凭证刷新。

provider 不是附属配置,而是行为边界

这层会影响:

  • 实际 base URL
  • auth header 生成方式
  • region 决策
  • 是否属于 first-party Anthropic base URL
  • 某些 provider 下的模型别名和可见模型列表

所以研究 Claude Code 的行为时,只看“最后选中了哪个模型名”是不够的。

session ingress 说明它面向长期会话

src/services/api/ 中还出现了:

  • sessionIngress.ts
  • withRetry.ts
  • usage.ts
  • promptCacheBreakDetection.ts

这说明 API 层不是纯粹的“发一次 messages 请求”,而是同时承担长期会话、计费/usage、缓存与重试治理。

这对研究 Anthropic 有什么意义

Claude Code 在这一层体现出的思路是:

  • agent 行为骨架尽量统一
  • 模型供应面保持可切换
  • 鉴权与 provider 复杂性被收敛进接入层

这是一种典型的平台化设计,而不是“某个 prompt 套某个模型”的硬绑定产品。

你真正应该记住的点

  • 17 章讲的是“选什么模型”;这一章讲的是“怎么真正连上它”。
  • Claude Code 在 API 层已经做好了多 provider、多 auth、多 region 的工程准备。
  • 这解释了为什么它更像 agent 平台,而不是只服务单一 API 的薄客户端。

延伸阅读