
把 Codex CLI 接到 Kimi K3听起来是件小事实际上一路踩下来全是坑。尤其是当你看到unexpected status 502 bad gateway: unknown error, url: http://127.0.0.1:15721/v1/responses这种报错的时候会忍不住怀疑人生。这篇文章我就把这套“Responses 兼容层”从原理到配置再到排错一次性讲清楚。不管你是刚下载完 Codex 装不上、登录不了还是配好了但请求一直 502或者被model not supported、auth token is unavailable这类问题卡住这篇文章的目标就是让你照着我走过的路线少踩几个坑尽快把 Kimi K3 跑起来。先说清楚它是什么、能做什么Codex 是 OpenAI 那边主推的编程智能体入口而 Kimi K3 是 Kimi 这边比较新的模型普通人不会直接把它俩放在一起。但因为 Codex 只认自己的一套接口格式Kimi 的开放接口又不完全长那样所以中间需要加一层“兼容层”把请求翻译成两边都能听懂的话。这套方案适合三类人想用 Kimi K3 跑 Codex 任务的开发者、在研究怎么把第三方模型接进 Codex 的玩家以及正在被各种报错折磨的排错困难户。接下来我会从架构、选型、配置、排错四个维度一步步展开。1. 整体架构拆解Codex、Kimi K3 与那层“兼容层”到底是什么1.1 Codex 的接口形态为什么大家都在谈 /responsesCodex 的接口演进其实挺折腾人的。早期大家接第三方模型习惯用 OpenAI 风格的/v1/chat/completions也就是 Chat Completions 协议很多云厂商的兼容接口都长这样。但 Codex 从某一版开始主推的是/v1/responses这个新的 Responses API。它跟旧的 Chat Completions 不完全是一回事多了一些用于智能体循环的结构、指令追踪字段消息格式也更面向“多轮工具调用”的场景。这就带来一个很现实的问题Codex 发出的是POST http://127.0.0.1:15721/v1/responses这种请求而 Kimi 的 API 端点大概率只实现了/chat/completions。两边协议对不上你就算把base_url指过去它也会直接拒绝或者瞎解析。所以社区里的普遍做法是在 Codex 和 Kimi 之间塞一层“翻译官”接收 Codex 的 Responses 请求转换成 Kimi 能理解的格式再原路返回。这也是“Responses 兼容层”这个名字的由来。1.2 Kimi K3 的接入难点协议之外还有鉴权和模型名Kimi K3 本身是个人模型接口能力和普通 OpenAI 兼容服务比少了一块 /responses 支持。另一个麻烦点是模型名。Codex 在配置自定义 provider 时通常会有一个默认模型名比如gpt-5.6-sol这种如果你不去改直接发给 KimiKimi 肯定会回一句“这个模型我不认识”。这就是热词里那句the gpt-5.6-sol model is not supported when using codex with a...的来历。它不是 Kimi 拒绝你这个人而是你拿着张三的身份证去李四的窗口办事人家不认。所以接入 Kimi K3至少得解决三件事一是把 Codex 的请求地址指到兼容层二是把模型名改成 Kimi K3 这边真正能认的那个名字比如kimi-k3之类三是把 Kimi 的 API Key 送到兼容层由它统一加上鉴权头再转发到 Kimi 上游。1.3 一句话理解这个项目的整体链路整个链路其实只有四段Codex CLI → 本地兼容层服务监听 127.0.0.1:15721→ Kimi API → Kimi K3 模型。Codex 只跟本地兼容层说话兼容层负责把/responses翻译成/chat/completionsKimi 只管接收已经翻译好的请求。理解这条链路之后排错就简单了任何一环节出问题都会在 Codex 的报错里体现成不同样子的错误。我之前碰到过有人直接把 Codex 的base_url填成 Kimi 官方地址然后怎么调都不通。看了日志才发现 Kimi 返回的是 404因为路径/v1/responses压根不存在。加了兼容层之后路径对了模型名又不对模型名对了Key 又没带对。说白了这层“翻译”不是可选项而是刚需。2. 环境准备与前置条件账号、会员、Codex 本体和兼容层选型2.1 Kimi 账号与 K3 访问权限先说账号问题。Kimi K3 并不是所有账号默认都能调用很多人问“kimi 哪个会员能用 k3”这个问题其实没有一个万能答案因为模型开放策略一直在变。最稳妥的做法是登录 Kimi 的开放平台或对应控制台打开模型列表看里面有没有 K3 相关的模型标识。如果能看到说明当前账号或套餐可以调用如果看不到那后面所有配置都白搭。API Key 也要提前准备好。打开控制台创建一个 Key权限范围选择允许访问 K3 模型的选项因为有些 Key 是严格限模型范围的。别把 Key 写在 Codex 的配置文件里建议用环境变量KIMI_API_KEY管理这样一方面不容易误传另一方面换账号也方便。2.2 Codex 本体安装CLI 和 Windows 桌面版Codex 的安装方式要看平台。Windows 上如果你用桌面版很多人会遇到“codex 安装 windows 桌面版未完成”的情况安装器跑到一半退出去或者进度条卡死。我试下来最管用的办法是右键安装包选“以管理员身份运行”然后把杀毒软件的实时防护临时关掉再装。桌面版需要登录但如果你的目标只是接 Kimi K3我更推荐直接用 CLI因为 CLI 的配置更透明。CLI 安装一般是用官方脚本或包管理器。安装完成后先确认版本codex --version能看到版本号接着在命令行里执行codex login。这里有个关键点如果你完全不想用 OpenAI 的账号体系只想用 Kimi K3那么登录这步可能绕不开但你可以选择 API Key 方式登录也可以先随便登录一次然后通过配置文件里的自定义 provider 切到 Kimi。别把 OpenaAI 的模型和 Kimi 的模型混在一个对话里容易出奇怪的问题。2.3 兼容层工具选型自己写还是用现成的兼容层有两条路一条是用现成工具比如社区里有人基于 FastAPI 或 Node.js 写的 OpenAI-to-Responses 转发服务也有像 cc-switch 这种带图形界面的供应商切换工具。另一条是自己写一个迷你服务监听 15721 端口收到/responses请求后拼装成/chat/completions再转发出去。自己写的好处是逻辑完全可控坏处是你要自己处理鉴权、超时、错误映射工作量不小。我个人的建议是如果你只是想快速用起来先用现成工具如果工具排错排不动了再自己写一个最小实现来定位问题。因为很多现成工具的报错信息并不友好像cc switch local proxy failed while handling codex endpoint /responses这句话它只能告诉你“本地转发服务在处理 /responses 时挂了”至于为什么挂你还得去看日志。2.4 端口规划与本地服务约定端口选择看起来不起眼但坑不少。Codex 的报错里会出现15721这个端口实际上是你启动兼容层时自己定的不一定非得是 15721。关键是 Codex 配置里的base_url必须跟兼容层监听端口保持一致。我习惯固定用 127.0.0.1 而不是 0.0.0.0因为这是一台开发机的本地服务没必要对外暴露。如果端口被占用服务起不来Codex 就会觉得连接失败表现成 502 或连接拒绝。启动兼容层之前先用netstat -ano | findstr 15721Windows或lsof -i :15721macOS/Linux看一眼端口是否已被占用。有时候你之前启动过另一个服务忘了关就会导致新服务绑定失败而 Codex 把请求发到了一个已经死掉的旧进程上报错日志特别迷惑人。3. Respons 兼容层配置实操从 Codex 配置到链路验证3.1 Codex 的 config.toml 标准写法Codex 的配置文件通常位于用户目录下的.codex/config.toml。你需要定义一个自定义 model provider然后把默认模型指到 Kimi K3。下面是一份我实测可用的最小配置model kimi-k3 model_provider kimi [model_providers.kimi] name Kimi K3 base_url http://127.0.0.1:15721/v1 env_key KIMI_API_KEY wire_api responses这段配置有几个重点base_url一定要写到/v1这个层级因为 Codex 会在后面拼上/responsesenv_key告诉 Codex 从环境变量KIMI_API_KEY里读取 Kimi 的 Key不要硬编码在配置文件里wire_api是 Codex 跟这个 provider 通信时使用的协议格式这里必须写responses才能触发 Responses API 的请求路径。如果你把wire_api写成chatCodex 就会改用/chat/completions那兼容层写的 /responses 转换逻辑就用不上了。3.2 兼容层上游配置把 /responses 翻译成 Kimi 能懂的请求兼容层这边核心就是“收到 /responses 请求后转成 /chat/completions”。如果你用现成工具通常只需要填三个参数监听端口、Kimi API Key、Kimi 的上游地址。Kimi 的上游地址以官方文档为准不过大概率要填到/v1。如果你决定自己写一个最小兼容层代码思路大概是先用 FastAPI 或 Flask 在 15721 端口启一个服务定义POST /v1/responses路由接收 Codex 的 JSON 请求后从环境变量里取KIMI_API_KEY把model、messages、工具定义等关键字段提取出来重新组装成一个 Chat Completions 的请求体然后用requests或httpx发到https://api.kimi.example/v1/chat/completions拿到返回结果后再映射回 Responses API 的响应结构返回给 Codex。响应结构里最核心的是output字段Codex 会从这里提取文本内容和工具调用映射错了就会导致 Codex 明明收到结果却显示异常。我建议第一次调试时兼容层日志要打印完整请求体和上游返回体。别嫌日志多这一步能让你少猜很多谜。3.3 环境变量与启动顺序启动之前把环境变量准备好。Windows PowerShell 下可以这样设置$env:KIMI_API_KEY你的Kimi KeymacOS/Linux 下可以临时导出export KIMI_API_KEY你的Kimi Key接着先启动兼容层服务等它打印出“listening on 15721”之类的信息再用一个最简单的 curl 命令验证上游通不通curl http://127.0.0.1:15721/v1/responses \ -H Content-Type: application/json \ -d {model:kimi-k3,input:hello}如果返回正常再启动 Codex直接问它一个简单的编程问题比如“写一个 Python 函数判断闰年”。这一步能同时验证鉴权、模型名、协议转换三个关键点。3.4 功能验证与协议细节核对验证的时候不要只问一句“你好”那样测试不到工具调用链路。Codex 这类智能体的核心能力是“边思考边调工具”所以你要给它一个需要写代码再执行的任务它才会真的发起工具调用请求。如果工具调用链路没走通可能你问普通问题一切正常但一问“帮我写个脚本并运行”就报错。另外注意Responses API 的请求体结构跟 Chat Completions 有差异尤其是消息角色和工具定义字段。兼容层在做格式映射时必须把instructions、input、tools这些字段处理好。我的经验是如果请求里带tools在转换到 Chat Completions 时要保留function类型的工具定义及strict参数否则模型输出的 JSON Schema 可能对不上。4. 常见报错与排查实录从 502 到 model not supported 的完整方案4.1 unexpected status 502 bad gateway兼容层转发失败这个报错应该是最常见的了完整信息是unexpected status 502 bad gateway: unknown error, url: http://127.0.0.1:15721/v1/responses。它的意思是Codex 成功把请求发到了本地兼容层但兼容层在向上游转发时失败了于是随便回了一个 502。别急着改 Codex 配置先去看兼容层的日志。我遇到过的原因有四种一是 Kimi API Key 配置错了或权限不足上游返回 401兼容层没处理好就返回 502二是兼容层服务本身没起来极少数情况下也会显示连接失败三是网络问题比如上游请求超时四是上传的模型名不对Kimi 不认kimi-k3这个名字上游直接拒绝兼容层也包装成 502。排查步骤很简单先用 curl 直接打 Kimi 上游确认 Key 和模型名是好的然后再用 curl 打兼容层的/v1/responses确认转换没问题最后再用 Codex 发请求。一层一层剥开问题定位非常快。4.2 model is not supportedCodex 把模型名传错了报错长这样the gpt-5.6-sol model is not supported when using codex with a...。这句话的潜台词是Codex 请求里带的模型名压根不是 Kimi 家的。最常见的原因是 config.toml 里的model gpt-5.6-sol没改成 Kimi 的名字而是沿用了 Codex 默认值。解决办法很直接把model改成你在 Kimi 控制台里看到的模型标识然后重启 Codex。注意改完不是退出重进就完事最好是codex logout之后重新登录或者干脆重启终端确保配置重新加载。还有一种情况兼容层在转换请求时图省事直接把 Codex 发来的model字段透传给了 Kimi而没有替换成 K3 的模型名。这就需要在兼容层代码里做一个模型名映射表把任意来自 Codex 的不认识的名字统一改成kimi-k3。别小看这个映射它能救你一次。4.3 auth token is unavailableCodex 登录态丢失codex auth token is unavailable这个报错多半跟 Codex 自己的登录态有关而不是 Kimi 的 Key 有问题。Codex 在某些版本里要求先完成登录才能使用即使你用的是自定义 provider它也会在启动时检查本地登录 token。解决办法运行codex login重新登录选择 API Key 方式即可。还有一个容易被忽略的点如果你设置过环境变量OPENAI_API_KEYCodex 可能会优先拿这个 Key 去跟 OpenAI 通信而不是用你自定义的 provider。建议把OPENAI_API_KEY临时清掉只保留KIMI_API_KEY避免混淆。如果你刚用 ChatGPT 账号登录过 Codex而现在切到 Kimi最好codex logout之后再登录一次因为旧 token 和新 provider 的鉴权体系是不同的。4.4 cc-switch local proxy failed图形化工具翻车实录cc switch local proxy failed while handling codex endpoint /responses这条报错我用 cc-switch 的时候碰到过好几回。cc-switch 是一个帮你在多个 API 供应商之间快速切换的工具它会在本地起一个转发服务让 Codex 以为自己在和一个稳定的端点通信。问题在于它原生支持的转发对象大多是标准的 OpenAI 兼容接口当你让它处理/responses时有些版本根本不知道该怎么转发。解决办法有几个方向第一把你的 cc-switch 升级到最新版作者很可能已经补了 Responses 支持第二检查 cc-switch 里的供应商配置base_url是否带了完整的/v1前缀密钥是否填对了第三也是我推荐的做法别依赖 cc-switch 做转发直接让 Codex 连到你手动启动的兼容层这样逻辑更清晰出问题也好查。4.5 Windows 安装未完成和其他“打不开”类问题Windows 上被吐槽最多的就是“codex 安装 windows 桌面版未完成”。我见到的原因主要有三个一是安装包权限不够卡在写入阶段二是杀毒软件把安装进程的文件隔离了三是旧版本残留导致新版本覆盖失败。处理办法是以管理员身份运行安装包临时关闭实时防护然后清理旧的 Codex 安装目录比如%LOCALAPPDATA%\Codex和%USERPROFILE%\.codex下的残留文件再重新安装。“codex 打不开”、“codex 官网打不开”这类问题大多数跟本机网络访问有关。先检查系统代理设置、DNS 是否正常再确认浏览器或终端能访问外部服务。注意我这里说的是常规网络排查不是让你去搞任何非常规工具。如果基础网络没问题换个网络环境试试往往就解决了。桌面版打不开的时候也可以优先考虑用 CLI因为 CLI 对系统依赖更少。4.6 排错速查表报错信息可能原因优先排查点502 bad gateway, url 指向 127.0.0.1:15721/v1/responses兼容层转发失败、上游 401/超时看兼容层日志curl 上游确认 Key 和模型名model is not supported模型名没替换改 config.toml 的 model或兼容层做模型名映射auth token is unavailableCodex 登录态失效运行 codex login清掉 OPENAI_API_KEYcc switch local proxy failedcc-switch 版本旧或配置缺 /v1升级 cc-switch检查供应商 base_urlWindows 安装未完成权限、杀软、旧残留管理员运行、关实时防护、清理残留请求发出后长时间无响应兼容层未启动或端口被杀确认端口监听检查兼容层进程5. 一些不写在文档里的实操心得这套“Kimi K3 接入 Codex”的流程我前前后后折腾了差不多一整天最深的感受是大多数问题都不是“配置不生效”而是“协议没对齐”。Codex 用的是 Responses APIKimi 提供的是 Chat Completions你光把 URL 改过去是没用的必须有这么一层转换逻辑。理解了这一点看到 502 你就不会再一脸懵而是会去查兼容层日志看到model not supported就会第一时间去查模型名映射。还有一个小技巧想分享兼容层的日志默认级别往往是 info排错时最好开 debug把每个请求的 method、path、body 和上游响应时间都打出来。很多报错你以为是在 Codex 那边其实是在兼容层和 Kimi 之间。日志够详细一次就能看出是超时、鉴权还是模型名问题。最后也提醒一句Kimi K3 的访问权限、接口地址、模型名这些信息会随平台调整而变化。你看到这篇文章的时间点如果比较晚配置里某些字段可能需要对照最新的官方文档更新。不过整体架构和排错思路是通用的只要链路是“Codex → 兼容层 → Kimi K3”这套方法论就能一直用下去。希望这份接入指南能帮你少走弯路赶紧把环境跑通。