Salta ai contenuti

Proxy di traduzione

Il proxy di traduzione e il nucleo di Claudex. Si interpone tra Claude Code e i tuoi fornitori AI, convertendo in modo trasparente tra l’API Anthropic Messages e l’API OpenAI Chat Completions (o 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 utilizza un trait ProviderAdapter per gestire le differenze tra le API dei fornitori. Sono implementati tre adapter:

AdapterTraduzioneUtilizzato da
DirectAnthropicNessuna (passthrough)Anthropic, MiniMax, Vertex AI
ChatCompletionsTraduzione completa 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 APIAbbonamenti ChatGPT/Codex
AnthropicOpenAI
Campo systemMessaggio di sistema nell’array messages
Blocchi messages[].content (text, image, tool_use, tool_result)messages[].content + tool_calls
Array tools (JSON Schema con input_schema)Array tools (formato function con parameters)
tool_choice (auto, any, {name})tool_choice (auto, required, {function: {name}})
max_tokensmax_tokens (limitato dall’impostazione max_tokens del profilo se configurata)
temperature, top_pMappatura diretta (rimossi se strip_params corrisponde)
OpenAIAnthropic
choices[0].message.contentBlocchi content (type: text)
choices[0].message.tool_callsBlocchi 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 puo generare nomi di tool superiori a 64 caratteri (ad es. mcp__server-name__very-long-tool-name-that-exceeds-the-limit). OpenAI e molti fornitori impongono un limite di 64 caratteri.

Claudex automaticamente:

  1. Tronca i nomi che superano 64 caratteri nelle richieste in uscita
  2. Costruisce una tabella di mappatura dei nomi troncati verso quelli originali
  3. Ripristina i nomi originali nelle risposte del fornitore

Questo processo bidirezionale e completamente trasparente.

Claudex supporta completamente lo streaming SSE (Server-Sent Events), traducendo i chunk dello stream OpenAI in eventi stream Anthropic in tempo reale:

SSE OpenAISSE Anthropic
Primo 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 presentecontent_block_stop + message_delta + message_stop

Il traduttore in streaming mantiene una macchina a stati per gestire correttamente l’accumulo delle tool call e i confini dei blocchi di contenuto.

Azure OpenAI utilizza uno schema di autenticazione e URL diverso:

  • Autenticazione: header api-key al posto di Authorization: Bearer
  • Formato URL: https://{resource}.openai.azure.com/openai/deployments/{deployment}
  • Versione API: obbligatoria tramite query_params

Claudex rileva automaticamente Azure verificando se base_url contiene openai.azure.com e regola l’autenticazione di conseguenza.

FornitoreTipoURL base
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
Abb. ChatGPT/CodexOpenAIResponseshttps://chatgpt.com/backend-api/codex

Il proxy espone un endpoint /v1/models che elenca tutti i profili abilitati. Ogni voce include campi personalizzati:

  • x-claudex-profile: nome del profilo
  • x-claudex-provider: tipo di fornitore (anthropic, openai-compatible, openai-responses)

Claude Code interroga questo endpoint per scoprire i modelli disponibili.

Terminal window
# Avvia il proxy come daemon
claudex proxy start -d
# Verifica lo stato del proxy
claudex proxy status
# Ferma il daemon del proxy
claudex proxy stop
# Avvia su una porta personalizzata
claudex proxy start -p 8080

Quando esegui claudex run <profile>, il proxy viene avviato automaticamente in background se non e gia in esecuzione.