跳转到内容

翻译代理

翻译代理是 Claudex 的核心。它位于 Claude Code 和 AI 提供商之间,透明地在 Anthropic Messages API 和 OpenAI Chat Completions API(或 Responses API)之间进行转换。

Claude Code → Anthropic Messages API request
└── Claudex Proxy (127.0.0.1:13456)
├── DirectAnthropic provider → forward with headers
├── OpenAICompatible provider
│ ├── Translate request: Anthropic → OpenAI Chat Completions
│ ├── Apply query_params, strip_params, custom_headers
│ ├── Forward to provider
│ └── Translate response: OpenAI → Anthropic
└── OpenAIResponses provider
├── Translate request: Anthropic → OpenAI Responses API
├── Forward to provider
└── Translate response: Responses → Anthropic

Claudex 使用 ProviderAdapter trait 处理不同提供商 API 之间的差异。已实现三种适配器:

适配器翻译方式使用者
DirectAnthropic无(直接透传)Anthropic、MiniMax、Vertex AI
ChatCompletions完整的 Anthropic 与 OpenAI 双向翻译Grok、OpenAI、DeepSeek、Kimi、GLM、OpenRouter、Groq、Mistral、Together AI、Perplexity、Cerebras、Azure OpenAI、GitHub Copilot、GitLab Duo、Ollama、vLLM、LM Studio
ResponsesAnthropic 与 OpenAI Responses API 翻译ChatGPT/Codex 订阅
AnthropicOpenAI
system 字段messages 数组中的 system message
messages[].content 块(text、image、tool_use、tool_result)messages[].content + tool_calls
tools 数组(JSON Schema,input_schematools 数组(function 格式,parameters
tool_choiceautoany{name}tool_choiceautorequired{function: {name}}
max_tokensmax_tokens(如果 profile 设置了 max_tokens 则取上限)
temperaturetop_p直接映射(如果 strip_params 匹配则剥离)
OpenAIAnthropic
choices[0].message.contentcontent 块(type: text)
choices[0].message.tool_callscontent 块(type: tool_use)
finish_reason: stopstop_reason: end_turn
finish_reason: tool_callsstop_reason: tool_use
usage.prompt_tokens / completion_tokensusage.input_tokens / output_tokens

Claude Code 可能生成超过 64 字符的工具名称(例如 mcp__server-name__very-long-tool-name-that-exceeds-the-limit)。OpenAI 及许多提供商强制执行 64 字符限制。

Claudex 自动:

  1. 在发出的请求中截断超过 64 字符的名称
  2. 构建截断名到原始名的映射表
  3. 在提供商响应中恢复原始名称

这一往返过程完全透明。

Claudex 完全支持 SSE(Server-Sent Events)流式传输,将 OpenAI 流块实时翻译为 Anthropic 流事件:

OpenAI SSEAnthropic SSE
首个 chunkmessage_start + content_block_start
choices[0].delta.contentcontent_block_delta(text_delta)
choices[0].delta.tool_callscontent_block_delta(input_json_delta)
finish_reason 出现content_block_stop + message_delta + message_stop

流式翻译器维护一个状态机,正确处理 tool call 的累积和内容块边界。

Azure OpenAI 使用不同的认证和 URL 方案:

  • 认证:使用 api-key 请求头取代 Authorization: Bearer
  • URL 格式https://{resource}.openai.azure.com/openai/deployments/{deployment}
  • API 版本:通过 query_params 必填

Claudex 通过检查 base_url 是否包含 openai.azure.com 自动检测 Azure 并相应调整认证方式。

提供商类型Base URL
AnthropicDirectAnthropichttps://api.anthropic.com
MiniMaxDirectAnthropichttps://api.minimax.io/anthropic
Google Vertex AIDirectAnthropichttps://REGION-aiplatform.googleapis.com/v1/projects/...
OpenRouterOpenAICompatiblehttps://openrouter.ai/api/v1
Grok (xAI)OpenAICompatiblehttps://api.x.ai/v1
OpenAIOpenAICompatiblehttps://api.openai.com/v1
DeepSeekOpenAICompatiblehttps://api.deepseek.com
Kimi/MoonshotOpenAICompatiblehttps://api.moonshot.ai/v1
GLM (智谱)OpenAICompatiblehttps://api.z.ai/api/paas/v4
GroqOpenAICompatiblehttps://api.groq.com/openai/v1
Mistral AIOpenAICompatiblehttps://api.mistral.ai/v1
Together AIOpenAICompatiblehttps://api.together.xyz/v1
PerplexityOpenAICompatiblehttps://api.perplexity.ai
CerebrasOpenAICompatiblehttps://api.cerebras.ai/v1
Azure OpenAIOpenAICompatiblehttps://{resource}.openai.azure.com/...
GitHub CopilotOpenAICompatiblehttps://api.githubcopilot.com
GitLab DuoOpenAICompatiblehttps://gitlab.com/api/v4/ai/llm/proxy
OllamaOpenAICompatiblehttp://localhost:11434/v1
vLLMOpenAICompatiblehttp://localhost:8000/v1
LM StudioOpenAICompatiblehttp://localhost:1234/v1
ChatGPT/Codex 订阅OpenAIResponseshttps://chatgpt.com/backend-api/codex

代理暴露 /v1/models 端点,列出所有已启用的 profile。每个条目包含自定义字段:

  • x-claudex-profile:profile 名称
  • x-claudex-provider:提供商类型(anthropicopenai-compatibleopenai-responses

Claude Code 查询此端点以发现可用模型。

Terminal window
# 以守护进程方式启动代理
claudex proxy start -d
# 查看代理状态
claudex proxy status
# 停止代理守护进程
claudex proxy stop
# 使用自定义端口
claudex proxy start -p 8080

运行 claudex run <profile> 时,如果代理未运行,会自动在后台启动。