codev / docs /server /proxy-provider.md
chenbhao's picture
chore: docs v1.0
eeeb2b6
|
Raw
History Blame Contribute Delete
4.65 kB

Provider 代理与多模型支持

Proxy 协议转换

文件: src/server/proxy/handler.ts

Proxy Handler 是一个协议转换反向代理,接收 Anthropic Messages API 格式的请求,将其转换为 OpenAI Chat Completions 或 Responses API 格式,转发到上游第三方(3P)Provider,再将响应转换回 Anthropic 格式。

转换路线

Anthropic Messages API  ←→  OpenAI Chat Completions API
Anthropic Messages API  ←→  OpenAI Responses API

转换模块

所有转换逻辑位于 src/server/proxy/transform/src/server/proxy/streaming/

请求转换(Anthropic → OpenAI):

  • anthropicToOpenaiChat.ts — 转换非流式 Chat 请求
  • anthropicToOpenaiResponses.ts — 转换非流式 Responses 请求

响应转换(OpenAI → Anthropic):

  • openaiChatToAnthropic.ts — Chat 响应转 Anthropic 格式
  • openaiResponsesToAnthropic.ts — Responses 响应转 Anthropic 格式

流式转换(OpenAI SSE stream → Anthropic SSE stream):

  • openaiChatStreamToAnthropic.ts — Chat 流式响应转换
  • openaiResponsesStreamToAnthropic.ts — Responses 流式响应转换
  • openaiResponsesStreamToAnthropicResponse.ts — Responses 流聚合

工具参数:

  • toolArguments.ts — 工具参数的兼容处理

类型定义:

  • types.tsAnthropicRequest 等共享类型

支持的 Provider

Proxy 支持以下第三方提供商(3P Provider):

  • Groq — 通过 OpenAI Chat API
  • OpenRouter — 通过 OpenAI Chat API
  • OpenCode — 通过 OpenAI Chat API,含 DeepSeek 推理兼容适配
  • 本地模型 — 任何兼容 OpenAI API 的本地推理端点
  • 其他 OpenAI 兼容 API — 只要符合 OpenAI Chat/Responses 格式即可

DeepSeek 兼容模式

当检测到上游 baseUrl 包含 deepseekopencode.ai 时,自动启用 DeepSeek 推理兼容模式:

  • 启用手动往返推理内容(roundTripReasoningContent
  • 传递 thinking toggle(passThinkingToggle

Provider 配置系统

文件: src/server/services/providerService.ts

ProviderService 实现了一个基于预设(Preset)的 Provider 配置系统。

数据存储

  • 索引文件: ~/.claude/cc-haha/providers.json(轻量级索引)
  • 环境变量: 活跃 Provider 配置写入 ~/.claude/cc-haha/settings.json
  • 隔离策略: 与原始 Claude Code 的 ~/.claude/settings.json 完全隔离

Preset 预设系统

文件: src/server/config/providerPresets.ts + providerPresets.json

每个预设包含:

  • id / name: 唯一标识和显示名
  • baseUrl: API 端点地址
  • apiFormat: 格式类型(openai_chatopenai_responses
  • defaultModels: 模型映射(main / haiku / sonnet / opus)
  • needsApiKey: 是否需要 API Key
  • authStrategy: 认证策略
  • defaultEnv: 默认环境变量
  • modelContextWindows: 模型上下文窗口大小

OpenCode 兼容

系统支持导入 OpenCode 的 Provider 配置,包括模型映射和 API 端点设置。

haha 认证

自定义认证机制,支持两种 OAuth 流程:

  • hahaOAuthService.ts — 通用 haha OAuth
  • hahaOpenAIOAuthService.ts — OpenAI 专用 OAuth

Two-Tier 访问架构

系统采用双层访问模式:

Tier 1: 原生 SDK 直连

适用于 Anthropic 用户,直接使用官方 SDK:

  • Anthropic API — 直接使用 @anthropic-ai/sdk
  • AWS Bedrock — 通过 Bedrock SDK
  • GCP Vertex AI — 通过 Vertex AI SDK

无需经过 Proxy 转换,性能最优。

Tier 2: Proxy 协议转换

适用于 第三方(3P)用户,通过 Proxy 转换为 OpenAI 格式:

  • 请求路径: /proxy/v1/messages(使用活跃 Provider)
  • 请求路径: /proxy/providers/:providerId/v1/messages(指定特定 Provider)
  • 支持 OpenAI Chat Completions API
  • 支持 OpenAI Responses API
  • 支持流式(SSE)和非流式响应

OpenAI 官方提供商

文件: src/server/services/openaiOfficialProvider.ts

OpenAI 官方提供商作为特殊的内置 Provider,使用 OpenAI Codex API,通过 OAuth 认证获取令牌,支持完整的模型目录(OPENAI_CODEX_MODEL_CATALOG)。

Provider 运行时环境

文件: src/server/services/providerRuntimeEnv.ts

管理 Provider 的运行时环境变量:

  • 构建 Provider 认证环境
  • 规范化模型映射
  • 获取托管环境变量键
  • 解析预设认证策略

归因头策略

文件: src/server/services/attributionHeaderPolicy.ts

自动为请求添加 Claude Code 归因头,确保第三方 API 调用中的来源标识。