Cấu hình mô hình bên thứ ba cho Codex CLI: kiểm tra API và khởi động Profile
Cấu hình đã được lưu chưa có nghĩa là Codex CLI thật sự gọi đúng mô hình. Cần kiểm tra lần lượt danh mục mô hình, phản hồi API có nội dung nhìn thấy được, Profile được nạp và luồng gọi công cụ đã bắt đầu.
Ngày 13 tháng 11 năm 2026, bài kiểm tra được thực hiện trên Windows PowerShell với Codex CLI 0.168.0, mô hình deepseek-v4.1-flash, Base URL https://api.crazyrouter.com/v1 và biến môi trường CRAZYROUTER_API_KEY.
Kiểm tra phiên bản Codex CLI và danh mục mô hình
Chạy lệnh sau trong PowerShell:
codex --version
Kết quả trong lần kiểm tra này là codex-cli 0.168.0.

Lệnh phiên bản trả về bình thường cho biết Codex CLI đã được cài đặt. Nếu phiên bản cũ hơn đáng kể, nên cập nhật trước khi áp dụng các trường cấu hình mới.
Bước tiếp theo là kiểm tra danh mục mô hình mà tài khoản hiện tại có thể truy cập. Yêu cầu danh mục trả về HTTP 200 và 170 mô hình. Trong 12 ID từ danh sách cũ, chỉ có 7 ID còn khớp:
| Nhóm mô hình | ID tìm thấy trong danh mục hiện tại |
|---|---|
| DeepSeek | deepseek-v4-pro, deepseek-v4-flash, deepseek-v4.1-flash |
| Kimi | kimi-k2.8-preview, kimi-k2.7-code |
| GLM | glm-5.3, glm-5.3-flash |
Năm ID không tìm thấy là doubao-seed-2.1-pro, doubao-seed-2.1-lite, doubao-seed-2.0-mini, doubao-seed-evolving và minimax-m3.

HTTP 200 ở bước này chỉ chứng minh có thể truy cập danh mục. Nó không chứng minh mọi mô hình trong danh sách đều trả lời được yêu cầu suy luận.
Tách cấu hình Provider và Profile
Trong config.toml, cấu hình Provider và cách xác thực bằng các trường sau:
| Vị trí | Trường | Giá trị trong lần kiểm tra |
|---|---|---|
| Cấp cao nhất | model |
"deepseek-v4.1-flash" |
| Cấp cao nhất | model_provider |
"crazyrouter" |
| Cấp cao nhất | forced_login_method |
"api" |
[model_providers.crazyrouter] |
name |
"Crazyrouter Gateway" |
[model_providers.crazyrouter] |
base_url |
"https://api.crazyrouter.com/v1" |
[model_providers.crazyrouter] |
wire_api |
"responses" |
[model_providers.crazyrouter] |
env_key |
"CRAZYROUTER_API_KEY" |
Có thể đối chiếu địa chỉ dịch vụ trong hướng dẫn tích hợp Crazyrouter. Base URL dừng ở /v1; không nối thêm /responses hoặc /chat/completions vào config.toml, vì Codex hoặc chương trình kiểm tra sẽ tự ghép đường dẫn yêu cầu.
Trong cùng thư mục với config.toml, tạo tệp ds41-flash.config.toml chỉ chứa hai giá trị ghi đè:
model = "deepseek-v4.1-flash"
model_provider = "crazyrouter"

config.toml giữ địa chỉ gateway và cách xác thực. Profile chỉ chọn mô hình và Provider. Khi cần đổi mô hình, có thể thêm một Profile nhỏ thay vì sao chép toàn bộ khối Provider.
Lưu API Key bằng biến môi trường
Trong phần biến người dùng của Windows, tạo biến CRAZYROUTER_API_KEY và điền API Key được tạo ở gateway. Sau khi lưu, đóng cửa sổ PowerShell cũ rồi mở cửa sổ mới; tiến trình đang chạy không tự nhận biến người dùng vừa thêm.
Chỉ kiểm tra biến có tồn tại hay không:
if ([string]::IsNullOrWhiteSpace($env:CRAZYROUTER_API_KEY)) { "chưa đặt" } else { "đã đặt" }
Không chạy echo $env:CRAZYROUTER_API_KEY, không đưa khóa đầy đủ vào ảnh chụp hoặc nhật ký lỗi. Kết quả “đã đặt” chỉ cho biết PowerShell đọc được biến; yêu cầu API mới xác minh khóa có hợp lệ hay không.
HTTP 200 chưa đủ, phản hồi phải có nội dung
Prompt kiểm tra chỉ yêu cầu mô hình trả lời OK. Kết quả của deepseek-v4.1-flash như sau:
| API | Trạng thái | Thời gian | Token đầu vào | Token đầu ra | Nội dung nhìn thấy |
|---|---|---|---|---|---|
| Responses | 200 | 2249 ms | 35 | 30 | OK |
| Chat Completions | 200 | 2394 ms | 35 | 38 | OK |

Hai yêu cầu đều trả về HTTP 200 và có nội dung OK. Trong cấu hình Codex, giá trị dùng cho wire_api vẫn là "responses".
Kết quả với glm-5.3-flash cho thấy không nên chỉ nhìn mã trạng thái. Khi giới hạn đầu ra là 16 token, gần như toàn bộ phần đầu ra bị quá trình suy luận sử dụng và không có OK cuối cùng. Tăng giới hạn lên 64 token vẫn không có câu trả lời nhìn thấy được. Kết luận phù hợp chỉ là xác thực và định tuyến đã hoạt động; tham số được thử chưa tạo ra phần nội dung có thể sử dụng.
Hai yêu cầu DeepSeek ngắn đều dùng 35 token đầu vào. Responses tạo 30 token đầu ra, còn Chat Completions tạo 38 token. Phiên Codex đầy đủ dùng 91.635 token đầu vào và 850 token đầu ra vì phải nạp ngữ cảnh phiên và thử gọi công cụ. Do đó, nên kiểm tra API ngắn trước khi chạy cả phiên Codex.
Khởi động Codex bằng Profile
Trong thư mục dự án, chạy:
codex --profile ds41-flash
Sau khi khởi động, kiểm tra tên mô hình và Provider. --profile giữ cả hai giá trị, trong khi chỉ truyền -m không thay thế đầy đủ lựa chọn Provider.
Tác vụ kiểm tra yêu cầu Codex đọc README.md của dự án hiện tại và trả về mục đích của dự án. Bản ghi phiên thật cho thấy:
- Profile
ds41-flashđã được nạp. - Mô hình được chọn là
deepseek-v4.1-flash. - Codex đã bắt đầu thread và turn.
- Mô hình lần lượt thử
Get-Content -LiteralPath README.md -TotalCount 60,cmd /c dir,echo hivàGet-Content README.md. - Chính sách lệnh trên máy đã từ chối cả bốn lệnh nên nội dung tệp chưa được đọc.

Kết quả này chứng minh Profile đã nạp, yêu cầu mô hình đã xảy ra và luồng gọi công cụ đã bắt đầu. Không thể viết rằng Codex đã hoàn thành tác vụ đọc tệp. Điểm lỗi còn lại nằm ở sandbox, quy trình phê duyệt hoặc chính sách lệnh trên máy.
Phiên chạy cũng xuất hiện cảnh báo Model metadata not found; using fallback metadata. Khi mô hình bên thứ ba không có trong danh mục tích hợp của Codex, chương trình có thể dùng metadata dự phòng. Nếu cảnh báo vẫn còn, không nên mặc định cửa sổ ngữ cảnh, cờ tính năng hoặc ước lượng token hoàn toàn trùng với tham số công bố của mô hình.
Xử lý lỗi theo đúng lớp
| Hiện tượng | Kiểm tra trước | Cách xử lý |
|---|---|---|
401 Unauthorized |
Biến môi trường và trạng thái API Key | Mở lại PowerShell, kiểm tra biến và tài khoản gateway |
model not found |
ID có trong danh mục hiện tại hay không | Sao chép đúng ID, không dùng danh sách cũ |
| HTTP 200 nhưng nội dung trống | Giới hạn đầu ra | Tăng giới hạn hoặc đổi mô hình, không ghi nhận là đã hoàn thành |
| Codex dùng sai mô hình | Tên Profile, model, model_provider |
Đối chiếu lại cả ba giá trị |
| Cảnh báo metadata dự phòng | Mô hình có trong danh mục tích hợp của Codex hay không | Chỉ kết luận theo hành vi đã kiểm tra |
| Lệnh công cụ bị từ chối | Sandbox, phê duyệt và chính sách lệnh | Xử lý quyền rồi chạy lại cùng tác vụ |
| Sửa cấu hình nhưng không thay đổi | Cửa sổ terminal hoặc phiên cũ | Thoát Codex, mở PowerShell mới và khởi động lại |
Kết luận
Lần kiểm tra này xác nhận ba lớp: danh mục mô hình có thể truy cập, deepseek-v4.1-flash trả về nội dung nhìn thấy được qua hai API, và Profile ds41-flash đi vào luồng gọi công cụ của Codex.
Cách cấu hình chính là định nghĩa Provider một lần trong config.toml, giữ tên mô hình trong Profile riêng và khởi động bằng codex --profile ds41-flash. Tác vụ đọc README.md chưa hoàn thành vì bốn lệnh đều bị chính sách trên máy từ chối; cần xử lý lớp quyền này trước khi chạy lại cùng tác vụ.
Tài liệu tham khảo: tài liệu Crazyrouter, tham chiếu cấu hình Codex và tham chiếu lệnh Codex CLI.
All rights reserved