为什么需要自定义 API Codex CLI 是 OpenAI 推出的命令行编程助手,它把大语言模型直接搬进了终端:你可以在项目目录里发起对话、让模型查看文件、执行命令、修改代码,并且每一步都保留在会
为什么需要自定义 APICodex CLI 是 OpenAI 推出的命令行编程助手,它把大语言模型直接搬进了终端:你可以在项目目录里发起对话、让模型查看文件、执行命令、修改代码,并且每一步都保留在会话上下文中。官方安装后,Codex 默认使用 OpenAI 的 API 服务,但对很多开发者和团队来说,这并不是唯一或最优的选择。 我们常常希望接入自己的模型,原因主要有三类:
好消息是,Codex CLI 的配置文件非常开放。它不关心模型到底跑在谁的服务器上,只关心一件事:服务端是否提供 OpenAI 兼容接口。只要你的服务端能响应标准的 /v1/chat/completions 或 /v1/responses 请求,几乎都可以直接接入。 简单理解:Codex CLI 本质上是一个“聪明的 API 客户端”。我们把它的默认地址从 OpenAI 换到第三方或本地地址,就完成了模型替换;配置文件的职责,就是告诉 Codex “去哪里找模型、用什么密钥、走哪种协议”。 下面我们从零开始,先装好环境,再逐层拆解配置,最后一步步把云端、本地的专属模型挂到 Codex 上。 2. 环境准备2.1 安装 Codex CLICodex CLI 基于 Node.js 运行,推荐使用 npm 全局安装。安装前请确认本机已具备较新的 Node.js 环境(建议 Node 18 及以上):
确认无误后执行:
安装完成后验证版本:
如果能正常打印出版本号,说明安装成功。如果你是 Homebrew 用户,也可以执行:
Windows 用户同样可以使用 npm 安装。若在 PowerShell 中遇到执行策略限制,可先运行 Set-ExecutionPolicy -Scope CurrentUser RemoteSigned,或在安装后直接通过 npx @openai/codex 调用。 2.2 认识配置文件Codex 的配置保存在以下位置(Linux / macOS):
Windows 默认在:
如果文件不存在,直接创建即可。配置文件使用 TOML 格式,整体分为两大块:
另外,Codex 还支持项目级配置与实验性功能开关,但在“接入自定义 API”这个主题下,我们只需要掌握上面的核心字段就足够了。 顺带说明:Codex 在启动时会按顺序查找配置,项目目录下的 .codex/config.toml 优先级高于用户主目录的全局配置。日常个人使用直接改 ~/.codex/config.toml 即可;团队项目若要强制指定某个模型,可以放在项目级配置中。 3. 配置文件结构解析先看一份最小可用的 OpenAI 官方配置:
逐项说明:
其中最关键、也最容易搞错的是 wire_api:
关键点:第三方服务几乎都选 wire_api = "chat",只有 OpenAI 官方全家桶才用 responses。如果你把第三方模型误配成 responses,大概率会出现 404 或“接口不存在”的报错。 这里再强调一条容易被忽略的规则:base_url 的结尾是否带 /v1、是否多一个 /,都会影响最终请求地址。Codex 最终请求的完整 URL 大致是:
所以对 Chat Completions 服务来说,base_url 应以 /v1 收尾;如果服务商文档给的是 https://api.example.com/v1/chat/completions,配置时只截取前面的 https://api.example.com/v1。 4. 场景一:接入第三方云端 API以 DeepSeek 为例,它的接口完全兼容 OpenAI Chat Completions。接入前需要先在 DeepSeek 开放平台创建 API Key,然后在 config.toml 中新增一个服务商:
然后在终端设置环境变量:
启动 Codex 后,它就会用 deepseek-chat 模型并通过 DeepSeek 的接口完成对话。验证是否生效,可以启动后输入:
这条命令会显示当前模型、服务商、Token 使用量等信息,方便快速确认配置是否命中。 同样的套路适用于其他兼容服务商:
接入步骤可以归纳为三板斧:
注意:每家服务商的“模型名”并不通用。qwen-coder-plus 只有通义千问认识,glm-4-plus 只有智谱认识。填错模型名时,服务端通常会返回类似 “Model Not Exist” 或 400 错误。 5. 场景二:接入本地模型本地模型适合对数据敏感或离线开发的场景,常见方案有 Ollama、LM Studio、vLLM。三者的共同点都是:在本机或内网服务器上启动一个 OpenAI 兼容的 HTTP 服务,然后让 Codex 指向 localhost。 接入本地模型时还有一点和云端不同:本地服务通常不需要真实 API Key。但 Codex 会校验 env_key 对应的环境变量是否存在,所以我们需要给一个占位值。 5.1 接入 OllamaOllama 是一个轻量的本地模型运行工具,安装后默认监听 http://localhost:11434,并提供了 OpenAI 兼容接口。接入前先启动 Ollama 并拉取模型:
拉取完成后可以先手动验证模型能不能跑:
然后添加配置:
注意:Ollama 本地服务不需要真实密钥,但 Codex 会校验 env_key 对应的环境变量是否存在,所以随便给个占位值即可:
5.2 接入 LM StudioLM Studio 是带图形界面的本地模型工具,适合喜欢可视化操作的用户。在 LM Studio 中下载模型后,进入 Local Server 页面点击 Start Server,默认 OpenAI 兼容地址是 http://localhost:1234/v1。配置方式与 Ollama 完全一致:
同样设置占位环境变量:
LM Studio 中加载的模型名会显示在 Server 页面上,model 字段要与之保持一致。如果加载的是 GGUF 量化模型,模型名可能带 -GGUF 之类的后缀,留意页面上显示的准确名称。 5.3 接入 vLLMvLLM 是高吞吐量的推理引擎,通常部署在带 GPU 的 Linux 服务器上,适合生产环境或多人共用场景。启动时默认在 http://localhost:8000/v1 提供 OpenAI 兼容接口:
这里 --served-model-name 负责对外暴露的模型名,配置里的 model 要写这个对外名称,而不是 Hugging Face 仓库路径:
再设置占位环境变量即可:
如果 vLLM 部署在另一台内网机器上,把 localhost 换成对应的内网 IP 即可。多用户共用时建议统一维护这套配置,让每个人都通过同一入口访问。 6. 多服务商共存与模型切换一个配置文件中可以同时定义多个服务商,方便快速切换。例如:
这份配置同时登记了 DeepSeek、Ollama 和 OpenAI 三家,顶层默认走 DeepSeek。真正使用时,我们不必每次都改配置文件,在 Codex 的交互式会话(TUI)中,输入以下命令即可动态切换模型:
如果切换的模型属于另一个服务商,可以加上服务商前缀来避免歧义。切回本地模型同理:
模型标识的完整格式可以理解为:
实用建议:日常联网开发用云端模型,处理敏感代码或断网环境时用 /model ollama/... 一键切回本地,既省成本又兼顾隐私。 7. 环境变量与密钥安全强烈建议不要把 API Key 直接写进 config.toml,而是通过环境变量注入。这样配置文件里只有变量名,没有真实密钥,即使把配置分享给同事或提交到 Git,也不会直接泄露凭证。 常用做法是把密钥写进 shell 配置文件:
修改后刷新配置:
如果你使用 fish,写入 ~/.config/fish/config.fish 后执行 source ~/.config/fish/config.fish 即可。 Windows 用户则可以通过系统环境变量设置,或使用 PowerShell 的 setx 永久写入:
设置完成后需要重开终端,新的环境变量才会注入到当前进程。 这样既能避免密钥随配置文件泄露(比如误提交到 Git),也方便在不同机器间复用同一份 config.toml:配置只管“结构”,密钥由每台机器各自持有。 提示:env_key 的值只是环境变量名,Codex 会根据这个名字去进程环境中查找真正的密钥。所以 env_key = "DEEPSEEK_API_KEY" 和 export DEEPSEEK_API_KEY=... 两处的变量名必须严格一致,包括大小写。 再补充两条安全习惯:
8. 常见问题与排查下面覆盖从“连不上”到“答得差”的常见问题,建议按顺序排查。 8.1 报错含义:API key not found如果看到类似 no API key found for provider 的提示,说明 env_key 指定的环境变量没有设置。检查当前 shell:
为空的话,补齐环境变量并重启 Codex。需要留意的是:环境变量是在进程启动时读取的,修改 ~/.zshrc 后没有 source、或者没有重开终端,新变量不会生效。 8.2 返回 404 或接口不兼容先确认 base_url 是否以 /v1 结尾,并用 curl 手动验证连通性:
能返回模型列表,说明接口可用。如果服务端只兼容 Chat Completions,记得把 wire_api 改为 chat。 排查顺序建议:
8.3 返回 401 或 403401/403 通常是鉴权失败,而不是接口找不到。可能原因:
可以先复现一下带鉴权的请求:
如果这里也返回 401,说明问题在密钥本身;如果这里正常而 Codex 报错,再回头检查 env_key 拼写。 8.4 本地模型连接失败本地服务走 HTTP,确认服务已启动且监听地址正确:
同时留意防火墙、容器端口映射等因素,必要时把 localhost 换成实际 IP。 另一个常见坑是“本地服务启动了,但进程的监听地址不是你以为的那个”。可以确认:
如果服务跑在 Docker 里,记得用 -p 做端口映射,例如:
8.5 模型输出质量差或不支持工具调用Codex 依赖模型具备一定的**工具调用(function calling)**能力。部分开源小模型对工具调用支持不完整,可能导致编辑、执行命令等环节异常。建议优先选择专门针对编码和 Agent 场景优化的模型,例如 qwen2.5-coder、deepseek-chat 等。 如果模型经常“答非所问”或无法正确调用工具,可以依次尝试:
8.6 请求超时或连接被重置遇到超时,可以看看是否走了系统代理。很多国内开发者会开启 HTTP 代理访问海外服务,但接入本地 Ollama、LM Studio 时,这个代理反而会拦截 localhost 请求。一般需要把 localhost、127.0.0.1 加入代理例外列表:
如果目标是内网服务器,也建议把对应 IP 或域名加入 NO_PROXY。 9. 接入流程总览为了更直观地梳理整个过程,可以把“从零到一接入自定义模型”抽象成下面的流程:
无论走云端还是本地,核心判断都在“服务端是否提供 OpenAI 兼容接口”,剩下的只是把地址、密钥和协议三个参数填对。 10. 总结Codex CLI 自定义 API 的核心就在 config.toml 的 [model_providers] 段落:只要服务端提供 OpenAI 兼容接口,配置好 base_url、env_key 和 wire_api 就能接入。 回顾一下关键步骤:
掌握这套配置方法后,无论是云端性价比模型还是内网私有模型,都能灵活挂载到 Codex 上,打造真正属于自己的 AI 编程工作流。 |
2026-07-02
2026-06-24
2026-06-01
2026-06-27
2026-06-02