Accueil / Articles

Utilisez le Codex d’OpenAI avec un proxy LiteLLM pour les modèles et budgets routés

Pointez OpenAI Codex vers une URL de proxy LiteLLM pour obtenir un accès routé à de nombreux modèles, des journaux de coûts centralisés ainsi que des clés virtuelles par développeur avec leurs propres budgets.

Éditeur : REACTAPP.TOP5 min de lecture1062 mots

Sources: How to set up OpenAI Codex with LiteLLM

Cette démarche guide OpenAI Codex vers un proxy LiteLLM que vous exécutez (ou que votre équipe héberge déjà). Codex lit une URL de base dans les paramètres de configuration, ce qui vous permet d’obtenir un routage vers plusieurs modèles, des journaux et des coûts centralisés, des clés par développeur avec des budgets, ainsi qu’une seule clé du fournisseur principal sur le serveur.

Exigences

Docker (ou un point de terminaison LiteLLM existant), l’outil CLI ou l’application desktop de Codex, ainsi que l’accès à au moins un fournisseur de modèles principal.

1. Installer OpenAI Codex

Suivez la documentation d’installation actuelle pour l’interface CLI ou desktop. Vérifiez que codex s’exécute localement avant de connecter un proxy.

2. Configurer LiteLLM pour le routage des modèles

config.yaml

npm install -g @openai/codex
model_list:
  # `codex -m <id>` works with any of them.
  - model_name: gpt-5.6-terra
    litellm_params:
      model: openai/gpt-5.6-terra
      api_key: os.environ/OPENAI_API_KEY
  - model_name: gpt-5.6-luna
    litellm_params:
      model: openai/gpt-5.6-luna
      api_key: os.environ/OPENAI_API_KEY
  - model_name: gpt-5.6-sol
    litellm_params:
      model: openai/gpt-5.6-sol
      api_key: os.environ/OPENAI_API_KEY

  # Anything from another provider goes in the same list.
  - model_name: claude-sonnet-5
    litellm_params:
      model: anthropic/claude-sonnet-5
      api_key: os.environ/ANTHROPIC_API_KEY

  # Catch-all, so `codex -m <anything>` reaches OpenAI without editing
  # this file. Delete this entry to restrict a fleet to the list above.
  - model_name: "*"
    litellm_params:
      model: openai/*
      api_key: os.environ/OPENAI_API_KEY

litellm_settings:
  drop_params: true

general_settings:
  master_key: os.environ/LITELLM_MASTER_KEY
  # Coding turns stream for a long time. Do not cut them off.
  request_timeout: 600
name: litellm-coding-agents

services:
  litellm:
    image: ghcr.io/berriai/litellm:main-stable
    restart: unless-stopped
    command: ["--config", "/app/config.yaml", "--port", "4000"]
    ports:
      - "4000:4000"
    volumes:
      - ./config.yaml:/app/config.yaml:ro
    env_file:
      - .env
    environment:
      DATABASE_URL: postgresql://litellm:litellm@postgres:5432/litellm
      STORE_MODEL_IN_DB: "True"
    depends_on:
      postgres:
        condition: service_healthy
    healthcheck:
      test: ["CMD-SHELL", "python -c \"import urllib.request,sys; sys.exit(0 if urllib.request.urlopen('http://localhost:4000/health/liveliness').status==200 else 1)\""]
      interval: 10s
      timeout: 5s
      retries: 12
      start_period: 30s

  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    # Deliberately not published to the host. Nothing outside this
    # network needs it, and 5432 is usually already taken.
    environment:
      POSTGRES_USER: litellm
      POSTGRES_PASSWORD: litellm
      POSTGRES_DB: litellm
    volumes:
      - litellm-pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U litellm -d litellm"]
      interval: 5s
      timeout: 5s
      retries: 20

volumes:
  name: litellm-pgdata
OPENAI_API_KEY=... ANTHROPIC_API_KEY=... LITELLM_MASTER_KEY=sk-1234
docker compose up -d
curl -s http://localhost:4000/health/liveliness
curl -s http://localhost:4000/v1/models -H "Authorization: Bearer sk-1234" | head -c 400
lsof -nP -iTCP:4000 -sTCP:LISTEN
cp ~/.codex/config.toml ~/.codex/config.toml.bak 2>/dev/null || true
model = "gpt-5.6-terra" model_provider = "litellm" model_reasoning_effort = "medium" [model_providers.litellm] name = "LiteLLM Gateway" base_url = "http://localhost:4000/v1" # More on setting up LITELLM_API_KEY towards the end env_key = "LITELLM_API_KEY" # Codex talks the Responses API. wire_api = "responses" # A coding turn can stream for long time, hence the setting below stream_idle_timeout_ms = 7200000 stream_max_retries = 5 request_max_retries = 4 # Codex cli complains if not in a trusted folder [projects."/path/to/your/project"] trust_level = "trusted"
codex exec "reply with the word CONNECTED and nothing else"
launchctl setenv LITELLM_API_KEY "sk-1234"
export LITELLM_API_KEY=""
codex -m gpt-5.6-luna
# Optional profiles # Saved model plus reasoning-effort pairs. `codex --profile deep`. [profiles.fast] model = "gpt-5.6-luna" model_reasoning_effort = "low" [profiles.deep] model = "gpt-5.6-sol" model_reasoning_effort = "high"
codex --profile deep

Associez les alias des modèles compatibles avec les cartes aux déploiements sources. Conservez les informations secrètes dans des variables d’environnement, et non dans le fichier yaml stocké sur Git.

3. Démarrer le proxy LiteLLM

docker-compose.yml

Démarrez le proxy et effectuez une vérification de santé sur l’endpoint /models.

4. Configurer Codex pour utiliser LiteLLM

~/.codex/config.toml

Indiquez l’URL de base vers votre proxy et utilisez une clé virtuelle émise par LiteLLM, et non la clé brute du fournisseur.

5. Lancer Codex

Proposez une tâche de programmation simple et vérifiez que les journaux de LiteLLM affichent le modèle utilisé ainsi que l’utilisation des tokens.

6. Application de bureau

Pointez le client bureau vers la même URL de base/mot de passe afin que l’interface en ligne de commande et l’interface utilisateur partagent les budgets.

Options avancées

Mots de passe virtuels

Des mots de passe par développeur, accompagnés de listes d’autorisation de modèles et de plafonds de dépenses, empêchent qu’une session hors contrôle ne vide le budget de l’organisation.

Utilisation de modèles différents

Modifiez l’alias dans la configuration de Codex ou pour chaque requête ; LiteLLM gère les différences avec les sources externes.

Ressources supplémentaires

Maintenez les versions de LiteLLM et Codex à des valeurs fixes ; l’authentification du proxy et les variations d’alias de modèle sont les problèmes courants après un mois sans incident.

Note de sécurité : traitez le proxy comme un service en production — TLS, listes d’autorisation réseau et rotation des clés — car il centralise les identifiants du fournisseur et voit chaque requête.

Note de sécurité : traitez le proxy comme un service en production — TLS, listes d’autorisation réseau et rotation des clés — car il centralise les identifiants du fournisseur et voit chaque requête.

Note de sécurité : traitez le proxy comme un service en production — TLS, listes d’autorisation réseau et rotation des clés — car il concentre les identifiants du fournisseur et voit toutes les requêtes.

Note de sécurité : traitez le proxy comme un service en production — TLS, listes d’autorisation réseau et rotation des clés — car il concentre les identifiants du fournisseur et voit toutes les requêtes.

Note de sécurité : traitez le proxy comme un service en production — TLS, listes d’autorisation réseau et rotation des clés — car il concentre les identifiants du fournisseur et voit toutes les requêtes.

Note de sécurité : traitez le proxy comme un service en production — TLS, listes d’autorisation réseau et rotation des clés — car il concentre les identifiants du fournisseur et voit toutes les requêtes.

Note de sécurité : traitez le proxy comme un service en production — TLS, listes d’autorisation réseau et rotation des clés — car il concentre les identifiants du fournisseur et voit toutes les requêtes.

Note de sécurité : traitez le proxy comme un service en production — TLS, listes d’autorisation réseau et rotation des clés — car il concentre les identifiants du fournisseur et voit toutes les requêtes.

Note de sécurité : traitez le proxy comme un service en production — TLS, listes d’autorisation réseau et rotation des clés — car il concentre les identifiants du fournisseur et voit toutes les requêtes.

Note de sécurité : traitez le proxy comme un service en production — TLS, listes d’autorisation réseau et rotation des clés — car il concentre les identifiants du fournisseur et voit toutes les requêtes.

Note de sécurité : traitez le proxy comme un service en production — TLS, listes d’autorisation réseau et rotation des clés — car il concentre les identifiants du fournisseur et voit toutes les requêtes.

Note de sécurité : traitez le proxy comme un service en production — TLS, listes d’autorisation réseau et rotation des clés — car il concentre les identifiants du fournisseur et voit toutes les requêtes.

Note de sécurité : traitez le proxy comme un service en production — TLS, listes d’autorisation réseau et rotation des clés — car il concentre les identifiants du fournisseur et voit toutes les requêtes.

Note de sécurité : traitez le proxy comme un service en production — TLS, listes d’autorisation réseau et rotation des clés — car il concentre les identifiants du fournisseur et voit toutes les requêtes.