☰
codex接入DeepSeek模型基础教程:models.json与config.toml配置到TaoToken
2026/10/17 13:54:15 网站建设 项目流程

1. Codex 接入 DeepSeek 模型时 models.json 与 config.toml 到底改什么

Codex 是 OpenAI 推出的本地编码代理工具,它能在你的终端里读写文件、跑命令、改代码,适合习惯命令行工作流的开发者。它默认走 OpenAI 官方通道,但 Codex 从 0.144.0 版本开始支持自定义模型目录(model catalog),也就是说你可以把 DeepSeek 这类第三方模型注册进去,让 Codex 用 DeepSeek 来干活。这篇教程要解决的就是:怎么通过models.json和config.toml两个文件,把 DeepSeek 模型接进 Codex,并且把 endpoint 统一改到 TaoToken 的 Key/API 通道,省得你到处散落不同平台的密钥。

很多人第一次配 Codex 会卡在两个地方。第一是不知道models.json放哪、字段哪些必填;第二是config.toml里model_provider和model_catalog_json的对应关系搞不清,改完重启发现模型列表里根本没有 DeepSeek。我实测下来,只要这两个文件路径和字段对齐,重启 Codex 就能在模型选择里看到DeepSeek-V4-Flash和DeepSeek-V4-Pro。

适合读这篇的人:已经在用 Codex 做日常编码、想换成 DeepSeek 推理模型的开发者;或者手里有 TaoToken 统一 Key、想把多个模型通道收敛到一个 endpoint 的人。整篇按「先讲清楚文件结构 → 给可复制配置 → 验证请求 → 排错」的顺序走,每一步都能直接抄。

先明确一个概念:Codex 的模型配置分两层。models.json是模型能力描述文件,告诉 Codex 这个模型支持多长的上下文、支不支持并行工具调用、推理等级有哪些;config.toml是运行时配置,指定当前用哪个模型、走哪个 provider、API Key 填在哪。两者缺一不可,只改一个不会生效。

2. TaoToken 前置准备:统一 Key 与 API 通道怎么拿

在动 Codex 配置文件之前,先把 Key 和 endpoint 准备好。TaoToken 的作用是把多个模型的调用收敛到一个 API 通道,你只需要一个 Key 就能访问包括 DeepSeek 在内的模型,不用在每个平台单独注册、单独管密钥。对 Codex 这种要频繁发请求的工具来说,统一通道能省掉不少切换成本。

第一步是拿 Key。打开 TaoToken 控制台的 API Keys 页面(https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite),登录后点创建,复制生成的 Key,形如sk-开头的一串字符。这个 Key 待会要填进config.toml的experimental_bearer_token字段。注意别把它提交到 Git 仓库,建议放在本地配置文件里,或者用环境变量注入。

第二步是确认 API 通道地址。TaoToken 的 API 基址是https://taotoken.net/api,这个地址不加任何查询参数,直接作为base_url用。Codex 的wire_api字段要设成responses,因为 Codex 走的是 Responses API 格式,DeepSeek 通过 TaoToken 通道也按这个格式对接。

第三步是确认模型 ID。TaoToken 通道里 DeepSeek 对应的模型标识要和models.json里的slug对齐。本文用的是deepseek-v4-flash(快速版)和deepseek-v4-pro(能力版),你在config.toml的model字段填哪个 slug,Codex 启动后就默认用哪个。

如果你还想在接入前先手动验证一下模型能不能通,可以打开模型对话页面(https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_content=model_chat&utm_campaign=rewrite)发一条测试消息,确认 Key 有效、通道正常,再去配 Codex,这样排错时能少一个变量。接入文档在 https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite,字段含义对不上时可以对照查。

注意:Key 只在创建时完整显示一次,关掉页面就看不到了。如果没存下来,直接删掉重建一个,别在配置文件里反复试旧 Key。

3. 可复制配置:models.json 与 config.toml 完整片段

这一节是核心,两个文件的完整内容都给出来,路径和字段按 Codex 0.144.0 的约定写。先建目录,Codex 默认读~/.codex/下的配置,Windows 上是%USERPROFILE%\.codex\。

先写models.json。这个文件放在~/.codex/models.json,内容是模型能力描述。下面给的是精简可用版,保留了 Codex 识别模型必需的字段,去掉了大段 instructions 模板(那部分 Codex 有内置默认值,不写也能跑):

{ "models": [ { "slug": "deepseek-v4-flash", "prefer_websockets": false, "support_verbosity": true, "default_verbosity": "low", "apply_patch_tool_type": "freeform", "web_search_tool_type": "text", "input_modalities": ["text"], "supports_image_detail_original": false, "truncation_policy": { "mode": "tokens", "limit": 10000 }, "supports_parallel_tool_calls": true, "tool_mode": null, "multi_agent_version": "v2", "use_responses_lite": false, "include_skills_usage_instructions": false, "auto_review_model_override": null, "context_window": 1048576, "max_context_window": 1048576, "effective_context_window_percent": 95, "auto_compact_token_limit": null, "comp_hash": "3000", "reasoning_summary_format": "experimental", "default_reasoning_summary": "none", "display_name": "DeepSeek-V4-Flash", "description": "Latest frontier agentic coding model.", "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" } ], "shell_type": "shell_command", "visibility": "list", "minimal_client_version": "0.144.0", "supported_in_api": true, "availability_nux": null, "upgrade": null, "priority": 1, "experimental_supported_tools": [], "supports_search_tool": true, "default_service_tier": null, "supports_reasoning_summaries": true }, { "slug": "deepseek-v4-pro", "prefer_websockets": false, "support_verbosity": true, "default_verbosity": "low", "apply_patch_tool_type": "freeform", "web_search_tool_type": "text", "input_modalities": ["text"], "supports_image_detail_original": false, "truncation_policy": { "mode": "tokens", "limit": 10000 }, "supports_parallel_tool_calls": true, "tool_mode": null, "multi_agent_version": "v2", "use_responses_lite": false, "include_skills_usage_instructions": false, "auto_review_model_override": null, "context_window": 1048576, "max_context_window": 1048576, "effective_context_window_percent": 95, "auto_compact_token_limit": null, "comp_hash": "3000", "reasoning_summary_format": "experimental", "default_reasoning_summary": "none", "display_name": "DeepSeek-V4-Pro", "description": "Most capable frontier agentic coding model.", "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" } ], "shell_type": "shell_command", "visibility": "list", "minimal_client_version": "0.144.0", "supported_in_api": true, "availability_nux": null, "upgrade": null, "priority": 2, "experimental_supported_tools": [], "supports_search_tool": true, "default_service_tier": null, "supports_reasoning_summaries": true } ] }

几个字段值得单独说。slug是模型唯一标识,config.toml里的model必须和它完全一致,大小写都不能错。context_window和max_context_window都设成 1048576,effective_context_window_percent设 95,意思是实际可用上下文是窗口的 95%,留 5% 给系统提示和工具输出。supported_reasoning_levels定义了 low/high/max 三档推理强度,config.toml里的model_reasoning_effort只能填这三者之一。visibility设成list才会出现在 Codex 的模型选择列表里,设成别的值模型会被隐藏。

再写config.toml,放在~/.codex/config.toml:

model = "deepseek-v4-flash" 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://taotoken.net/api" wire_api = "responses" experimental_bearer_token = "sk-你的TaoTokenKey"

这里model_provider的值deepseek要和下面[model_providers.deepseek]的表名对应。base_url填 TaoToken 的 API 地址https://taotoken.net/api,这样请求就走统一通道。wire_api必须是responses,填chat会报格式不匹配。experimental_bearer_token填你从控制台复制的 Key。model_catalog_json指向刚才写的models.json,路径用~开头,Codex 会展开成用户目录。

注意:model_catalog_json的路径在 Windows 上建议写成绝对路径,比如C:\\Users\\你的用户名\\.codex\\models.json,用~有时展开不对。

4. 验证请求:重启 Codex 后发一次对话确认接入生效

配置文件写完,必须重启 Codex 才会重新加载。这一步很多人漏掉,改完文件直接在原会话里试,结果还是旧模型。正确做法是先杀掉 Codex 进程,再重新启动。

在 macOS 或 Linux 上,用pkill结束进程:

pkill -f codex

在 Windows PowerShell 上:

Get-Process codex -ErrorAction SilentlyContinue | Stop-Process -Force

确认进程没了之后,重新在终端里启动 Codex:

codex

启动后先看模型列表有没有加载成功。在 Codex 交互界面里输入/model,应该能看到DeepSeek-V4-Flash和DeepSeek-V4-Pro两个选项。如果只看到默认的 GPT 系列,说明models.json没被读到,回去检查model_catalog_json路径。

选中DeepSeek-V4-Flash,然后发一条测试请求,比如:

帮我在当前目录建一个 hello.py,打印当前时间

Codex 会调用 DeepSeek 模型,返回一段 Python 代码并询问是否写入文件。你确认后它执行apply_patch创建文件。整个过程如果走通,说明接入生效。想更直接验证通道,可以在终端里用 curl 打一次 TaoToken 的 API:

curl https://taotoken.net/api/v1/responses \ -H "Authorization: Bearer sk-你的TaoTokenKey" \ -H "Content-Type: application/json" \ -d '{ "model": "deepseek-v4-flash", "input": "用一句话说明你是什么模型" }'

返回 JSON 里如果有output字段且内容正常,说明 Key 和通道都没问题。这一步能把「Codex 配置问题」和「Key/通道问题」分开,排错时很有用。

实测下来,从改完配置到看到 DeepSeek 正常回话,整个过程不超过两分钟,前提是路径和字段没写错。如果 Codex 启动时报failed to load model catalog,基本就是models.json的 JSON 语法错了,用python -m json.tool ~/.codex/models.json校验一下。

5. 本篇常见错排查:401、local proxy failed、reading choices 怎么解

配 Codex 接 DeepSeek 时,报错集中在几个固定位置。下面按真实报错逐条给排查路径。

401 Unauthorized。最常见,原因是experimental_bearer_token里的 Key 不对或过期。先确认 Key 是从 TaoToken 控制台复制的完整字符串,没有多余空格或换行。然后确认base_url是https://taotoken.net/api,如果误填成别的地址,Key 再对也会 401。还有一种情况是 Key 权限不够,去控制台检查这个 Key 有没有绑定对应模型。

local proxy failed / connection refused。Codex 启动时如果报这个,通常是base_url写错或者网络到不了。先curl -I https://taotoken.net/api看能不能通。如果通,检查config.toml里base_url有没有多写路径,比如写成https://taotoken.net/api/v1,Codex 会自己拼/v1/responses,多写一层就 404 或连接失败。正确写法就是https://taotoken.net/api。

reading choices / unexpected response format。这个报错说明wire_api填错了。Codex 走 Responses API,wire_api必须是responses。如果填成chat,Codex 按 chat completions 格式解析返回,字段对不上就报 reading choices 相关错误。改回responses重启即可。

OAuth / login required。Codex 默认可能走 OAuth 登录流程,如果你只想用 API Key,config.toml里要同时有preferred_auth_method = "apikey"和forced_login_method = "api"。少一个它可能还是弹登录。改完重启,Codex 就不再要求 OAuth。

模型列表里没有 DeepSeek。检查models.json里visibility是不是list,minimal_client_version是不是小于等于你当前 Codex 版本。如果 Codex 版本低于 0.144.0,升级一下。另外model_catalog_json路径写错也会导致整个文件不加载,用绝对路径最稳。

改了配置不生效。九成是没重启。Codex 只在启动时读一次配置,运行中改文件不会热加载。杀掉进程重启,再不行就检查是不是有多个 Codex 实例在跑,旧实例还占着旧配置。

注意:排错时一次只改一个变量。同时改 Key、base_url、wire_api,出错了不知道是哪个引起的。先保证 curl 能通,再保证 Codex 能读到模型列表,最后才测对话。

6. 长期编码与 Agent 场景:把 Codex 通道收敛到 TaoToken

单次接入跑通之后,如果你打算长期用 Codex 做编码,或者跑多步 Agent 任务,建议把通道固定到 TaoToken,而不是每次换模型都改一遍配置。原因很直接:Codex 的 Agent 模式会连续发很多请求,中间涉及工具调用、文件读写、上下文压缩,如果 Key 分散在多个平台,额度管理和排错都会变麻烦。

统一到 TaoToken 之后,你只需要维护一个 Key,config.toml里的base_url和experimental_bearer_token固定不动,换模型只改model字段和models.json里的 slug。比如从deepseek-v4-flash切到deepseek-v4-pro,改一行model = "deepseek-v4-pro"重启就行,通道不用动。

对于跑长任务的场景,model_reasoning_effort建议设成high或max。low适合快速补全和简单重构,high适合多文件改动和调试,max留给最难的架构问题。这个值在config.toml里改,也可以在 Codex 会话里临时切换。上下文窗口设成 1048576 之后,Codex 能一次吃进大半个中型项目,配合effective_context_window_percent = 95,实际可用约 99 万 token,压缩触发点比较靠后,长任务不容易中途丢上下文。

如果你还想在别的工具里复用同一个 Key,比如 Cline、Claude Code 这类,TaoToken 的通道是通用的,Base URL 都是https://taotoken.net/api,Key 也一样。这样你本地所有 AI 编码工具的调用都走一个出口,额度、日志、排错集中在一处。Coding Plan 页面(https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite)有长期编码场景的通道说明,Agent 任务多的话可以对照看。

最后留一个实用习惯:把~/.codex/config.toml和~/.codex/models.json纳入你的 dotfiles 管理,但 Key 用环境变量占位,别把明文 Key 提交上去。Codex 支持从环境变量读 token,把experimental_bearer_token换成experimental_bearer_token_env = "TAOTOKEN_API_KEY",然后在 shell 里 export,这样配置文件可以安全同步。改完记得重启 Codex,让新配置生效。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询