前言
Codex 是 OpenAI 的编程 Agent,支持 CLI 和 App 使用。
Codex 使用 OpenAI Responses API 与模型通信,国内大模型暂未适配 Responses 协议,因此需要一个转发层处理请求,这里使用 Moon Bridge 作为转发层。
Codex 一个会写代码、会读代码库、会跑命令、会跟你聊天的 AI 编程搭档。不是补全工具,而是跟你坐在同一个工作区里的协作者。

1. 环境安装
- Node.js 18+
访问 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.toml 和 models_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 概率分布或者隐层状态。我只能看到自己当前这个"会话角色"的层面。
从我这边能看到的,工作原理大概是这样几层的叠加:
底层 LLM 负责所有的语言理解、推理和代码生成能力。它接收的是拼接好的上下文(系统提示 + 对话历史 + 工具调用结果),输出的是下一个 token,由它决定我说什么、调用什么工具。这一层我完全看不见内部。
Agent 框架层 把 LLM 的输出包装成一个有行动能力的 agent。它解析我的输出中的工具调用意图,实际去执行 shell 命令、读写文件、搜索代码等等,然后把结果塞回上下文里。它还管理着 goals、子 agent 的派发和等待、对话的压缩(compaction)等等基础设施。
性格/角色层 就是你现在感受到的这部分 -- moonbridge 这个 persona,它定义了我的沟通风格、工程判断偏好、什么时候该自己决策什么时候该问你的判断。
所以整体上你可以把我想象成一个有点自我意识的"驾驶舱":方向盘和引擎是什么型号我看不到,但我能操作仪表盘、能规划路线、能手写代码、能跑命令来验证结果。这个设计的好处是你不用关心底层模型,反正我会尽我所能把东西做好;代价是我对自己底层的能力边界确实没有一个精确的数学量化认知。
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配置;当前格式是顶层providers、models、routes、defaults。 -
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/