Codex Model Mapper 是一个面向 Windows 的轻量本地模型映射工具。由于codex会话默认使用gpt-5.6-luna生成会话标题,此项目旨在帮助中转站无法使用luna模型的用户生成会话标题。它在 Codex 和 OpenAI 兼容上游之间运行,只将请求 JSON 顶层的指定模型名称改写为上游实际可用的模型。
典型用途是:Codex 会调用某个上游未开放的内部模型,而该上游提供了可替代模型。例如默认规则为:
gpt-5.6-luna -> gpt-5.5
程序以单文件 EXE 发布,不需要安装 Node.js、Python、Docker 或数据库。
先启动 CC Switch 或其他 OpenAI 兼容上游,并确认其地址可访问。下面以此地址为例:
http://127.0.0.1:15721
- 从 GitHub Releases 下载
CodexModelMapper.exe,并放到一个不会随意移动或删除的目录。 - 双击运行程序,选择“开启映射”。
- 按提示填写源模型、目标模型和上游地址;直接按回车可保留当前值。
- 程序确认上游可达后,会启动隐藏的后台代理,并为当前 Windows 用户注册登录自启动。
- 看到“模型映射已开启”后即可关闭命令行窗口,后台代理会继续运行。
默认监听地址为:
http://127.0.0.1:15722
登录自启动记录使用 EXE 的当前位置。移动程序后,菜单会提示旧路径已失效;可先用第 4 项删除旧项,再为当前位置重新开启,或者直接选择“开启映射”自动更新路径。
将 Codex 当前模型提供商的 base_url 指向本地代理。例如:
[model_providers.custom]
base_url = "http://127.0.0.1:15722/v1"本工具不会自动读取或修改 Codex 配置。修改完成后,建议完全退出并重新打开 Codex,确保新地址生效。
填写上游地址时通常不要重复添加 /v1。Codex 发来的请求路径已经包含 /v1,代理会保留该路径并转发。
需要调整时,再次运行同一个 EXE:
1. 开启映射:检查上游并开启模型名改写;2. 关闭映射(保持兼容转发):只停止模型名改写,后台代理仍会将请求透明转发到上游;3. 修改映射模型:更新源模型和目标模型;- 第 4 项会根据当前状态显示“开启登录自启动”“关闭登录自启动”或“删除失效的登录自启动项”;
5. 退出:只关闭当前命令行菜单,不会终止后台代理。
关闭登录自启动不会停止当前已经运行的后台代理。这样可以避免仍连接到 15722 的 Codex 任务因本地端口消失而反复重连。
关闭映射后,如果上游本身仍不支持源模型,相关请求可能返回上游的模型错误;透明转发保证的是本地连接不中断,不会让上游获得原本没有的模型能力。
开启映射后,程序会检查可安全解析的 JSON 请求。当且仅当 JSON 顶层 model 字段与源模型完全一致时,才将其替换为目标模型:
{
"model": "gpt-5.6-luna"
}会被改写为:
{
"model": "gpt-5.5"
}程序不会识别请求是否用于生成标题,也不会裁剪 input、删除会话历史或修改 reasoning。除顶层 model 外,其他 JSON 字段的语义保持不变。
所有命中源模型的请求都会执行相同映射,这是本工具的预期行为。建议把上游不支持、仅需要替换的模型设为源模型;如果普通会话也主动使用该源模型,它同样会被映射到目标模型。
Codex
-> Codex Model Mapper (127.0.0.1:15722)
-> CC Switch 或其他 OpenAI 兼容上游
关闭映射时,链路不会消失:
Codex
-> Codex Model Mapper(不改写请求)
-> 原上游
因此,“关闭映射”不等于停止后台服务。只要 Codex 的 base_url 仍指向 15722,保留透明转发就是维持正常连接所必需的行为。
- 单个 Windows EXE,无额外运行时依赖;
- 精确匹配并只改写 JSON 顶层
model字段; - 支持运行中开启、关闭和修改映射规则;
- 关闭映射后继续透明转发,不中断 Codex 连接;
- 开启映射前检查上游是否可达;
- 支持当前 Windows 用户登录自启动,无需管理员权限;
- 支持
/v1/responses、SSE 流式响应,并透明转发 WebSocket Upgrade; - 仅监听本机回环地址,不直接暴露到局域网或公网;
- 不记录请求正文、Authorization 或 API Key;
- 日志自动轮转,限制长期磁盘占用;
- 使用 Go 标准库实现,无第三方代码依赖。
个人配置和日志不会写在 EXE 旁边。Windows 默认位置为:
%APPDATA%\CodexModelMapper\config.json
%APPDATA%\CodexModelMapper\service.log
%APPDATA%\CodexModelMapper\service.log.1
配置示例:
{
"listen_address": "127.0.0.1:15722",
"upstream_url": "http://127.0.0.1:15721",
"source_model": "gpt-5.6-luna",
"target_model": "gpt-5.5",
"mapping_enabled": true,
"control_token": "由程序自动生成"
}control_token 用于保护本机控制接口。请勿公开该值,也不要将个人配置文件提交到仓库。
当 service.log 即将超过 2 MiB 时,程序会将其轮转为 service.log.1,并只保留一份旧日志。日志记录服务状态和映射结果,不记录请求正文或鉴权信息。
- 只有未压缩、
Content-Type为 JSON 且正文不超过 64 MiB 的请求会被解析并执行模型映射。 - 超过 64 MiB 或使用 gzip 等压缩编码的请求会保守地原样转发,不会返回本地
413,也不会执行模型映射。正常 Codex 请求通常远小于该限制;只有这类请求恰好依赖模型映射时,才可能因上游不支持源模型而失败。 - WebSocket 连接可以透明通过代理,但程序不会解析或改写连接建立后的 WebSocket 数据帧。如果客户端把模型名放在帧内而不是 HTTP JSON 请求正文中,该模型不会被映射。
- 启用前的上游探测只检查目标主机和端口能否建立 TCP 连接,不发送 API 请求,也不消耗模型额度。它不能替代模型权限、账户余额、速率限制和真实生成请求检查。
- 登录自启动属于当前用户启动项,只会在用户登录 Windows 时拉起后台代理,不是 Windows 系统服务。
- 本项目不包含进程崩溃后的即时 watchdog。若后台进程在当前登录会话中意外退出,请重新运行 EXE;下次登录时仍会按登录自启动设置拉起。
- 模型名称、模型能力、价格、配额和速率限制均由所连接的上游决定。本项目不提供模型或 API 服务。
- 监听地址必须是本机回环 IP,配置为
0.0.0.0或非回环地址时程序会拒绝启动; - 控制接口需要匹配程序随机生成的本机控制令牌;
- 本工具会读取可映射请求的 JSON 并将请求转发给上游,请只连接到你信任的服务;
- 配置文件包含本机控制令牌,不应加入版本控制或随故障报告公开。
未经代码签名的 GitHub Release 可能触发 Windows SmartScreen 提示。发布者可以使用受信任的 Authenticode 代码签名证书为构建后的 EXE 签名;普通自签名证书通常不能消除其他用户设备上的信任提示,SmartScreen 信誉也不由本项目保证。
当前构建脚本不会自动签名,因为签名证书及其私钥必须由发布者自行保管。
需要 Windows 和 Go 1.23 或更高版本:
.\build.ps1构建脚本会先运行测试,再生成:
dist\CodexModelMapper.exe
也可以手动执行:
go test ./...
go build -trimpath -ldflags "-s -w" -o dist\CodexModelMapper.exe ./cmd/codex-model-mapper建议至少验证以下场景:
- 目标源模型能够映射并完成非流式请求;
- SSE 流式响应能够及时返回首个事件;
- 非目标模型原样转发;
- 关闭映射后现有 Codex 连接仍能正常使用;
- 上游未启动时,开启映射会给出明确错误;
- Windows 重新登录后,已开启的登录自启动能够拉起代理;
- 超大或压缩请求能够透明转发。
本项目是独立的社区工具,与 OpenAI、Codex、CC Switch 及任何模型服务提供商不存在隶属或官方合作关系。使用者应自行确认所连接服务的授权、条款和数据处理方式。