Zum Inhalt springen

Uebersetzungsproxy

Der Uebersetzungsproxy ist das Herzstueck von Claudex. Er sitzt zwischen Claude Code und Ihren KI-Anbietern und konvertiert transparent zwischen der Anthropic Messages API und der OpenAI Chat Completions API (oder 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 verwendet ein ProviderAdapter-Trait, um Unterschiede zwischen den Provider-APIs zu behandeln. Drei Adapter sind implementiert:

AdapterUebersetzungVerwendet von
DirectAnthropicKeine (Durchleitung)Anthropic, MiniMax, Vertex AI
ChatCompletionsVollstaendige Anthropic-OpenAI-UebersetzungGrok, OpenAI, DeepSeek, Kimi, GLM, OpenRouter, Groq, Mistral, Together AI, Perplexity, Cerebras, Azure OpenAI, GitHub Copilot, GitLab Duo, Ollama, vLLM, LM Studio
ResponsesAnthropic-OpenAI Responses APIChatGPT/Codex-Abonnements
AnthropicOpenAI
system-FeldSystem-Nachricht im messages-Array
messages[].content-Bloecke (text, image, tool_use, tool_result)messages[].content + tool_calls
tools-Array (JSON Schema mit input_schema)tools-Array (Funktionsformat mit parameters)
tool_choice (auto, any, {name})tool_choice (auto, required, {function: {name}})
max_tokensmax_tokens (begrenzt durch max_tokens-Profileinstellung, falls gesetzt)
temperature, top_pDirekte Zuordnung (entfernt wenn strip_params zutrifft)
OpenAIAnthropic
choices[0].message.contentcontent-Bloecke (type: text)
choices[0].message.tool_callscontent-Bloecke (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 kann Werkzeugnamen generieren, die laenger als 64 Zeichen sind (z.B. mcp__server-name__very-long-tool-name-that-exceeds-the-limit). OpenAI und viele Anbieter erzwingen ein 64-Zeichen-Limit.

Claudex fuehrt automatisch folgende Schritte durch:

  1. Namen, die 64 Zeichen ueberschreiten, in ausgehenden Anfragen kuerzen
  2. Eine Zuordnungstabelle von gekuerzten zu originalen Namen erstellen
  3. Originale Namen in Provider-Antworten wiederherstellen

Dieser Roundtrip ist vollstaendig transparent.

Claudex unterstuetzt vollstaendig SSE (Server-Sent Events) Streaming und uebersetzt OpenAI-Stream-Chunks in Echtzeit in Anthropic-Stream-Events:

OpenAI SSEAnthropic SSE
Erster 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 vorhandencontent_block_stop + message_delta + message_stop

Der Streaming-Uebersetzer pflegt eine Zustandsmaschine zur korrekten Behandlung der Tool-Call-Akkumulation und der Inhaltsblock-Grenzen.

Azure OpenAI verwendet ein anderes Authentifizierungs- und URL-Schema:

  • Authentifizierung: api-key-Header anstelle von Authorization: Bearer
  • URL-Format: https://{resource}.openai.azure.com/openai/deployments/{deployment}
  • API-Version: Erforderlich ueber query_params

Claudex erkennt Azure automatisch, indem es prueft, ob base_url den String openai.azure.com enthaelt, und passt die Authentifizierung entsprechend an.

AnbieterTypBasis-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-AboOpenAIResponseshttps://chatgpt.com/backend-api/codex

Der Proxy stellt einen /v1/models-Endpunkt bereit, der alle aktivierten Profile auflistet. Jeder Eintrag enthaelt benutzerdefinierte Felder:

  • x-claudex-profile: Profilname
  • x-claudex-provider: Anbietertyp (anthropic, openai-compatible, openai-responses)

Claude Code fragt diesen Endpunkt ab, um verfuegbare Modelle zu ermitteln.

Terminal-Fenster
# Proxy als Daemon starten
claudex proxy start -d
# Proxy-Status pruefen
claudex proxy status
# Proxy-Daemon stoppen
claudex proxy stop
# Auf einem benutzerdefinierten Port starten
claudex proxy start -p 8080

Beim Ausfuehren von claudex run <profile> wird der Proxy automatisch im Hintergrund gestartet, falls noch nicht aktiv.