docs/docs/fr/gateway/openai-http-api.md
2026-04-30 07:57:06 +00:00

12 KiB
Raw Blame History

read_when summary title x-i18n
Intégrer des outils qui attendent OpenAI Chat Completions
Exposer un point de terminaison HTTP /v1/chat/completions compatible avec OpenAI depuis le Gateway Complétions de chat OpenAI
generated_at model provider source_hash source_path workflow
2026-04-30T07:28:07Z gpt-5.5 openai 9a19f9d9d6d8ce6d605f8af5324ae3eb0c100c167609341c8dfb569970b0b2c9 gateway/openai-http-api.md 16

Le Gateway dOpenClaw peut servir un petit endpoint Chat Completions compatible avec OpenAI.

Cet endpoint est désactivé par défaut. Activez-le dabord dans la configuration.

  • POST /v1/chat/completions
  • Même port que le Gateway (multiplexage WS + HTTP) : http://<gateway-host>:<port>/v1/chat/completions

Lorsque la surface HTTP compatible avec OpenAI du Gateway est activée, elle sert aussi :

  • GET /v1/models
  • GET /v1/models/{id}
  • POST /v1/embeddings
  • POST /v1/responses

En interne, les requêtes sont exécutées comme une exécution dagent Gateway normale (même chemin de code que openclaw agent), donc le routage, les autorisations et la configuration correspondent à votre Gateway.

Authentification

Utilise la configuration dauthentification du Gateway.

Chemins dauthentification HTTP courants :

  • authentification par secret partagé (gateway.auth.mode="token" ou "password") : Authorization: Bearer <token-or-password>
  • authentification HTTP portant une identité de confiance (gateway.auth.mode="trusted-proxy") : routez via le proxy configuré sensible à lidentité et laissez-le injecter les en-têtes didentité requis
  • authentification ouverte en entrée privée (gateway.auth.mode="none") : aucun en-tête dauthentification requis

Notes :

  • Lorsque gateway.auth.mode="token", utilisez gateway.auth.token (ou OPENCLAW_GATEWAY_TOKEN).
  • Lorsque gateway.auth.mode="password", utilisez gateway.auth.password (ou OPENCLAW_GATEWAY_PASSWORD).
  • Lorsque gateway.auth.mode="trusted-proxy", la requête HTTP doit provenir dune source de proxy de confiance configurée ; les proxys local loopback sur le même hôte nécessitent explicitement gateway.auth.trustedProxy.allowLoopback = true.
  • Si gateway.auth.rateLimit est configuré et que trop déchecs dauthentification se produisent, lendpoint renvoie 429 avec Retry-After.

Limite de sécurité (important)

Considérez cet endpoint comme une surface daccès opérateur complet pour linstance de gateway.

  • Lauthentification HTTP bearer ici nest pas un modèle de portée étroite par utilisateur.
  • Un jeton/mot de passe Gateway valide pour cet endpoint doit être traité comme un identifiant de propriétaire/opérateur.
  • Les requêtes passent par le même chemin dagent de plan de contrôle que les actions dopérateur de confiance.
  • Il nexiste pas de limite doutils séparée non propriétaire/par utilisateur sur cet endpoint ; dès quun appelant passe lauthentification Gateway ici, OpenClaw le traite comme un opérateur de confiance pour ce gateway.
  • Pour les modes dauthentification par secret partagé (token et password), lendpoint restaure les paramètres opérateur complets normaux même si lappelant envoie un en-tête x-openclaw-scopes plus restreint.
  • Les modes HTTP portant une identité de confiance (par exemple lauthentification par proxy de confiance ou gateway.auth.mode="none") honorent x-openclaw-scopes lorsquil est présent et, sinon, reviennent à lensemble de portées opérateur par défaut normal.
  • Si la politique de lagent cible autorise les outils sensibles, cet endpoint peut les utiliser.
  • Gardez cet endpoint uniquement sur loopback/tailnet/entrée privée ; ne lexposez pas directement à linternet public.

Matrice dauthentification :

  • gateway.auth.mode="token" ou "password" + Authorization: Bearer ...
    • prouve la possession du secret opérateur partagé du gateway
    • ignore les x-openclaw-scopes plus restreints
    • restaure lensemble complet de portées opérateur par défaut : operator.admin, operator.approvals, operator.pairing, operator.read, operator.talk.secrets, operator.write
    • traite les tours de chat sur cet endpoint comme des tours dexpéditeur propriétaire
  • modes HTTP portant une identité de confiance (par exemple lauthentification par proxy de confiance, ou gateway.auth.mode="none" sur une entrée privée)
    • authentifient une identité externe de confiance ou une limite de déploiement
    • honorent x-openclaw-scopes lorsque len-tête est présent
    • reviennent à lensemble de portées opérateur par défaut normal lorsque len-tête est absent
    • ne perdent la sémantique de propriétaire que lorsque lappelant restreint explicitement les portées et omet operator.admin

Voir Sécurité et Accès distant.

Contrat de modèle centré sur lagent

OpenClaw traite le champ OpenAI model comme une cible dagent, et non comme un identifiant brut de modèle fournisseur.

  • model: "openclaw" route vers lagent par défaut configuré.
  • model: "openclaw/default" route également vers lagent par défaut configuré.
  • model: "openclaw/<agentId>" route vers un agent spécifique.

En-têtes de requête facultatifs :

  • x-openclaw-model: <provider/model-or-bare-id> remplace le modèle backend pour lagent sélectionné.
  • x-openclaw-agent-id: <agentId> reste pris en charge comme remplacement de compatibilité.
  • x-openclaw-session-key: <sessionKey> contrôle entièrement le routage de session.
  • x-openclaw-message-channel: <channel> définit le contexte synthétique de canal dentrée pour les invites et politiques sensibles au canal.

Alias de compatibilité toujours acceptés :

  • model: "openclaw:<agentId>"
  • model: "agent:<agentId>"

Activation de lendpoint

Définissez gateway.http.endpoints.chatCompletions.enabled sur true :

{
  gateway: {
    http: {
      endpoints: {
        chatCompletions: { enabled: true },
      },
    },
  },
}

Désactivation de lendpoint

Définissez gateway.http.endpoints.chatCompletions.enabled sur false :

{
  gateway: {
    http: {
      endpoints: {
        chatCompletions: { enabled: false },
      },
    },
  },
}

Comportement des sessions

Par défaut, lendpoint est sans état par requête (une nouvelle clé de session est générée à chaque appel).

Si la requête inclut une chaîne OpenAI user, le Gateway en dérive une clé de session stable, afin que les appels répétés puissent partager une session dagent.

Pourquoi cette surface est importante

Cest lensemble de compatibilité à plus fort effet de levier pour les frontends et loutillage auto-hébergés :

  • La plupart des configurations Open WebUI, LobeChat et LibreChat attendent /v1/models.
  • De nombreux systèmes RAG attendent /v1/embeddings.
  • Les clients de chat OpenAI existants peuvent généralement commencer avec /v1/chat/completions.
  • Les clients plus natifs pour agents préfèrent de plus en plus /v1/responses.

Liste des modèles et routage dagent

Une liste de cibles dagent OpenClaw.
Les identifiants renvoyés sont des entrées `openclaw`, `openclaw/default` et `openclaw/<agentId>`.
Utilisez-les directement comme valeurs OpenAI `model`.
Il liste les cibles dagent de premier niveau, pas les modèles fournisseurs backend ni les sous-agents.
Les sous-agents restent une topologie dexécution interne. Ils napparaissent pas comme pseudo-modèles.
`openclaw/default` est lalias stable de lagent par défaut configuré.
Cela signifie que les clients peuvent continuer à utiliser un identifiant prévisible même si lidentifiant réel de lagent par défaut change entre les environnements.
Utilisez `x-openclaw-model`.
Exemples :
`x-openclaw-model: openai/gpt-5.4`
`x-openclaw-model: gpt-5.5`

Si vous lomettez, lagent sélectionné sexécute avec son choix de modèle configuré normal.
`/v1/embeddings` utilise les mêmes identifiants `model` de cible dagent.
Utilisez `model: "openclaw/default"` ou `model: "openclaw/<agentId>"`.
Lorsque vous avez besoin dun modèle dembedding spécifique, envoyez-le dans `x-openclaw-model`.
Sans cet en-tête, la requête est transmise à la configuration dembedding normale de lagent sélectionné.

Streaming (SSE)

Définissez stream: true pour recevoir des Server-Sent Events (SSE) :

  • Content-Type: text/event-stream
  • Chaque ligne dévénement est data: <json>
  • Le flux se termine par data: [DONE]

Configuration rapide dOpen WebUI

Pour une connexion Open WebUI de base :

  • URL de base : http://127.0.0.1:18789/v1
  • URL de base Docker sur macOS : http://host.docker.internal:18789/v1
  • Clé API : votre jeton bearer Gateway
  • Modèle : openclaw/default

Comportement attendu :

  • GET /v1/models doit lister openclaw/default
  • Open WebUI doit utiliser openclaw/default comme identifiant de modèle de chat
  • Si vous voulez un fournisseur/modèle backend spécifique pour cet agent, définissez le modèle par défaut normal de lagent ou envoyez x-openclaw-model

Test rapide :

curl -sS http://127.0.0.1:18789/v1/models \
  -H 'Authorization: Bearer YOUR_TOKEN'

Si cela renvoie openclaw/default, la plupart des configurations Open WebUI peuvent se connecter avec la même URL de base et le même jeton.

Exemples

Sans streaming :

curl -sS http://127.0.0.1:18789/v1/chat/completions \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "openclaw/default",
    "messages": [{"role":"user","content":"hi"}]
  }'

Avec streaming :

curl -N http://127.0.0.1:18789/v1/chat/completions \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'x-openclaw-model: openai/gpt-5.4' \
  -d '{
    "model": "openclaw/research",
    "stream": true,
    "messages": [{"role":"user","content":"hi"}]
  }'

Lister les modèles :

curl -sS http://127.0.0.1:18789/v1/models \
  -H 'Authorization: Bearer YOUR_TOKEN'

Récupérer un modèle :

curl -sS http://127.0.0.1:18789/v1/models/openclaw%2Fdefault \
  -H 'Authorization: Bearer YOUR_TOKEN'

Créer des embeddings :

curl -sS http://127.0.0.1:18789/v1/embeddings \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -H 'x-openclaw-model: openai/text-embedding-3-small' \
  -d '{
    "model": "openclaw/default",
    "input": ["alpha", "beta"]
  }'

Notes :

  • /v1/models renvoie des cibles dagent OpenClaw, pas des catalogues fournisseurs bruts.
  • openclaw/default est toujours présent afin quun identifiant stable fonctionne dans tous les environnements.
  • Les remplacements de fournisseur/modèle backend appartiennent à x-openclaw-model, pas au champ OpenAI model.
  • /v1/embeddings prend en charge input sous forme de chaîne ou de tableau de chaînes.

Connexe