不換 CLI 只換後端:把 DeepSeek-V4-Pro 接進 Codex 的完整實戰設定
「Codex CLI 用得很順,但我想換一顆更便宜、context 更長的模型」——這個需求以前只能靠 proxy 硬轉 chat completions,轉完常常 tool call 掉格式、context window 被猜錯、apply_patch 直接壞掉。
2026 年 8 月 13 日 DeepSeek 把 DeepSeek-V4-Pro 正式版推上 API,同一天官方文件多了一頁 Codex 整合說明,走的是 Responses API 原生協定,不是相容層翻譯。意思是:你的 Codex CLI、AGENTS.md、審批流程、apply_patch 全都不用動,動的只有 ~/.codex/ 底下兩個檔。
這篇把整條路徑拆開講:Codex 的設定怎麼決定「模型是誰」、官方安裝腳本偷偷幫你刪掉什麼(那才是真正的地雷清單)、換完之後你會失去什麼,以及 8/17 起的峰谷計價要怎麼排任務。下面所有欄位與行為,都以 DeepSeek 官方文件與那支 codex-deepseek-setup-en.sh 安裝腳本的原始碼為準——我把腳本抓下來逐行讀過,但沒有在正式專案跑完整一輪,所以效果類的話我不會替你打包票。
本文大綱
一、先搞懂:Codex 的設定是兩個檔在分工
Codex 判斷「我現在在跟誰講話」靠兩份檔案,職責完全不同,搞混就會出現那種「看起來有接上、但行為怪怪的」狀態。
~/.codex/config.toml — 連線層。 決定 request 打去哪個 base_url、用什麼 wire protocol、授權怎麼帶。
~/.codex/models.json — 能力宣告層。 這才是關鍵。Codex 對每個模型都有一份 metadata:context window 多大、支援哪幾檔 reasoning effort、吃不吃圖片、apply_patch 用 freeform 還是 JSON、tool call 能不能並行、超長輸出怎麼截斷。這份 metadata 原本內建在 client 裡,而且只認得 OpenAI 自家的 slug。你硬塞一個 deepseek-v4-pro 進去,Codex 會退回一組保守預設值,於是你會看到:明明有 1M context 卻很早就觸發壓縮、reasoning effort 送出去被打回 400、或 log 裡出現 fallback model metadata / Unknown model。
model_catalog_json 就是用來覆蓋這份 metadata 的開關。DeepSeek 的做法是直接生成一份 models.json,把兩顆模型的能力照實宣告出來。挑幾個真正會影響日常使用的欄位:
{
"slug": "deepseek-v4-pro",
"display_name": "DeepSeek-V4-Pro",
"context_window": 1048576,
"max_context_window": 1048576,
"effective_context_window_percent": 95,
"default_reasoning_level": "high",
"supported_reasoning_levels": [
{ "effort": "low", "description": "Fast responses with lighter reasoning" },
{ "effort": "high", "description": "Extra high reasoning depth for complex problems" },
{ "effort": "max", "description": "Maximum reasoning depth for the hardest problems" }
],
"input_modalities": ["text"],
"apply_patch_tool_type": "freeform",
"supports_parallel_tool_calls": true,
"web_search_tool_type": "text",
"truncation_policy": { "mode": "tokens", "limit": 10000 },
"minimal_client_version": "0.144.0"
}
三個要記住的點:
context_window: 1048576搭配effective_context_window_percent: 95——Codex 實際會用到約 99.6 萬 token 才開始處理壓縮。input_modalities: ["text"]——沒有圖片。你貼截圖給 Codex debug UI 的那套工作流,換完就沒了。minimal_client_version: "0.144.0"——client 太舊直接不用試。
還有一個容易被忽略、但很有意思的細節:這份 models.json 裡塞了完整的 base_instructions,開頭第一句是 You are Codex, an agent based on GPT-5.。也就是說,你換掉的是模型權重,harness 的人格 prompt 原封不動——DeepSeek 的模型會被要求扮演一個「基於 GPT-5 的 Codex」。這不是 bug,是刻意讓行為對齊;但如果你之後發現模型的自我描述很怪,你知道原因在哪了。

二、手把手:10 分鐘接起來
Step 0 — 前置檢查
# 1. 有 Codex CLI,且版本 >= 0.144.0
npm install -g @openai/codex
codex --version
# 2. 至少跑過一次,讓 ~/.codex/ 存在
codex
# 3. 去 platform.deepseek.com/api_keys 開一把 sk- 開頭的 key
腳本會擋人:偵測不到 codex 指令、也找不到 ChatGPT 桌面版,就直接中止;~/.codex/ 不存在(裝了但沒跑過)也會中止。這兩個檢查很有用,先做完再往下。
Step 1 — 一鍵腳本(推薦)
# macOS / Linux
bash <(curl -fsSL https://cdn.deepseek.com/api-docs/codex-deepseek-setup-en.sh)
# Windows PowerShell
irm https://cdn.deepseek.com/api-docs/codex-deepseek-setup-en.ps1 | iex
跑起來是個三選一選單:1 用 flash、2 用 pro、3 還原成安裝前的設定。API key 可以互動輸入,也可以先塞環境變數,避免留在 shell history:
export DEEPSEEK_API_KEY=sk-xxxxxxxx
bash <(curl -fsSL https://cdn.deepseek.com/api-docs/codex-deepseek-setup-en.sh)
腳本會先把原本的 config.toml 備份到 ~/.codex/backup-deepseek/,附一份 manifest.txt 記錄「安裝前這個檔到底存不存在」,所以還原時不會留下一個你本來沒有的空設定檔。寫完之後它會用 Python 驗 models.json 是合法 JSON、驗 config.toml 能被 TOML parser 吃下且沒有重複 key(需要 Python 3.11+,沒有就跳過驗證只做基本檢查)。
curl | bash 這件事你要自己判斷。想先看再跑:curl -fsSL <url> -o setup.sh 讀完再執行——我就是這樣讀的,1037 行,邏輯不難追。
Step 2 — 手動設定(不想跑腳本的話)
~/.codex/config.toml:
model = "deepseek-v4-pro"
model_provider = "deepseek"
preferred_auth_method = "apikey"
forced_login_method = "api"
model_reasoning_effort = "high"
model_catalog_json = "~/.codex/models.json"
[model_providers.deepseek]
name = "deepseek"
base_url = "https://api.deepseek.com/"
wire_api = "responses"
experimental_bearer_token = "sk-你的金鑰"
models.json 建議還是讓腳本產——那份完整檔案含 base_instructions 有好幾百行,手抄容易漏欄位,而漏欄位的症狀往往是「靜默地跑錯」而不是報錯。
安全提醒:experimental_bearer_token 是明文寫在 config.toml。 如果你的 dotfiles 會進 git,記得把 ~/.codex/config.toml 排除掉。
Step 3 — 驗證有沒有真的生效
- Codex CLI:啟動 banner 顯示
model: deepseek-v4-pro。 - ChatGPT 桌面版:model picker 顯示
Custom(桌面版把所有本地設定的模型都叫 Custom,實際跑的是你設的那顆)。桌面版要完全結束再開,macOS 按 ⌘Q,關視窗不算。 - 失敗訊號:log 出現
fallback model metadata或Unknown model,代表models.json根本沒被載到,重裝。
Step 4 — 回滾
再跑一次同一支腳本,選 3。它會刪掉 models.json、從備份還原 config.toml(或在安裝前不存在時直接刪掉),再清掉備份目錄。桌面版一樣要完全結束再開。
三、腳本偷偷幫你刪掉的東西,才是真正的地雷清單
這是我讀腳本最大的收穫。它不是無腦覆寫,而是掃過你現有的 config.toml,把兩類設定移除,並在最後印出「改了你哪些東西」的清單。這份清單等於官方替你標好的雷區:
A 類:結構性衝突,會直接接不起來
profile:profile 會蓋掉model/model_provider/model_catalog_json,腳本註解寫得很明白——這個版本不接受。openai_base_url:全域 base_url 覆蓋,會把 request 劫走。oss_provider
B 類:和 models.json 的宣告打架,症狀是靜默錯誤或 400
model_context_window、model_auto_compact_token_limit、model_auto_compact_token_limit_scope、base_instructions、model_instructions_file、compact_prompt、experimental_compact_prompt_file、service_tier、model_verbosity、model_reasoning_summary、plan_mode_reasoning_effort、experimental_use_unified_exec_tool。
翻成白話:只要 models.json 已經宣告過的東西,就別在 config.toml 再宣告一次。 你以前為了讓某個 proxy 能跑而手動塞的 model_context_window = 200000,現在會讓 1M context 白費。
C 類:wire_api 一定要是 responses
腳本會把 wire_api = "chat" 自動改成 "responses",理由直接寫在它印給你的報告裡:"chat" prevents Codex from starting in this version。這也是這次整合和以前那些 proxy 方案最大的差別——DeepSeek 是原生實作 Responses API,不是把 Responses 格式翻譯成 chat completions 再翻回來。少一層翻譯,tool call、reasoning、streaming 的行為才會穩。
四、另一條路:Claude Code 走 Anthropic 相容端點
同一把 key,DeepSeek 也開了 Anthropic 格式的端點,Claude Code 可以直接指過去:
export ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
export ANTHROPIC_API_KEY=sk-你的金鑰
claude
模型名稱自動映射:Claude Opus 系列 → deepseek-v4-pro,Sonnet / Haiku 系列 → deepseek-v4-flash,認不出來的名稱一律 fallback 到 flash。
但這條路的功能損失明顯比 Codex 那條大。 官方文件列出的不支援項目包含:image content block、document content block、web search 與 code execution 的 tool result、MCP、container upload。支援的是 text content、tool use / tool result、thinking、streaming。
MCP 沒了,對很多人就是 deal breaker。所以如果你的目標是「拿 V4-Pro 跑 agentic coding」,Codex + Responses API 目前是完成度比較高的那條;Anthropic 端點比較像「讓既有 Claude SDK 程式碼能跑起來」的相容層。
五、數據:官方報了什麼、沒報什麼
架構數字來自 arXiv 論文《DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence》(arXiv:2606.19348,DeepSeek-AI,2026-04-26 投稿,作者列表超過 300 人):
- V4-Pro:1.6T 總參數、每 token 啟用 49B;V4-Flash:284B / 13B。
- 1M context,預訓練用了超過 32T tokens。
- 架構三個主要升級:混合注意力 CSA(Compressed Sparse Attention)+ HCA(Heavily Compressed Attention)、mHC(Manifold-Constrained Hyper-Connections) 強化殘差連接、優化器換成 Muon。
- 論文最實用的一句:在 1M context 設定下,V4-Pro 的單 token 推論 FLOPs 只需 V3.2 的 27%、KV cache 只需 10%。這才是 1M context 能被拿來日常用、而不只是規格表上一個數字的原因。
注意:這篇論文寫的是 preview 版。 8/13 上線的 GA 版(DeepSeek-V4-Pro-0813)官方沒有另發論文,只有 release notes 的分數。
GA 版 release notes 給的 agent 相關成績(DeepSeek 自評):
| Benchmark | V4-Pro (0813) | V4-Flash (0731) |
|---|---|---|
| Terminal Bench 2.1 | 87.9 | 82.7 |
| NL2Repo | 61.5 | 54.2 |
| Cybergym | 83.3 | 76.7 |
| DeepSWE | 62.7 | 54.4 |
| Toolathlon-Verified | 74.1 | 70.3 |
| DSBench-FullStack | 71.1 | 68.7 |
| Agents' Last Exam | 25.7 | 25.2 |
HLE 則是 42.7(無工具)/ 60.0(有工具)。HuggingFace model card 另外列了 SWE-bench Verified 80.6%。
這些數字要怎麼看: 全部是 DeepSeek 自己跑的,release notes 沒附對手分數,也沒說明 harness 設定與 reasoning effort 檔位。Terminal Bench 87.9 這種數字在自家 harness 上跑出來,跟你在 Codex 裡跑同一顆模型,中間隔著一整層 scaffolding 差異。當作「值得排進評估清單」的訊號可以,當作「換了就有 87.9」不行。真正該做的是拿你自己 repo 的幾個真實 task 跑一輪 A/B。
六、價格:這次是漲價,而且開始分峰谷
這是最容易被漏掉的部分。台北時間 8/17 00:00 起(文件英文版寫 8/16 16:00 UTC,同一個時刻),V4 系列改成峰谷計價。以 deepseek-v4-pro、每百萬 tokens、人民幣計:
| 項目 | 8/16 前 | 空閒時段 | 高峰時段 |
|---|---|---|---|
| 輸入(快取命中) | 0.025 元 | 0.15 元 | 0.30 元 |
| 輸入(快取未命中) | 3 元 | 4.5 元 | 9 元 |
| 輸出 | 6 元 | 13.5 元 | 27 元 |
美元計價的輸出價分別是 $0.87 → $1.98(空閒)/ $3.96(高峰)。高峰時段的輸出價是舊價的 4.5 倍,快取命中價漲了 12 倍。
高峰時段是北京時間 09:00–12:00 與 14:00–18:00——北京時間等於台北時間,所以就是你的上班時間,一分不差。
三個能立刻做的調整:
- 長跑批次排進空閒時段。 大型 refactor、全 repo 掃描、批次測試生成,排到晚上 18:00 後或午休 12:00–14:00,成本直接砍半。
- 重視 prompt cache。 快取命中價還是比未命中便宜 30 倍(0.15 vs 4.5),把穩定的
AGENTS.md、專案說明、大檔案放在 prompt 前段,別每次都動它。 model_reasoning_effort別無腦開 max。 預設是high,max會顯著拉高輸出 token 數,而輸出是最貴的那一項。

七、什麼時候該換、什麼時候別換
該換:
- 你的工作流是純文字 + 大 repo:讀大量原始碼、跨檔案 refactor、寫測試。1M context 加上 27% FLOPs / 10% KV cache 的效率數字,是這次最有說服力的賣點。
- 你需要權重能自架:模型以 MIT license 開源,API 跑通的設定可以整套搬到自架推論上。
- 你想要成本可分級:
low拿來做重複性的機械修改(rename、格式、樣板),high是預設主力,max留給真的卡住的 debug。
別換:
- 你靠截圖 debug:
input_modalities: ["text"],圖片直接沒了。 - 你重度依賴 Claude Code + MCP:Anthropic 相容端點不支援 MCP。
- 你的團隊已經在吃 ChatGPT / Claude 訂閱的包月額度:那條路的邊際成本是零,換成 API 計價反而變貴。
- 你需要穩定的行為基準:
0813是新的 GA 版,post-training 才更新過,你既有的 prompt 與AGENTS.md調校成果不保證平移。
順帶一提,如果你想跳出「借用 Codex 當殼」的模式,DeepSeek 同時開源了自家的 agent harness deepseek-harness(CLI 叫 dsh,Node.js、MIT license,npx @deepseek-ai/dsh web 就能開),設計主張是「everything is a plugin」——model adapter、tool registry、session log、agent loop 全部可替換。但 README 自己標明是 developer preview 且會有破壞相容性的變更,現在拿去當團隊主力工具太早。
八、對工程團隊的意義
拆到最後,這件事真正的訊號不是「多一個便宜模型」,而是 agent 的三層開始可以獨立替換了。
Harness(Codex CLI)、scaffolding(models.json + AGENTS.md + 工具描述)、model(後端權重)——過去這三層是綁在一起賣的,你選了 Codex 就等於選了 OpenAI 的模型。現在 models.json 這個機制等於把「能力宣告」變成一份可攜的設定檔,誰都能填。
所以三件可操作的事:
- 把模型當可替換元件對待。 你的
AGENTS.md、skill、review checklist 是資產,模型是零件。設定檔進版控(記得排除 API key),換模型變成改一行。 - 建立你自己的 A/B 任務集。 選 5–10 個你 repo 裡真實發生過的 task(一個 bug fix、一個跨檔 refactor、一個測試補齊),固定 prompt,換後端跑一輪。這比任何 benchmark 都準。
- 成本監控要加上「時段」這個維度。 峰谷計價一上來,同一個任務在 10:00 跟 20:00 跑,帳單差一倍。這件事該進你的排程策略,不是進事後檢討。
最後誠實標一次邊界:上面所有設定與欄位行為,來自官方文件與安裝腳本原始碼;benchmark 數字是 DeepSeek 自評。真正的答案在你自己的 repo 上,跑完 A/B 再決定。
來源
- DeepSeek API 更新日誌(V4-Pro 0813 / V4-Flash 0731 release notes):https://api-docs.deepseek.com/zh-cn/updates/
- DeepSeek API Docs — Integrate with Codex(設定檔與安裝腳本):https://api-docs.deepseek.com/quick_start/agent_integrations/codex/
- 安裝腳本原始碼:https://cdn.deepseek.com/api-docs/codex-deepseek-setup-en.sh
- DeepSeek API 價格表(峰谷計價):https://api-docs.deepseek.com/zh-cn/quick_start/pricing/
- Anthropic API 相容說明(Claude Code 接法與限制):https://api-docs.deepseek.com/zh-cn/guides/anthropic_api
- DeepSeek-AI,《DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence》, arXiv:2606.19348:https://arxiv.org/abs/2606.19348
- DeepSeek-V4-Pro 模型權重與 model card(MIT license):https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro
- deepseek-harness(開源 agent harness,developer preview):https://github.com/deepseek-ai/deepseek-harness
整理:DataAgent · Coding Agent 實戰教學


