Kiểm tra ngày 2026-11-12

Cấu hình Codex bằng config.toml và một API key trả theo token

Thêm một khối model provider vào ~/.codex/config.toml, điền base_url là https://api.relayswitch.io/v1 và đặt key vào một biến môi trường: cách dùng Codex không đổi. Các model GPT đi qua route Responses và trừ theo token vào số dư trả trước.

01Codex là gì và vì sao đổi được nhà cung cấp

Codex CLI là coding agent chạy trong terminal của OpenAI. Trong cấu hình của nó có mục model_provider, giá trị mặc định là openai, tức request gửi tới API của chính OpenAI. Mục này đổi được: bạn khai báo một provider của riêng mình trong config.toml, ghi địa chỉ API và tên biến môi trường chứa key, rồi trỏ model_provider sang đó. Lệnh và cách dùng Codex giữ nguyên, chỉ có bên tính tiền là khác.

Codex chỉ nói một giao thức là Responses API của OpenAI: tài liệu cấu hình của nó ghi wire_api chỉ hỗ trợ giá trị responses. Vì vậy khi chọn relay cho Codex, việc đầu tiên là xác nhận bên đó có /v1/responses chứ không chỉ /v1/chat/completions. RelaySwitch có cả hai route; Codex dùng route đầu.

02config.toml: một khối model provider

Bốn khóa, và key không nằm trong file. Ghi khối dưới vào ~/.codex/config.toml; thư mục này do biến CODEX_HOME quyết định, mặc định là ~/.codex. Provider phải được khai báo trong file cấp người dùng này.

  • model_provider chọn khối bên dưới theo tên bảng. Tên do bạn tự đặt, nhưng openai, ollama, lmstudio, amazon-bedrock, amazon-bedrock-runtime và gcp là các id Codex giữ riêng, không ghi đè được.
  • base_url điền https://api.relayswitch.io/v1, có /v1; Codex tự ghép /responses vào sau.
  • env_key là tên của biến môi trường chứa key, không phải bản thân key. Key nằm trong biến môi trường nên file cấu hình commit hay đồng bộ đều an toàn.
  • wire_api chỉ có một giá trị dùng được là responses, cũng là giá trị mặc định, nên dòng này bỏ đi cũng được.
  • requires_openai_auth mặc định là false, không cần ghi: provider tự khai báo xác thực bằng key trong env_key, không qua đăng nhập tài khoản OpenAI.
toml
1# ~/.codex/config.toml
2model = "gpt-6.1-sol"
3model_provider = "relayswitch"
4
5[model_providers.relayswitch]
6name = "RelaySwitch"
7base_url = "https://api.relayswitch.io/v1"
8env_key = "RELAYSWITCH_API_KEY"
9wire_api = "responses"

03Đặt key vào biến môi trường rồi chạy codex

Export key ngay trong terminal sẽ chạy Codex, rồi khởi động. Biến chỉ có hiệu lực với cửa sổ terminal đang mở; muốn terminal mới nào cũng có thì thêm dòng export vào file cấu hình của shell.

bash
1export RELAYSWITCH_API_KEY="sk-relay-..."
2codex

04Thử route Responses bằng curl trước

Trước khi mở Codex, gửi một request Responses tối thiểu theo đúng định dạng Codex dùng để chắc key và địa chỉ đều đúng. -i in dòng trạng thái và header của response, trong đó có request id của lần gọi này.

Nhận về 200 thì chạy codex và gửi lệnh đầu tiên; request hiện trong trang Usage của console sau vài giây, kèm số token và số tiền. Muốn tạm đổi model cho một lần chạy thì dùng codex --model kèm id.

bash
1curl -i https://api.relayswitch.io/v1/responses \
2 -H "Authorization: Bearer sk-relay-..." \
3 -H "content-type: application/json" \
4 -d '{"model": "gpt-6.1-sol", "input": "Reply with ok"}'

05Giá các model GPT dùng cho Codex

Codex được thiết kế quanh model GPT và route Responses, nên bảng giá trên trang này là bảng của họ GPT. Giá tính bằng USD cho mỗi triệu token, đọc từ catalog khi trang được dựng; input, cached input và output tính riêng, và giá trong bảng là giá trừ vào số dư. Trước khi ghi một id vào config.toml, hãy thử nó bằng lệnh curl ở mục trên.

Ở mỗi lượt, Codex gửi lại toàn bộ phiên làm việc và kết quả của các tool. Phần token đó khi trúng cache được tính theo giá cached, và response có báo số token cache. Trúng hay không tùy model và tùy request, nên chi phí thực nằm giữa hai mức có cache và không cache. Ba cách giữ chi phí thấp:

  • Việc sửa hằng ngày dùng model giá thấp; việc review và refactor khó mới chuyển sang model đắt.
  • Xong một task thì mở phiên mới, đừng để context dài mãi.
  • Tạo một key riêng cho Codex, đặt ngân sách bằng USD và trần chi tiêu theo ngày: chạm trần thì gateway trả về 402, key đó dừng, phần số dư còn lại của tài khoản không bị đụng tới. Cách đặt ở trang Claude API key.
ModelNhà phát triểnInputOutputContext
GPT-6.1 Solgpt-6.1-solOpenAI$0.582$2.911,050,000
GPT-6 Lunagpt-6-lunaOpenAI$0.0625$0.201,050,000
GPT-6 Solgpt-6-solOpenAI$0.60$3.001,050,000
GPT-6 Astragpt-6-astraOpenAI$3.00$15.001,050,000
GPT-5.6 Lunagpt-5.6-lunaOpenAI$0.12$0.721,050,000
GPT-5.6 Solgpt-5.6-solOpenAI$1.20$3.001,050,000
GPT-5.6 Terragpt-5.6-terraOpenAI$1.20$3.601,050,000
GPT-5.5gpt-5.5OpenAI$1.80$9.001,050,000
GPT-5.4 Minigpt-5.4-miniOpenAI$0.75$4.50400,000
GPT-5.4gpt-5.4OpenAI$1.50$9.001,050,000
GPT-5.3-Codexgpt-5.3-codexOpenAI$1.75$14.00400,000
GPT-4o minigpt-4o-miniOpenAI$0.15$0.60128,000
GPT-4ogpt-4oOpenAI$2.50$10.00128,000
GPT-4.1 Nanogpt-4.1-nanoOpenAI$0.10$0.401,048,576
GPT 5.4 Nanogpt-5.4-nanoOpenAI$0.40$2.50400,000
GPT 5.6gpt-5.6OpenAI$0.9412$4.70591,050,000
GPT 6.1 Terragpt-6.1-terraOpenAI$0.2941$1.47061,000,000
gpt-oss-120bgpt-oss-120bOpenAI$0.20$1.80
gpt-oss-20bgpt-oss-20bOpenAI$0.16$0.72

USD cho mỗi triệu token

06File profile và menu /model

Profile là một file tên ~/.codex/<name>.config.toml, chỉ ghi các khóa khác với config.toml và được áp chồng lên khi bạn chạy codex --profile <name>. Từ Codex 0.134.0, bảng [profiles.<name>] ghi trong config.toml không còn được đọc, và dòng chọn profile ở cấp cao nhất cũng đã bị bỏ; các bài hướng dẫn viết trước đó vẫn theo cách cũ, chép lại sẽ không có tác dụng.

Khi dùng provider tự khai báo, menu /model trong Codex vẫn liệt kê các model OpenAI có sẵn của nó chứ không phải model của provider bạn. Chọn một mục sẽ ghi đè file profile hiện tại: model đổi, provider thì không. Id được ghi vào nếu có trong catalog thì request chạy tiếp theo giá của model đó, không có thì trả về 404. Vì vậy hãy đổi model bằng --profile hoặc --model. Giá trị của model_reasoning_effort do Codex gửi kèm từng request và gateway chuyển nguyên vẹn tới model.

07Lỗi thường gặp với Codex

Các mã từ 401 đến 404 được trả về trước khi request tới model; 429, 502 và 503 không trả nội dung nào. Tất cả đều không bị tính tiền. Bảng mã lỗi đầy đủ ở trang OpenAI API. Muốn viết code bằng Claude trong terminal thì dùng Claude Code; cả hai dùng chung một key và một số dư.

401Key sai hoặc đã bị thu hồi, hoặc biến RELAYSWITCH_API_KEY đang trống trong terminal chạy Codex. Export lại rồi khởi động lại.
402Hết số dư, hoặc key đã dùng hết ngân sách đặt trên nó. Nạp thêm hoặc nâng ngân sách là chạy lại ngay.
404Id model không có trong catalog, thường do menu /model đã ghi đè profile. Sửa lại dòng model.
429Key chạm giới hạn tốc độ. Chờ số giây ghi trong header retry-after, hoặc nâng số request mỗi phút của key trong console.
Khối provider không có tác dụngTên bảng trùng một id Codex giữ riêng, hoặc model_provider không ghi đúng tên bảng đó.
Profile không có tác dụngNó vẫn là bảng [profiles.<name>] trong config.toml; chuyển các khóa trong đó sang một file riêng.

Câu hỏi thường gặp

Codex là gì?
Codex CLI là coding agent chạy trong terminal của OpenAI. Mặc định nó gửi request tới API của OpenAI, nhưng mục model_provider trong config.toml cho phép trỏ nó sang một provider khác; trang này dùng cách đó để Codex chạy trên số dư trả trước của RelaySwitch.
Cấu hình Codex với relay như thế nào?
Thêm khối [model_providers.relayswitch] vào ~/.codex/config.toml với name, base_url (https://api.relayswitch.io/v1) và env_key (RELAYSWITCH_API_KEY), đặt model_provider ở cấp cao nhất thành "relayswitch" và model thành một id GPT trong catalog. Export key vào biến môi trường rồi chạy codex.
Có cần tài khoản ChatGPT hay API key của OpenAI không?
Theo tài liệu cấu hình của Codex, provider tự khai báo có requires_openai_auth mặc định là false: request được xác thực bằng key trong biến môi trường mà env_key trỏ tới. Tài khoản và số dư đều nằm ở RelaySwitch, key bắt đầu bằng sk-relay-.
base_url có cần /v1 không, wire_api điền gì?
base_url điền https://api.relayswitch.io/v1, có /v1; Codex tự ghép /responses vào sau. wire_api chỉ có một giá trị dùng được là responses, cũng là mặc định, nên bỏ dòng này đi cũng được. Cách ghi wire_api = "chat" trong các bài hướng dẫn cũ không còn dùng được.
Làm sao biết relay không lặng lẽ đổi sang model yếu hơn?
Tự kiểm tra được bằng hai thứ. Mỗi model nhận cùng một prompt kiểm tra mỗi ngày, câu trả lời được so với các lần trước và kết quả công bố tại https://api.relayswitch.io/v1/proof. Mỗi request có một biên nhận có chữ ký số ghi id model, số token tính tiền và số tiền. Mức model_reasoning_effort do Codex gửi kèm request và gateway chuyển nguyên vẹn tới model.
Codex tốn token quá, giảm chi phí thế nào?
Mỗi lượt Codex gửi lại phiên làm việc và kết quả tool, nên tiền nằm chủ yếu ở input và cached input. Ba cách: việc hằng ngày dùng model giá thấp, việc khó mới chuyển sang model đắt; xong task thì mở phiên mới để context không dài mãi; đặt ngân sách USD và trần theo ngày cho key của Codex, chạm trần là dừng.

Một khối provider, một biến môi trường

base_url https://api.relayswitch.io/v1, model GPT tính theo giá trong catalog, mỗi model được kiểm tra công khai mỗi ngày.