OpenAI Chat Completions (HTTP)
Il Gateway di OpenClaw può servire un piccolo endpoint Chat Completions compatibile con OpenAI. Questo endpoint è disabilitato per impostazione predefinita. Abilitalo prima nella configurazione.POST /v1/chat/completions- Stessa porta del Gateway (multiplex WS + HTTP):
http://<gateway-host>:<port>/v1/chat/completions
GET /v1/modelsGET /v1/models/{id}POST /v1/embeddingsPOST /v1/responses
openclaw agent), quindi routing/permessi/configurazione corrispondono al tuo Gateway.
Autenticazione
Usa la configurazione di autenticazione del Gateway. Percorsi comuni di autenticazione HTTP:- autenticazione con segreto condiviso (
gateway.auth.mode="token"o"password"):Authorization: Bearer <token-or-password> - autenticazione HTTP fidata con identità (
gateway.auth.mode="trusted-proxy"): instrada attraverso il proxy identity-aware configurato e lascia che inietti gli header di identità richiesti - autenticazione aperta su ingresso privato (
gateway.auth.mode="none"): non è richiesto alcun header di autenticazione
- Quando
gateway.auth.mode="token", usagateway.auth.token(oOPENCLAW_GATEWAY_TOKEN). - Quando
gateway.auth.mode="password", usagateway.auth.password(oOPENCLAW_GATEWAY_PASSWORD). - Quando
gateway.auth.mode="trusted-proxy", la richiesta HTTP deve provenire da una sorgente trusted proxy non loopback configurata; i proxy loopback sullo stesso host non soddisfano questa modalità. - Se
gateway.auth.rateLimitè configurato e si verificano troppi errori di autenticazione, l’endpoint restituisce429conRetry-After.
Confine di sicurezza (importante)
Tratta questo endpoint come una superficie di accesso completo da operatore per l’istanza del gateway.- L’autenticazione HTTP bearer qui non è un modello a ambito ristretto per utente.
- Un token/password Gateway valido per questo endpoint deve essere trattato come una credenziale da proprietario/operatore.
- Le richieste passano attraverso lo stesso percorso agente del control plane delle azioni fidate dell’operatore.
- Non esiste un confine strumenti separato non-owner/per-user su questo endpoint; una volta che un chiamante supera qui l’autenticazione del Gateway, OpenClaw tratta quel chiamante come un operatore fidato per questo gateway.
- Per le modalità di autenticazione con segreto condiviso (
tokenepassword), l’endpoint ripristina i normali valori predefiniti completi da operatore anche se il chiamante invia un headerx-openclaw-scopespiù restrittivo. - Le modalità HTTP fidate con identità (
trusted-proxyogateway.auth.mode="none", ad esempio) rispettanox-openclaw-scopesquando presente e altrimenti ricadono nel normale insieme di scope predefiniti dell’operatore. - Se la policy dell’agente di destinazione consente strumenti sensibili, questo endpoint può usarli.
- Mantieni questo endpoint solo su loopback/tailnet/ingresso privato; non esporlo direttamente alla internet pubblica.
gateway.auth.mode="token"o"password"+Authorization: Bearer ...- dimostra il possesso del segreto condiviso dell’operatore del gateway
- ignora
x-openclaw-scopespiù restrittivi - ripristina l’intero insieme di scope predefiniti dell’operatore:
operator.admin,operator.approvals,operator.pairing,operator.read,operator.talk.secrets,operator.write - tratta i turni di chat su questo endpoint come turni owner-sender
- modalità HTTP fidate con identità (ad esempio autenticazione trusted proxy o
gateway.auth.mode="none"su ingresso privato)- autenticano una qualche identità fidata esterna o un confine di deployment
- rispettano
x-openclaw-scopesquando l’header è presente - ricadono nel normale insieme di scope predefiniti dell’operatore quando l’header è assente
- perdono la semantica owner solo quando il chiamante restringe esplicitamente gli scope e omette
operator.admin
Contratto del modello agent-first
OpenClaw tratta il campo OpenAImodel come una destinazione agente, non come un ID grezzo di modello provider.
model: "openclaw"instrada all’agente predefinito configurato.model: "openclaw/default"instrada anch’esso all’agente predefinito configurato.model: "openclaw/<agentId>"instrada a un agente specifico.
x-openclaw-model: <provider/model-or-bare-id>sovrascrive il modello backend per l’agente selezionato.x-openclaw-agent-id: <agentId>resta supportato come override di compatibilità.x-openclaw-session-key: <sessionKey>controlla completamente l’instradamento della sessione.x-openclaw-message-channel: <channel>imposta il contesto del canale di ingresso sintetico per prompt e policy consapevoli del canale.
model: "openclaw:<agentId>"model: "agent:<agentId>"
Abilitare l’endpoint
Impostagateway.http.endpoints.chatCompletions.enabled su true:
Disabilitare l’endpoint
Impostagateway.http.endpoints.chatCompletions.enabled su false:
Comportamento della sessione
Per impostazione predefinita l’endpoint è stateless per richiesta (a ogni chiamata viene generata una nuova chiave di sessione). Se la richiesta include una stringa OpenAIuser, il Gateway deriva da essa una chiave di sessione stabile, così le chiamate ripetute possono condividere una sessione agente.
Perché questa superficie è importante
Questo è l’insieme di compatibilità a più alto impatto per frontend e strumenti self-hosted:- La maggior parte delle configurazioni Open WebUI, LobeChat e LibreChat si aspetta
/v1/models. - Molti sistemi RAG si aspettano
/v1/embeddings. - I client chat OpenAI esistenti in genere possono iniziare con
/v1/chat/completions. - I client più nativi per agenti preferiscono sempre più spesso
/v1/responses.
Elenco dei modelli e instradamento degli agenti
Cosa restituisce `/v1/models`?
Cosa restituisce `/v1/models`?
Un elenco di destinazioni agente OpenClaw.Gli ID restituiti sono voci
openclaw, openclaw/default e openclaw/<agentId>.
Usali direttamente come valori OpenAI model.`/v1/models` elenca agenti o sottoagenti?
`/v1/models` elenca agenti o sottoagenti?
Elenca destinazioni di agenti di primo livello, non modelli provider backend e non sottoagenti.I sottoagenti restano topologia di esecuzione interna. Non compaiono come pseudo-modelli.
Perché è incluso `openclaw/default`?
Perché è incluso `openclaw/default`?
openclaw/default è l’alias stabile per l’agente predefinito configurato.Questo significa che i client possono continuare a usare un unico ID prevedibile anche se il vero ID dell’agente predefinito cambia tra ambienti.Come sovrascrivo il modello backend?
Come sovrascrivo il modello backend?
Usa
x-openclaw-model.Esempi:
x-openclaw-model: openai/gpt-5.4
x-openclaw-model: gpt-5.4Se lo ometti, l’agente selezionato viene eseguito con la sua normale scelta di modello configurata.Come si inseriscono gli embeddings in questo contratto?
Come si inseriscono gli embeddings in questo contratto?
/v1/embeddings usa gli stessi ID model di destinazione agente.Usa model: "openclaw/default" o model: "openclaw/<agentId>".
Quando hai bisogno di un modello di embedding specifico, invialo in x-openclaw-model.
Senza questo header, la richiesta passa alla normale configurazione di embedding dell’agente selezionato.Streaming (SSE)
Impostastream: true per ricevere Server-Sent Events (SSE):
Content-Type: text/event-stream- Ogni riga evento è
data: <json> - Lo stream termina con
data: [DONE]
Configurazione rapida di Open WebUI
Per una connessione Open WebUI di base:- URL base:
http://127.0.0.1:18789/v1 - URL base Docker su macOS:
http://host.docker.internal:18789/v1 - Chiave API: il tuo token bearer del Gateway
- Modello:
openclaw/default
GET /v1/modelsdovrebbe elencareopenclaw/default- Open WebUI dovrebbe usare
openclaw/defaultcome ID del modello chat - Se vuoi un provider/modello backend specifico per quell’agente, imposta il normale modello predefinito dell’agente oppure invia
x-openclaw-model
openclaw/default, la maggior parte delle configurazioni Open WebUI può connettersi con lo stesso URL base e token.
Esempi
Senza streaming:/v1/modelsrestituisce destinazioni agente OpenClaw, non cataloghi grezzi di provider.openclaw/defaultè sempre presente, così un unico ID stabile funziona in tutti gli ambienti.- Gli override di provider/modello backend appartengono a
x-openclaw-model, non al campo OpenAImodel. /v1/embeddingssupportainputcome stringa o array di stringhe.