Codex 自定义模型上下文窗口改为 1M(DeepSeek / ccx 代理)
最近烦恼codex上下文太短,技术一般,所以一直没设置成功。但最近发现了问题,成功设置。给大家分享一下方法。
适用环境:Codex 桌面版(Windows)+ 自定义 provider + 本地代理(ccx,localhost:3000)+ 模型 deepseek-v4-flash(DeepSeek 上下文 1M)。
1. 问题现象
- 界面上的"上下文窗口占用"显示258k,而不是 1M。
- 在 config.toml 里写
model_context_window = 1000000之后重启,仍然显示 258k。
2. 根本原因
Codex 内置模型列表里没有 deepseek-v4-flash 这个自定义模型,所以它使用了"fallback 模型元数据":
- context_window = 272000
- effective_context_window_percent = 95
- 有效窗口 = 272000 × 95% =258400(即界面显示的 258k)
而 config.toml 里的 model_context_window 虽然会被读取,但会被该 fallback 元数据的 max_context_window = 272000封顶,所以设 1M 也会被压回 272000 → 258k。
解决办法:通过官方支持的 model_catalog_json 配置项,给 Codex 提供一份自定义模型目录,里面明确定义 deepseek-v4-flash 的上下文窗口,绕开 fallback。
3. 修改步骤(只需两步 + 重启)
3.1 新建模型目录文件
新建文件:C:\Users\<你的用户名>\.codex\model_catalog.json
内容(DeepSeek 1M 配置):
{"models":[{"slug":"deepseek-v4-flash","display_name":"DeepSeek V4 Flash","description":"DeepSeek V4 Flash via ccx","default_reasoning_level":"high","supported_reasoning_levels":[{"effort":"high","description":"reasoning"}],"shell_type":"shell_command","visibility":"list","supported_in_api":true,"priority":99,"additional_speed_tiers":[],"service_tiers":[],"default_service_tier":null,"availability_nux":null,"upgrade":null,"base_instructions":"You are Codex, a coding agent.","model_messages":null,"include_skills_usage_instructions":false,"support_verbosity":false,"default_verbosity":null,"apply_patch_tool_type":null,"truncation_policy":{"mode":"tokens","limit":10000},"supports_parallel_tool_calls":true,"supports_image_detail_original":false,"context_window":1000000,"max_context_window":1000000,"effective_context_window_percent":95,"experimental_supported_tools":[],"input_modalities":["text"],"supports_search_tool":false,"use_responses_lite":false}]}关键字段说明:
- context_window:模型的上下文窗口(token 数)。
- max_context_window:允许配置覆盖的上限,必须 ≥ context_window(否则 model_context_window 配置会被它封顶)。
- effective_context_window_percent:实际可用比例。Codex 会预留系统提示/工具/输出的空间。
- 95 → 有效窗口 = 1000000 × 95% =950000(界面显示 950k,推荐,留有余量)
- 100 → 有效窗口 = 1000000(界面显示 1000k / 1M)
- slug 必须和 config.toml 里的
model = "deepseek-v4-flash"完全一致。
3.2 在 config.toml 里启用
打开C:\Users\<你的用户名>\.codex\config.toml,在顶层(第一个[xxx]段落之前)加一行:
model_catalog_json = "C:/Users/<你的用户名>/.codex/model_catalog.json"路径里的反斜杠要么写两个(\),要么直接用正斜杠(/),如上例。
改完后顶层大致长这样:
model_context_window = 1000000 model_catalog_json = "C:/Users/<你的用户名>/.codex/model_catalog.json" model_provider = "custom" model = "deepseek-v4-flash" ...model_context_window = 1000000 可以保留(现在不会被封顶),也可以删掉,效果一样。
3.3 重启 Codex
必须完全退出Codex 应用再重新打开(配置只在启动时加载)。确认任务栏/托盘没有残留进程。
4. 如何验证
- 界面上的上下文窗口占用应显示950k(或 1M,取决于 effective_context_window_percent)。
- 也可以用命令行验证(在任意目录执行):
codex debug models输出中应包含 deepseek-v4-flash,且字段为:
"context_window":1000000,"max_context_window":1000000,"effective_context_window_percent":955. 注意事项
- model_catalog_json 指定的目录会在启动时替换内置模型目录,模型选择器里只会显示该目录中的模型。本项目只使用 DeepSeek,不影响使用。
- 文件必须是 UTF-8 编码(无 BOM),JSON 语法不能错,否则 Codex 启动时报错。
- 不同电脑需要先有相同的 DeepSeek 代理配置([model_providers.custom] 指向 http://localhost:3000/v1),本说明只解决"上下文窗口显示 258k"的问题。
- 如果模型名称不是 deepseek-v4-flash,把 JSON 里的 slug、display_name 和 config.toml 里的 model 改成实际名称即可。
6. 如何恢复原状
- 删除 config.toml 里的
model_catalog_json = ...这一行。 - 删除 model_catalog.json 文件(可留,不影响)。
- 重启 Codex,即可回到原来的 258k 状态。