Responses API で Codex を外部モデルに接続する
現在の Codex が対応するのは Responses プロトコルのみです。設定、環境変数、API の確認手順と、Chat Completions しか提供しないゲートウェイへの対処を説明します。
先に結論
現在の Codex の wire_api は "responses" のみ対応しています。 "chat" は削除されており、指定すると起動時に設定エラーになります。KimiSeek は /v1/responses を提供するため、以下の設定で直接接続できます。
30 秒でわかる判断表
| ゲートウェイの対応状況 | 対処 |
|---|---|
/v1/responses を提供 | "responses" を使用 |
/v1/chat/completions のみ | Responses 対応のゲートウェイ、または Responses を公開する変換層を使用 |
| 不明 | 下のコマンドでパスと応答本文を確認 |
Codex がデフォルトで responses を使う理由
Codex は /responses にリクエストを送り、Responses のツール呼び出しとストリーミングイベントを処理します。Chat Completions はリクエストとイベントの構造が異なり、wire_api の変更だけでは現在の Codex から利用できません。モデルの能力は上流とゲートウェイの実装にも依存し、API の疎通成功だけで全ツールの動作が確認できるわけではありません。
前提条件
- Node.js 20 以上
- Codex CLI:
npm install -g @openai/codex - KimiSeek の API Key(
ks-で始まる)。ダッシュボードで作成
Step 1 · 設定ファイルを書く
設定ファイルは ~/.codex/config.toml にあります。なければ新規作成します:
model = "deepseek-v4-pro-0813"
model_provider = "kimiseek"
[model_providers.kimiseek]
name = "KimiSeek"
base_url = "https://api.kimiseek.app/v1"
env_key = "KIMISEEK_API_KEY"
wire_api = "responses"つまずきやすいポイントは 3 つ:
base_urlには必ず/v1を付ける。Codex はbase_urlの後ろにそのまま/responsesを連結します。/v1を書き忘れるとhttps://api.kimiseek.app/responsesにリクエストが飛び、404 になります。env_keyは環境変数名であり、key そのものではない。ここに書くのは変数名KIMISEEK_API_KEYで、実際の値は環境変数に入れます。modelは catalog に実在する id を使う。間違えるとmodel not foundになります。廃止済みのモデルでも同じエラーになります。
Step 2 · 環境変数を設定して起動
export KIMISEEK_API_KEY="ks-your-key"
codex一時的にモデルを変えたいなら、config.toml の model を直接書き換えるか、codex --model <id> で上書きします。
Step 3 · key が有効か確認する
curl https://api.kimiseek.app/v1/models \
-H "Authorization: Bearer ${KIMISEEK_API_KEY:?Set KIMISEEK_API_KEY before running this command}"応答にモデル一覧が含まれていれば、key とネットワークの両方に問題はありません。このステップの意味は「認証の問題」と「プロトコルの問題」を切り分けることです。そうしないと、404 が出たときに key が悪いのかパスが悪いのか判断できません。
Step 4 · 30 秒で responses を検証する
curl https://api.kimiseek.app/v1/responses \
-H "Authorization: Bearer ${KIMISEEK_API_KEY:?Set KIMISEEK_API_KEY before running this command}" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4-pro-0813",
"input": "Explain what a base URL is in one sentence.",
"max_output_tokens": 256,
"stream": false
}'- HTTP 200 と
output配列を含む JSON → Responses のルートは利用可能。次に実際のタスクとツール呼び出しを確認します。 - HTTP 404 →
base_urlの/v1を確認し、応答本文でルートとモデルのどちらが見つからないのかを調べます。ステータスだけでは判断できません。 - HTTP 401 → Step 3 に戻り、認証情報を確認します。
Chat Completions しか提供されない場合
wire_api = "responses" のまま、/v1/responses を提供するゲートウェイか、互換性のある変換層を使います。削除済みの "chat" に変更しないでください。
よくあるエラー
| エラー | 原因 | 対処 |
|---|---|---|
unexpected status 401 Unauthorized: Missing bearer | env_key が指す環境変数が未設定、または変数名の typo | KIMISEEK_API_KEY が現在の shell で見えるか確認する |
unexpected status 404 Not Found | base_url に /v1 がない、またはゲートウェイに /v1/responses がない | /v1 とエラー本文を確認。Responses がない場合は対応ゲートウェイか変換層を使用 |
stream disconnected before completion | ストリーミング応答が途中で切れた:ローカルプロキシ、社内ゲートウェイ、タイムアウト | HTTP プロキシ設定を確認し、別のネットワークで再試行する |
model not found | model が alias 以外の誤った名前、または廃止済み id | catalog の完全な id を使う(例:deepseek-v4-pro-0813) |
プロトコル層のエラーは他にもあります。エラー対照表 を参照してください。
コスト
Codex の利用特性は、入力が出力よりはるかに大きいことです。実行のたびに context を送り直すためです。DeepSeek V4 Pro の価格は peak と off-peak の 2 段階で、人民元建て・100 万 tokens あたりです:
| 時間帯 | 入力 | キャッシュ入力 | 出力 |
|---|---|---|---|
| off-peak | ¥4.5 | ¥0.45 | ¥13.5 |
| peak | ¥9 | ¥0.9 | ¥27 |
peak と off-peak の差はちょうど 2 倍です。バッチ的なリファクタリングを off-peak に回せば半分に抑えられます。具体的なモデルとリアルタイムの価格は 料金ページ を参照してください。あそこはモデルカタログの設定を直接読んでいます。
対応バージョンと検証
Codex CLI 0.154.0 で設定を確認しました(2026-10-26)。プロトコルの対応状況は公式設定リファレンスを参照してください。
よくある質問
中継サービスを使う場合、Codex-Bridge のようなブリッジツールは必要ですか?
不要です。ブリッジツールの存在意義は、Responses リクエストをローカルで Chat Completions に変換して送り出すことで、「chat completions しか実装していない」ゲートウェイに対処することです。KimiSeek は /v1/responses を自分で実装しているので、ブリッジ層はむしろホップが 1 つ増え、故障点が 1 つ増えるだけになります。
base_url に必ず /v1 を付けなければならないのはなぜですか?
Codex が base_url をそのまま連結してルートを作るからです:base_url + "/responses"。https://api.kimiseek.app と書くと https://api.kimiseek.app/responses に飛びますが、それは API ではなくサイトのページです。
現在の Codex で wire_api = "chat" を使えますか?
使えません。現在のバージョンは起動時にこの値を拒否します。responses を使い、Chat Completions のみの上流には対応ゲートウェイか変換層を用意してください。
同じ key を Claude Code と Codex の両方に設定できますか?
できます。key はアカウント単位で、2 つのクライアントは同じ key を異なるプロトコル経路で呼び出しているだけです。設定方法は Claude Code チュートリアル を参照してください。