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.
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.