ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

让 Codex 用上 DeepSeek:Moon Bridge 配置完全指南「零门槛上手」TaoToken 版

让 Codex 用上 DeepSeek:Moon Bridge 配置完全指南「零门槛上手」TaoToken 版 1. 为什么要在 Codex 里接 DeepSeekMoon Bridge 到底解决什么问题Codex CLI 是 OpenAI 出的命令行编程助手能在终端里帮你写代码、改 bug、解释报错体验确实顺。但它默认只认 OpenAI 的接口格式你想换成 DeepSeek 这种性价比更高的模型直接改配置是不行的——两边说的不是同一套「协议语言」。Moon Bridge 就是干这个的它是一个本地运行的协议转换层把 Codex 发出来的 OpenAI 格式请求翻译成 DeepSeek 能听懂的格式再把 DeepSeek 的响应翻译回去。你可以把它理解成一个坐在中间的翻译官Codex 说英文DeepSeek 说中文Moon Bridge 负责同声传译。这套方案适合谁三类人最合适一是手上已经有 DeepSeek API Key、想直接复用到 Codex 里的开发者二是觉得 OpenAI API 调用成本偏高、想用国产模型压一压账单的独立开发者三是想在本地开发环境里跑编程 Agent、又不想被单一供应商绑死的团队。我实测下来整条链路跑通之后Codex 的交互体验几乎没变但每次调用的成本能降一个数量级。下面从环境准备开始一步步把配置做完。2. 前置准备Node.js、Go 与 Codex CLI 安装踩坑记录这一节把三个必备工具装好顺序不能乱Node.js 是 Codex CLI 的运行基础Go 是 Moon Bridge 的运行基础Codex CLI 最后装。2.1 安装 Node.jsmacOS 用户如果装了 Homebrew一条命令搞定brew install nodeWindows 用户直接去 Node.js 官网下载安装包一路点「下一步」。Linux 用户推荐用 nvm 管理版本方便后面切换curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash nvm install 18装完验证一下node --version npm --version正常应该显示 v18.x.x 和 9.x.x 以上。如果node命令找不到多半是 PATH 没刷新重开一个终端窗口再试。2.2 安装 GoMoon Bridge 是 Go 写的需要 Go 1.21 以上。macOS 用brew install goWindows 去 Go 官网下 .msi 安装包。Linux 手动解压wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz echo export PATH$PATH:/usr/local/go/bin ~/.bashrc source ~/.bashrc验证go version显示 go1.22.x 就对了。2.3 安装 Codex CLInpm install -g openai/codex codex --version这里有个坑如果你之前装过旧版 Codex建议先npm uninstall -g openai/codex再重装避免版本冲突导致后面配置读取异常。三个工具装完环境就齐了。接下来拿 Key。3. 获取 API Key 与 Moon Bridge 配置文件完整写法3.1 拿到 DeepSeek API Key去 DeepSeek 开放平台注册登录在控制台里点「创建 API Key」复制出来保存好——它只显示一次。格式类似sk-xxxxxxxxxxxxxxxx。如果你希望统一管理多个模型的 Key、并且有一个稳定的调用入口也可以用 TaoToken 的 API Key 体系来托管Base URL 填https://taotoken.net/api在控制台的 API Keys 页面生成即可。这样后面切换模型时不用反复改配置文件。3.2 下载 Moon Bridgegit clone https://github.com/ZhiYi-R/moon-bridge.git cd moon-bridge3.3 写 config.yml在 moon-bridge 目录下新建config.yml把下面内容复制进去。注意把api_key换成你自己的真实 Keymode: Transform server: addr: 127.0.0.1:38440 models: deepseek-chat: context_window: 128000 max_output_tokens: 8192 default_reasoning_level: medium supports_reasoning_summaries: true default_reasoning_summary: auto providers: deepseek: base_url: https://api.deepseek.com/v1 api_key: sk-your-deepseek-api-key offers: - model: deepseek-chat routes: moonbridge: model: deepseek-chat provider: deepseek defaults: model: moonbridge max_tokens: 8192这份配置在说什么逐行拆一下mode: Transform告诉 Moon Bridge 以协议转换模式运行server.addr是本地监听地址端口 38440 别和别的服务撞了models段声明对外暴露的模型名和上下文窗口providers段是真正要转发到的上游这里填 DeepSeek 的官方接口地址和你的 Keyroutes段把 Codex 请求的moonbridge这个名字映射到实际的deepseek-chat模型上。如果你用的是 TaoToken 作为统一入口把base_url改成https://taotoken.net/apiapi_key换成 TaoToken 控制台生成的 Key 就行其余结构不变。3.4 启动 Moon Bridgego run ./cmd/moonbridge --config config.yml看到HTTP 服务器监听中 addr127.0.0.1:38440就说明起来了。这个终端别关让它一直跑着另开一个终端做后面的步骤。4. 配置 Codex 并验证 DeepSeek 响应是否正常返回4.1 生成 Codex 配置Moon Bridge 提供了自动生成 Codex 配置的命令在 moon-bridge 目录下执行CODEX_HOME_DIR${CODEX_HOME:-$HOME/.codex} mkdir -p $CODEX_HOME_DIR MODEL$(go run ./cmd/moonbridge --config config.yml --print-codex-model) go run ./cmd/moonbridge \ --config config.yml \ --print-codex-config $MODEL \ --codex-base-url http://127.0.0.1:38440/v1 \ --codex-home $CODEX_HOME_DIR \ $CODEX_HOME_DIR/config.toml这一步会在~/.codex/下生成config.toml里面写好了 Base URL 指向本地 38440 端口。打开看一眼关键字段应该是这样的model moonbridge model_provider moonbridge [model_providers.moonbridge] name moonbridge base_url http://127.0.0.1:38440/v1 wire_api responses三件套对照Base URL 是http://127.0.0.1:38440/v1Key 由 Moon Bridge 在转发时注入Codex 侧不用填Model ID 是moonbridge。4.2 先测 Moon Bridge 本身在另一个终端里先确认 Moon Bridge 能正常返回模型列表curl http://localhost:38440/v1/models返回一串 JSON 就说明服务活着。再发一条真实消息curl http://localhost:38440/v1/responses \ -H Content-Type: application/json \ -d {model: moonbridge, input: 你好请用一句话介绍你自己。, max_output_tokens: 100}如果返回内容里有 AI 的回复说明 Moon Bridge 到 DeepSeek 这条链路是通的。4.3 启动 Codex 验证mkdir ~/codex-test cd ~/codex-test codex进入交互界面后随便问一句帮我写一个 Python 的 Hello World如果 Codex 正常回复同时 Moon Bridge 那个终端里出现了请求日志整条链路就打通了。这时候你用的已经是 DeepSeek 的模型但操作体验和原生 Codex 一模一样。5. 常见报错排查401、local proxy failed 与 reading choices 怎么解配置过程中最容易撞上这几类报错逐个说清楚。401 Unauthorized九成是 API Key 填错了。检查config.yml里providers.deepseek.api_key是不是完整的sk-开头字符串有没有多余空格或换行。如果用的是 TaoToken确认 Key 是在控制台 API Keys 页面生成的、且没有过期。local proxy failed / connection refusedCodex 连不上本地 38440 端口。原因通常是 Moon Bridge 没启动或者启动它的终端被关了。回到 moon-bridge 目录重新go run ./cmd/moonbridge --config config.yml确认看到监听日志后再启动 Codex。另一个可能是端口被占用改config.yml里的server.addr换个端口同时把~/.codex/config.toml里的base_url同步改掉。reading choices 相关报错这类错误一般出现在响应解析阶段说明 Moon Bridge 返回的格式和 Codex 期望的对不上。先确认config.yml里mode是Transform再检查wire_api是不是responses。如果还不行把 Moon Bridge 的日志级别调高看它转发出去的请求体长什么样。OAuth 相关提示Codex 首次启动可能引导你登录 OpenAI 账号。既然我们走的是本地代理这一步可以跳过——确认~/.codex/config.toml里model_provider指向的是moonbridge而不是openai就不会触发 OAuth 流程。模型名不匹配如果 Codex 报「model not found」检查config.yml里routes.moonbridge.model和models段里声明的模型名是否一致。两边名字必须完全对上。排查思路就一条先确认 Moon Bridge 单独能用curl 测再确认 Codex 配置指向本地最后看日志定位是哪一段断了。6. 把 Codex 接到 TaoToken统一入口与后续扩展上面这套配置跑通后你已经有了一条 Codex → Moon Bridge → DeepSeek 的完整链路。如果后面想换模型、加模型或者不想每次都手动改config.yml可以把上游统一收到 TaoToken 上。具体做法把config.yml里providers.deepseek.base_url改成https://taotoken.net/apiapi_key换成 TaoToken 控制台生成的 Key。这样 Moon Bridge 转发出去的所有请求都经过 TaoToken你在控制台里能统一看到调用量、切换底层模型不用动本地配置。想深入的话几个方向可以继续一是开启 Moon Bridge 的 trace 功能在config.yml顶部加trace: { enabled: true, output_dir: ./data/trace }所有请求响应会落盘方便复盘二是给 Codex 配上多模型路由在models段里加更多模型用routes做映射三是把 Moon Bridge 做成后台服务用 systemd 或 launchd 托管省得每次手动启动。配置文件和命令都在上面了照着敲一遍基本能跑通。真卡住了先 curl 测 Moon Bridge再看 Codex 的 config.toml最后翻日志——顺序别乱问题一般都能定位到。
返回列表