Strona główna / Artykuły

Skieruj OpenAI Codex na proxy LiteLLM dla modeli i budżetów routowanych

Skieruj OpenAI Codex na jeden adres URL proxy LiteLLM, aby uzyskać dostęp do wielu modeli, centralne rejestry kosztów oraz wirtualne klucze dla poszczególnych programistów z własnymi budżetami.

Wydawca: REACTAPP.TOP5 min czytania1062 słów

Źródła: How to set up OpenAI Codex with LiteLLM

To przewodnictwo pokazuje, jak skonfigurować OpenAI Codex z użyciem proxy LiteLLM, który sam uruchamiasz (lub który jest już hostowany przez twoją zespół). Codex odczytuje jedną podstawową adres URL z pliku konfiguracyjnego, dzięki czemu proxy umożliwia kierowanie ruchem do różnych modeli, centralne logowanie i zarządzanie kosztami, klucze przypisane poszczególnym programistom z określonymi budżetami oraz jeden klucz dostawcy na serwerze.

Wymagania

Docker (lub istniejący punkt końcowy LiteLLM), narzędzie Codex CLI lub aplikacja desktopowa oraz dostęp do co najmniej jednego dostawcy modeli.

1. Zainstaluj OpenAI Codex

Postępuj zgodnie z aktualnymi instrukcjami instalacji dla wersji CLI lub desktopowej. Upewnij się, że codex działa lokalnie, zanim podłączysz proxy.

2. Skonfiguruj LiteLLM do kierowania ruchem do modeli

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

Przyporządkuj aliasy modeli przyjazne mapom do odpowiednich wdrożeń. Przechowuj dane poufne w zmiennych środowiskowych, a nie w pliku yaml zapisanym w git.

3. Uruchom proxy LiteLLM

docker-compose.yml

Zapuść proxy i sprawdź stan punktu końcowego /models za pomocą testu zdrowia.

4. Skonfiguruj Codex do używania LiteLLM

~/.codex/config.toml

Ustaw podstawową adresację URL na swój proxy i użyj wirtualnego klucza wydanego przez LiteLLM – a nie surowego klucza dostawcy.

5. Uruchom Codex

Zadaj proste zadanie programistyczne i upewnij się, że logi LiteLLM pokazują użyty model oraz ilość tokenów.

6. Aplikacja na komputerze stacjonarnym

Należy skierować klienta na pulpit do tego samego adresu URL/klucza, aby interfejs wiersza poleceń i graficzny dzieliły ten sam budżet.

Opcje zaawansowane

Klucze wirtualne

Klucze przypisane do poszczególnych programistów, wraz z listami dopuszczalnych modeli i limitami wydatków, zapobiegają temu, by jedna niekontrolowana sesja wyczerpała budżet organizacji.

Używanie różnych modeli

Należy zmienić alias w konfiguracji Codex lub dla każdej prośby; LiteLLM radzi sobie z różnicami pomiędzy źródłami.

Dodatkowe zasoby

Należy utrzymywać stałe wersje LiteLLM i Codex; najczęstszymi problemami po spokojnym miesiącu są błędy związane z autoryzacją proxy i zmianami aliasów modeli.

Uwaga dotycząca bezpieczeństwa: traktuj proxy jak usługę produkcyjną — z użyciem TLS, list dopuszczalnych adresów sieciowych oraz rotacji kluczy — ponieważ gromadzi on dane uwierzytelniające dostawcy i widzi każdą prośbę.

Uwaga dotycząca bezpieczeństwa: traktuj proxy jak usługę produkcyjną — z użyciem TLS, list dopuszczalnych adresów sieciowych oraz rotacji kluczy — ponieważ gromadzi on dane uwierzytelniające dostawcy i widzi każdą prośbę.

Uwaga dotycząca bezpieczeństwa: traktuj proxy jako usługę produkcyjną – z wykorzystaniem TLS, list dopuszczalnych adresów sieciowych oraz rotacji kluczy – ponieważ gromadzi dane uwierzytelniające dostawcy i widzi każde żądanie.

Uwaga dotycząca bezpieczeństwa: traktuj proxy jako usługę produkcyjną – z wykorzystaniem TLS, list dopuszczalnych adresów sieciowych oraz rotacji kluczy – ponieważ gromadzi dane uwierzytelniające dostawcy i widzi każde żądanie.

Uwaga dotycząca bezpieczeństwa: traktuj proxy jako usługę produkcyjną – z wykorzystaniem TLS, list dopuszczalnych adresów sieciowych oraz rotacji kluczy – ponieważ gromadzi dane uwierzytelniające dostawcy i widzi każde żądanie.

Uwaga dotycząca bezpieczeństwa: traktuj proxy jako usługę produkcyjną – z wykorzystaniem TLS, list dopuszczalnych adresów sieciowych oraz rotacji kluczy – ponieważ gromadzi dane uwierzytelniające dostawcy i widzi każde żądanie.

Uwaga dotycząca bezpieczeństwa: traktuj proxy jako usługę produkcyjną – z wykorzystaniem TLS, list dopuszczalnych adresów sieciowych oraz rotacji kluczy – ponieważ gromadzi dane uwierzytelniające dostawcy i widzi każde żądanie.

Uwaga dotycząca bezpieczeństwa: traktuj proxy jako usługę produkcyjną – z wykorzystaniem TLS, list dopuszczalnych adresów sieciowych oraz rotacji kluczy – ponieważ gromadzi dane uwierzytelniające dostawcy i widzi każde żądanie.

Uwaga dotycząca bezpieczeństwa: traktuj proxy jako usługę produkcyjną – z wykorzystaniem TLS, list dopuszczalnych adresów sieciowych oraz rotacji kluczy – ponieważ gromadzi dane uwierzytelniające dostawcy i widzi każde żądanie.

Uwaga dotycząca bezpieczeństwa: traktuj proxy jako usługę produkcyjną – z wykorzystaniem TLS, list dopuszczalnych adresów sieciowych oraz rotacji kluczy – ponieważ gromadzi dane uwierzytelniające dostawcy i widzi każde żądanie.

Uwaga dotycząca bezpieczeństwa: traktuj proxy jako usługę produkcyjną – z wykorzystaniem TLS, list dopuszczalnych adresów sieciowych oraz rotacji kluczy – ponieważ gromadzi dane uwierzytelniające dostawcy i widzi każde żądanie.

Uwaga dotycząca bezpieczeństwa: traktuj proxy jako usługę produkcyjną – z wykorzystaniem TLS, list dopuszczalnych adresów sieciowych oraz rotacji kluczy – ponieważ gromadzi dane uwierzytelniające dostawcy i widzi każde żądanie.

Uwaga dotycząca bezpieczeństwa: traktuj proxy jako usługę produkcyjną — z wykorzystaniem TLS, list dopuszczalnych adresów sieciowych oraz rotacji kluczy — ponieważ gromadzi dane uwierzytelniające dostawcy i widzi każde zapytanie.

Uwaga dotycząca bezpieczeństwa: traktuj proxy jako usługę produkcyjną — z wykorzystaniem TLS, list dopuszczalnych adresów sieciowych oraz rotacji kluczy — ponieważ gromadzi dane uwierzytelniające dostawcy i widzi każde zapytanie.