Перейти к содержимому

Прокси-переводчик

Прокси-переводчик является ядром 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 для обработки различий между API провайдеров. Реализованы три адаптера:

АдаптерТрансляцияИспользуется
DirectAnthropicНет (passthrough)Anthropic, MiniMax, Vertex AI
ChatCompletionsПолная трансляция Anthropic ↔ OpenAIGrok, 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
Блоки messages[].content (text, image, tool_use, tool_result)messages[].content + tool_calls
Массив tools (JSON Schema с input_schema)Массив tools (формат функций с parameters)
tool_choice (auto, any, {name})tool_choice (auto, required, {function: {name}})
max_tokensmax_tokens (ограничивается настройкой max_tokens профиля, если задана)
temperature, top_pПрямое соответствие (удаляются, если совпадает с strip_params)
OpenAIAnthropic
choices[0].message.contentБлоки content (type: text)
choices[0].message.tool_callsБлоки content (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
Первый фрагментmessage_start + content_block_start
choices[0].delta.contentcontent_block_delta (text_delta)
choices[0].delta.tool_callscontent_block_delta (input_json_delta)
Наличие finish_reasoncontent_block_stop + message_delta + message_stop

Потоковый переводчик поддерживает конечный автомат для корректной обработки накопления вызовов инструментов и границ блоков содержимого.

Azure OpenAI использует другую схему аутентификации и URL:

  • Аутентификация: заголовок api-key вместо Authorization: Bearer
  • Формат URL: https://{resource}.openai.azure.com/openai/deployments/{deployment}
  • Версия API: обязательна через query_params

Claudex автоматически определяет Azure, проверяя наличие openai.azure.com в base_url, и соответственно настраивает аутентификацию.

ПровайдерТип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 (Zhipu)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 subOpenAIResponseshttps://chatgpt.com/backend-api/codex

Прокси предоставляет endpoint /v1/models, который перечисляет все включённые профили. Каждая запись содержит пользовательские поля:

  • x-claudex-profile: имя профиля
  • x-claudex-provider: тип провайдера (anthropic, openai-compatible, openai-responses)

Claude Code запрашивает этот endpoint для обнаружения доступных моделей.

Окно терминала
# Запустить прокси как демон
claudex proxy start -d
# Проверить статус прокси
claudex proxy status
# Остановить демон прокси
claudex proxy stop
# Запустить на пользовательском порту
claudex proxy start -p 8080

При выполнении claudex run <profile> прокси автоматически запускается в фоне, если он ещё не запущен.