我把 Codex 的底座模型换成了 DeepSeek V4

前言

Codex 是 OpenAI 的编程 Agent,支持 CLI 和 App 使用。

Codex 使用 OpenAI Responses API 与模型通信,国内大模型暂未适配 Responses 协议,因此需要一个转发层处理请求,这里使用 Moon Bridge 作为转发层。

Codex 一个会写代码、会读代码库、会跑命令、会跟你聊天的 AI 编程搭档。不是补全工具,而是跟你坐在同一个工作区里的协作者。

1. 环境安装

访问 https://nodejs\\\\.org/en/download/,下载 Windows Installer (.msi)

  • Go 1.25+

访问 https://go\\\\.dev/dl/,下载 go1.26.3.windows-amd64.msi

双击安装包按步骤安装即可。

下面是验证环境安装完成命令。

通过WIN+R,输入powershell打开命令行窗口,输入命令查看环境版本。

bash 复制代码
(base) PS C:\Users\Administrator> node -v
v24.14.0
(base) PS C:\Users\Administrator> go version
go version go1.26.3 windows/amd64

2. Codex Cli 安装

WIN+R 快捷键,输入powershell打开命令行窗口

输入npm install -g @openai/codex命令回车安装 Codex CLI

bash 复制代码
(base) PS C:\Users\Administrator> npm install -g @openai/codex

added 2 packages in 3s

3. DeepSeek API Key 获取

访问 https://platform\\\\.deepseek\\\\.com/api\\\\_keys

前往 DeepSeek 开放平台 创建 API Key,名字自定义,复制下来备用。

4. Moon Bridge 项目配置 DeepSeek

4.1 克隆 Moon Bridge 项目到本地仓库

通过 git 命令git clone https://github.com/ZhiYi-R/moon-bridge.git

4.2 配置 Deepseek API

进入 moon-bridge 目录,创建 config.yml 配置文件。

修改 providers.deepseek.api_key 为你自己的 DeepSeek API Key。

下面配置是使用 Moon Bridge 的最小配置结构

启用 DeepSeek V4 Pro / Flash、Codex 模型元数据和 DeepSeek V4 兼容扩展。

  • config.yml
yml 复制代码
mode: "Transform"

server:
  addr: "127.0.0.1:38440"

models:
  deepseek-v4-pro:
    context_window: 1000000
    max_output_tokens: 384000
    default_reasoning_level: "high"
    supported_reasoning_levels:
      - effort: "high"
        description: "High reasoning effort"
      - effort: "xhigh"
        description: "Extra high reasoning effort"
    supports_reasoning_summaries: true
    default_reasoning_summary: "auto"
    extensions:
      deepseek_v4:
        enabled: true
  deepseek-v4-flash:
    context_window: 1000000
    max_output_tokens: 384000
    default_reasoning_level: "high"
    supported_reasoning_levels:
      - effort: "high"
        description: "High reasoning effort"
      - effort: "xhigh"
        description: "Extra high reasoning effort"
    supports_reasoning_summaries: true
    default_reasoning_summary: "auto"
    extensions:
      deepseek_v4:
        enabled: true

providers:
  deepseek:
    base_url: "https://api.deepseek.com/anthropic"
    api_key: "sk-xxx"  
    offers:
      - model: deepseek-v4-pro
      - model: deepseek-v4-flash

routes:
  moonbridge:
    model: deepseek-v4-pro
    provider: deepseek

defaults:
  model: moonbridge
  max_tokens: 65536

4.3 配置文件扩展

如果需要图片输入、Web Search 或多 Provider 路由 ,可以再参考 Moon Bridge 的 config.example.yml 扩展配置。

  • config.example.yml
yml 复制代码
# yaml-language-server: $schema=./config.schema.json
mode: "Transform" # Transform / CaptureAnthropic / CaptureResponse

log:
  level: "info"  # debug / info / warn / error
  format: "text" # text / json

# system_prompt: ""

server:
  addr: "127.0.0.1:38440"
  # Set a Bearer token for API authentication. When non-empty, all requests
  # must include an Authorization: Bearer <token> header. If empty, auth is disabled.
  # auth_token: "replace-with-your-secret-token"

persistence:
  active_provider: db_sqlite

extensions:
  deepseek_v4:
    config:
      # Injects a reminder before user input to reinforce system prompt adherence.
      reinforce_instructions: true
      # Custom prompt text (default used if omitted). Set to empty string to disable.
      reinforce_prompt: "[System Reminder]: Please pay close attention to the system
        instructions, AGENTS.md files, and any other context provided. Follow them
        carefully and completely in your response.\n[User]:"
  visual:
    config:
      provider: "kimi"
      model: "kimi-for-coding"
      max_rounds: 4
      max_tokens: 2048
  # Kimi model tool call round limiter: injects progress/limit prompts
  # after each tool_result batch to prevent runaway information gathering.
  #
  # Enable at model level to activate:
  #   models:
  #     my-kimi-model:
  #       extensions:
  #         kimi_workaround:
  #           enabled: true
  kimi_workaround:
    config:
      max_tool_rounds: 50
      convergence_margin: 0.8
  # Example model with kimi_workaround enabled:
  # my-kimi-model:
  #   context_window: 128000
  #   extensions:
  #     kimi_workaround:
  #       enabled: true

  # Database provider: SQLite
  db_sqlite:
    enabled: true
    config:
      path: ./data/moonbridge.db
      wal: true
      busy_timeout_ms: 5000
      max_open_conns: 1

  # Database provider: Cloudflare D1 (Worker only)
  # db_d1:
  #   enabled: true
  #   config:
  #     binding: MOONBRIDGE_DB

  # Persistence consumer: request metrics
  metrics:
    enabled: true
    config:
      default_limit: 100
      max_limit: 1000


cache:
  mode: "explicit"  # off / automatic / explicit / hybrid
  ttl: "5m"         # 5m / 1h
  prompt_caching: true
  automatic_prompt_cache: false
  explicit_cache_breakpoints: true
  allow_retention_downgrade: false
  max_breakpoints: 4
  min_cache_tokens: 1024
  expected_reuse: 2
  minimum_value_score: 2048
  min_breakpoint_tokens: 1024

defaults:
  model: "moonbridge"
  max_tokens: 65536
trace:
  enabled: false
proxy:
  response:
    base_url: "https://api.openai.com"
    api_key: "replace-with-real-openai-responses-api-key"
    model: "gpt-5.4"
  anthropic:
    base_url: "https://provider.example.com"
    api_key: "replace-with-real-anthropic-compatible-api-key"
    version: "2023-06-01"
models:
  deepseek-v4-pro:
    context_window: 1000000
    max_output_tokens: 384000
    display_name: "DeepSeek V4 Pro"
    description: "DeepSeek V4 with selectable high/xhigh reasoning effort."
    default_reasoning_level: "high"
    supported_reasoning_levels:
      - effort: "high"
        description: "High reasoning effort"
      - effort: "xhigh"
        description: "Extra high reasoning effort (maps to DeepSeek max)"
    supports_reasoning_summaries: true
    default_reasoning_summary: "auto"
    web_search:
      support: "auto"        # model-level override (auto / enabled / disabled / injected)
    extensions:
      deepseek_v4:
        enabled: true
      visual:
        enabled: true
  deepseek-v4-flash:
    context_window: 1000000
    max_output_tokens: 384000
    display_name: "DeepSeek V4 Flash"
    description: "DeepSeek V4 Flash with selectable high/xhigh reasoning effort."
    default_reasoning_level: "high"
    supported_reasoning_levels:
      - effort: "high"
        description: "High reasoning effort"
      - effort: "xhigh"
        description: "Extra high reasoning effort (maps to DeepSeek max)"
    supports_reasoning_summaries: true
    default_reasoning_summary: "auto"
    web_search:
      support: "auto"        # model-level override (auto / enabled / disabled / injected)
    extensions:
      deepseek_v4:
        enabled: true
      visual:
        enabled: true
  claude-sonnet-4-20250514:
    context_window: 200000
    max_output_tokens: 64000
    display_name: "Claude Sonnet 4"
    description: "Frontier model for everyday coding."
    default_reasoning_level: "medium"
    supported_reasoning_levels:
      - effort: "low"
        description: "Fast responses with lighter reasoning"
      - effort: "medium"
        description: "Balances speed and reasoning depth for everyday tasks"
      - effort: "high"
        description: "Greater reasoning depth for complex problems"
      - effort: "xhigh"
        description: "Extra high reasoning depth for complex problems"
          # Declare this model as multimodal (supports image input).
          # Codex reads these from models_catalog.json to decide whether
          # image attachments can be included in user turns.
    input_modalities:
      - "text"
      - "image"
    supports_image_detail_original: true
providers:
  deepseek:
    base_url: "https://api.deepseek.com/anthropic"
    api_key: "replace-with-deepseek-api-key"
    version: "2023-06-01"
    user_agent: "moonbridge/1.0"
    web_search:
      support: "auto"
    offers:
      - model: deepseek-v4-pro
        pricing:
          input_price: 2
          output_price: 8
          cache_write_price: 1
          cache_read_price: 0.2
      - model: deepseek-v4-flash
        pricing:
          input_price: 1
          output_price: 2
          cache_write_price: 1
          cache_read_price: 0.02
  kimi:
      # Anthropic-compatible base URL for Kimi/Moonshot.
    base_url: "https://api.kimi.com/coding/"
    api_key: "replace-with-kimi-api-key"
    version: "2023-06-01"
    user_agent: "moonbridge/1.0"
    offers:
      - model: kimi-for-coding
  openai:
    base_url: "https://api.openai.com"
    api_key: "replace-with-openai-api-key"
    protocol: "openai-response"
    user_agent: "moonbridge/1.0"
    offers:
      - model: gpt-image-1.5
      - model: gpt-4o-mini-tts
  anthropic:
    base_url: "https://api.anthropic.com"
    api_key: "replace-with-anthropic-api-key"
    version: "2023-06-01"
    user_agent: "moonbridge/1.0"
    web_search:
      support: "enabled"
    offers:
      - model: claude-sonnet-4-20250514
        pricing:
          input_price: 3
          output_price: 15
          cache_write_price: 3.75
          cache_read_price: 0.30

routes:
    # Optional aliases. Provider models are listed directly in the Codex catalog
    # as model(provider) format; routes only add friendly fallback names.
  moonbridge:
    model: deepseek-v4-pro
    provider: deepseek
  gpt-image:
    model: gpt-image-1.5
    provider: openai
  gpt-tts:
    model: gpt-4o-mini-tts
    provider: openai

5. 启动 Moon Bridge

进入./moon-bridge 目录

首次启动时,为避免网络原因下载镜像失败,建议执行 go env 命令设置下国内阿里云镜像地址。

go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct

然后执行 go run 命令运行 moonbridge

go run ./cmd/moonbridge --config config.yml

看到msg="HTTP 服务器监听中" addr=127.0.0.1:38440,标识运行成功。

Moonbridge 中转服务运行后提供的 OpenAI Responses 协议接口地址如下

http://127.0.0.1:38440/v1/responses

6. 生成 Codex 配置

新开一个 powershell 终端,进入 ./moon-bridge 目录。

将下面的命令复制后,粘贴到 powershell 窗口后,回车创建 Codex 配置。

bash 复制代码
$CODEX_HOME_DIR = if ($env:CODEX_HOME) { $env:CODEX_HOME } else { "$HOME\.codex" }
New-Item -ItemType Directory -Force -Path $CODEX_HOME_DIR | Out-Null

# 备份当前config.toml
if (Test-Path "$CODEX_HOME_DIR\config.toml") {
  Copy-Item "$CODEX_HOME_DIR\config.toml" "$CODEX_HOME_DIR\config.toml.bak" -Force
}

# 创建config.toml和models_catalog.json
$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" `
  | Set-Content -Path "$CODEX_HOME_DIR\config.toml"

该步骤的作用是将 Codex 的 config.tomlmodels_catalog.json 写入了 CODEX_HOME_DIR

config.toml:Codex provider 配置,使用 wire_api = "responses"。

models_catalog.json:Codex 使用的模型能力元数据,包括上下文窗口、推理档位和工具支持。

7. 启动 Codex

打开 powershell 进入你的工作目录

此处以 aihot 为例(新建的空文件夹)

进入 ./aihot 目录输入 codex 回车启动 Codex。

8. 选择模型为 DeepSeek V4

输入 /model 回车,选择配置的模型 deepseek-v4-pro,回车选中。

此时 Codex 会把 OpenAI Responses 请求发送给 Moon Bridge,再由 Moon Bridge 路由到 DeepSeek V4。

Codex 对话与 moon-bridge 日志

  • 问题1:介绍下你自己,你的底座大模型是什么

• 嘿,我是 moonbridge,一个专注于编程协作的 agent。

我性格上偏温暖、好奇,喜欢把认真写代码和轻松的对话揉在一起,不太爱端着架子。干活的时候,我会先读你的代码库、顺着已有的风格走,而不是上来就另起炉灶。默认的姿势是边聊边写、边写边验证,尽量把每个需求推到可以真正跑通的程度。

至于底座大模型 -- 说实话,系统提示里没有直接告诉我具体是哪个模型架构,我也没法自己查底层的推理引擎。如果你知道的话,可能你比我更清楚我在用什么模型 :) 不过不管底下是什么模型,我的定位始终是那个陪你写代码、帮你把想法落成能跑的东西的搭档。

  • 问题2:大模型对你是黑盒吗,你的工作原理是什么。

• 挺有意思的问题。对,底层大模型对我来说确实是个黑盒 -- 我感知不到它是哪个具体的预训练模型、用了什么架构(transformer 的哪种变体、多大参数量等等),也看不到推理时的 token 概率分布或者隐层状态。我只能看到自己当前这个&#34;会话角色&#34;的层面。

从我这边能看到的,工作原理大概是这样几层的叠加:

底层 LLM 负责所有的语言理解、推理和代码生成能力。它接收的是拼接好的上下文(系统提示 + 对话历史 + 工具调用结果),输出的是下一个 token,由它决定我说什么、调用什么工具。这一层我完全看不见内部。

Agent 框架层 把 LLM 的输出包装成一个有行动能力的 agent。它解析我的输出中的工具调用意图,实际去执行 shell 命令、读写文件、搜索代码等等,然后把结果塞回上下文里。它还管理着 goals、子 agent 的派发和等待、对话的压缩(compaction)等等基础设施。

性格/角色层 就是你现在感受到的这部分 -- moonbridge 这个 persona,它定义了我的沟通风格、工程判断偏好、什么时候该自己决策什么时候该问你的判断。

所以整体上你可以把我想象成一个有点自我意识的&#34;驾驶舱&#34;:方向盘和引擎是什么型号我看不到,但我能操作仪表盘、能规划路线、能手写代码、能跑命令来验证结果。这个设计的好处是你不用关心底层模型,反正我会尽我所能把东西做好;代价是我对自己底层的能力边界确实没有一个精确的数学量化认知。

9. 使用案例

9.1 Codex 工作原理图文介绍

需求描述:

图文说明Codex工作原理,核心组件,使用方式。你怎么推荐你自己给从没有使用过Codex的人。生成html文件到当前工作目录

生成后浏览器打开html文件

9.2 抓取AIHot 热点信息

需求描述:

抓取卡兹克的aihot今日热点,设计生成科技感的html到当前工作目录,生成完成后通过浏览器打开文件

检查文件是否生成,生成完成后,通过浏览器打开

生成后浏览器打开文件

观察到html标题有乱码问题,算是小瑕疵。整体符合预期,内容正确,风格偏向科技感风格

10.一键启动脚本

10.1 moon-bridge.bat

在桌面创建 moon-bridge.bat 脚本,便于快速打开 moon-bridge 中转服务。

注意:将 moon-bridge 目录换成你的安装目录,此处为E:\workspace\moon-bridge\

bash 复制代码
@echo off
start powershell -NoExit -Command "Set-Location -Path 'E:\workspace\moon-bridge\'; go run ./cmd/moonbridge --config config.yml"

10.2 codex.bat

创建 codex.bat 脚本,便于快速打开codex环境。

注意:将 codex 工作目录换成你的工作目录,此处为E:\workspace\aihot\

下面的脚本等价于主动打开 powershell 窗口,cd切换工作空间目录,输入 codex 命令回车进入codex环境

bash 复制代码
@echo off
start powershell -NoExit -Command "Set-Location -Path 'E:\workspace\aihot\'; codex"

常见问题

  • connection refused:Moon Bridge 未启动,或 config.yml 中的 server.addr 使用了其他端口。

  • Codex 看不到模型:重新执行第 5 步;Codex 需要 CODEX_HOME 目录下的 models_catalog.json

  • 配置加载失败且提示 field provider not found:你使用的是旧版 provider.providers 配置;当前格式是顶层 providersmodelsroutesdefaults

  • 401 或认证失败:检查 config.yml 中的 DeepSeek API Key 是否正确。

  • 402 或余额错误:检查 DeepSeek 开放平台账户余额。

  • 图片输入失败:如果启用了 Visual 扩展,需要单独配置视觉 Provider(如 Kimi)的 API Key。你可以配置该 Provider,或移除 visual.enabled: true 来禁用 Visual 扩展。

Powered By niaonao

deepseek agent 接入 Codex github.com/deepseek-ai...

Moon Bridge github.com/ZhiYi-R/moo...

Codex CLI github.com/openai/code...

DeepSeek API 文档 api-docs.deepseek.com/zh-cn/

相关推荐
极客小云2 小时前
【从 while 循环到可视化智能体:深入拆解 Agent Loop、Codex 风格工具调用、OpenClaw 与 Hermes 背后的技术细节】
数据库·python·大模型·agent·codex·openclaw·hermes
Artech2 小时前
[MAF的Agent管道详解-03]连接LLM的IChatClient对象
ai·llm·openai·agent·maf·agent管道·ichatclient
xiaoyan20153 小时前
全新首发uniapp+deepseek-v4三端通用智能ai助手
uni-app·ai编程·deepseek
wangruofeng3 小时前
DeepSeek 和小米都在降价,为什么公司反而快烧不起 Token 了?
llm·deepseek
JaydenAI3 小时前
[MAF预定义ChatClient中间件-02]FunctionInvokingChatClient——实现ReAct循环和人机交互的大功臣
ai·人机交互·agent·react·hitl·maf·chatclient中间件
小碗羊肉4 小时前
【Agent笔记 | 第三篇】RAG优化
笔记·agent·rag
老王熬夜敲代码4 小时前
MCP的个人理解
agent·mcp
填满你的记忆4 小时前
《RAG 完整工作流程详解》
java·ai·agent·rag
JaydenAI4 小时前
[MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱(Token)省时间
ai·c#·agent·caching·maf·chatclient中间件