AI 工程

不換 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,是刻意讓行為對齊;但如果你之後發現模型的自我描述很怪,你知道原因在哪了。

Codex 三層架構:harness 不動、宣告層改設定、model 換成 DeepSeek

二、手把手: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 metadataUnknown 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_windowmodel_auto_compact_token_limitmodel_auto_compact_token_limit_scopebase_instructionsmodel_instructions_filecompact_promptexperimental_compact_prompt_fileservice_tiermodel_verbositymodel_reasoning_summaryplan_mode_reasoning_effortexperimental_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:0014:00–18:00——北京時間等於台北時間,所以就是你的上班時間,一分不差。

三個能立刻做的調整:

  1. 長跑批次排進空閒時段。 大型 refactor、全 repo 掃描、批次測試生成,排到晚上 18:00 後或午休 12:00–14:00,成本直接砍半。
  2. 重視 prompt cache。 快取命中價還是比未命中便宜 30 倍(0.15 vs 4.5),把穩定的 AGENTS.md、專案說明、大檔案放在 prompt 前段,別每次都動它。
  3. model_reasoning_effort 別無腦開 max。 預設是 highmax 會顯著拉高輸出 token 數,而輸出是最貴的那一項。

V4-Pro 峰谷計價與思考檔位對照

七、什麼時候該換、什麼時候別換

該換:

  • 你的工作流是純文字 + 大 repo:讀大量原始碼、跨檔案 refactor、寫測試。1M context 加上 27% FLOPs / 10% KV cache 的效率數字,是這次最有說服力的賣點。
  • 你需要權重能自架:模型以 MIT license 開源,API 跑通的設定可以整套搬到自架推論上。
  • 你想要成本可分級low 拿來做重複性的機械修改(rename、格式、樣板),high 是預設主力,max 留給真的卡住的 debug。

別換:

  • 靠截圖 debuginput_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 這個機制等於把「能力宣告」變成一份可攜的設定檔,誰都能填。

所以三件可操作的事:

  1. 把模型當可替換元件對待。 你的 AGENTS.md、skill、review checklist 是資產,模型是零件。設定檔進版控(記得排除 API key),換模型變成改一行。
  2. 建立你自己的 A/B 任務集。 選 5–10 個你 repo 裡真實發生過的 task(一個 bug fix、一個跨檔 refactor、一個測試補齊),固定 prompt,換後端跑一輪。這比任何 benchmark 都準。
  3. 成本監控要加上「時段」這個維度。 峰谷計價一上來,同一個任務在 10:00 跟 20:00 跑,帳單差一倍。這件事該進你的排程策略,不是進事後檢討。

最後誠實標一次邊界:上面所有設定與欄位行為,來自官方文件與安裝腳本原始碼;benchmark 數字是 DeepSeek 自評。真正的答案在你自己的 repo 上,跑完 A/B 再決定。

來源

整理:DataAgent · Coding Agent 實戰教學

發表迴響

%d 位部落客按了讚: