Przejdź do głównej zawartości

Proxy tlumaczace

Proxy tlumaczace jest rdzeniem Claudex. Dziala miedzy Claude Code a dostawcami AI, transparentnie konwertujac miedzy Anthropic Messages API a OpenAI Chat Completions API (lub Responses API).

Claude Code → zadanie Anthropic Messages API
└── Proxy Claudex (127.0.0.1:13456)
├── Dostawca DirectAnthropic → przekazuje z naglowkami
├── Dostawca OpenAICompatible
│ ├── Tlumaczenie zadania: Anthropic → OpenAI Chat Completions
│ ├── Zastosowanie query_params, strip_params, custom_headers
│ ├── Przekazanie do dostawcy
│ └── Tlumaczenie odpowiedzi: OpenAI → Anthropic
└── Dostawca OpenAIResponses
├── Tlumaczenie zadania: Anthropic → OpenAI Responses API
├── Przekazanie do dostawcy
└── Tlumaczenie odpowiedzi: Responses → Anthropic

Claudex uzywa cechy ProviderAdapter do obslugi roznic miedzy API dostawcow. Zaimplementowano trzy adaptery:

AdapterTlumaczenieUzywany przez
DirectAnthropicBrak (passthrough)Anthropic, MiniMax, Vertex AI
ChatCompletionsPelne tlumaczenie 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 APISubskrypcje ChatGPT/Codex
AnthropicOpenAI
Pole systemWiadomosc systemowa w tablicy messages
Bloki messages[].content (text, image, tool_use, tool_result)messages[].content + tool_calls
Tablica tools (JSON Schema z input_schema)Tablica tools (format funkcji z parameters)
tool_choice (auto, any, {name})tool_choice (auto, required, {function: {name}})
max_tokensmax_tokens (ograniczone przez ustawienie max_tokens profilu jesli ustawione)
temperature, top_pBezposrednie mapowanie (usuwane jesli strip_params pasuje)
OpenAIAnthropic
choices[0].message.contentBloki content (typ: text)
choices[0].message.tool_callsBloki content (typ: 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 moze generowac nazwy narzedzi dluzsze niz 64 znaki (np. mcp__server-name__very-long-tool-name-that-exceeds-the-limit). OpenAI i wielu dostawcow narzuca limit 64 znakow.

Claudex automatycznie:

  1. Skraca nazwy przekraczajace 64 znaki w zadaniach wychodzacych
  2. Buduje tablice mapowania skroconych → oryginalnych nazw
  3. Przywraca oryginalne nazwy w odpowiedziach dostawcy

Ten mechanizm jest calkowicie transparentny.

Claudex w pelni obsluguje strumieniowanie SSE (Server-Sent Events), tlumaczac fragmenty strumienia OpenAI na zdarzenia strumienia Anthropic w czasie rzeczywistym:

OpenAI SSEAnthropic SSE
Pierwszy fragmentmessage_start + content_block_start
choices[0].delta.contentcontent_block_delta (text_delta)
choices[0].delta.tool_callscontent_block_delta (input_json_delta)
Obecny finish_reasoncontent_block_stop + message_delta + message_stop

Translator strumieniowy utrzymuje maszyne stanow do prawidlowej obslugi akumulacji wywolan narzedzi i granic blokow zawartosci.

Azure OpenAI uzywa innego schematu uwierzytelniania i URL:

  • Uwierzytelnianie: naglowek api-key zamiast Authorization: Bearer
  • Format URL: https://{resource}.openai.azure.com/openai/deployments/{deployment}
  • Wersja API: Wymagana przez query_params

Claudex automatycznie wykrywa Azure sprawdzajac, czy base_url zawiera openai.azure.com i odpowiednio dostosowuje uwierzytelnianie.

DostawcaTypBase 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

Proxy udostepnia endpoint /v1/models, ktory listuje wszystkie wlaczone profile. Kazdy wpis zawiera pola niestandardowe:

  • x-claudex-profile: nazwa profilu
  • x-claudex-provider: typ dostawcy (anthropic, openai-compatible, openai-responses)

Claude Code odpytuje ten endpoint w celu odkrycia dostepnych modeli.

Okno terminala
# Uruchom proxy jako demon
claudex proxy start -d
# Sprawdz status proxy
claudex proxy status
# Zatrzymaj demona proxy
claudex proxy stop
# Uruchom na niestandardowym porcie
claudex proxy start -p 8080

Po uruchomieniu claudex run <profile> proxy jest automatycznie uruchamiane w tle, jesli jeszcze nie dziala.