michele-codex-router
Michele-Codex 模型路由器(持续更新)
前言:
前几天看到新出的jev,当时第一反应就是,这个东西可以拿来做模型路由器。正好我平时主力用的codex这边没有这个功能,我就想自己搓了。但是这几天上课就没动工。然后开始之前查了一下,github上已经有一些基于jev的模型路由了,大佬的速度真的很快hhh。但是但是,我发现这些里面,没有跟我的设想形态类似的,所以还是自己动手搓了。这应该是我第三次搓工具自己用了,也算有一丢丢经验。第一个是appleranker,效果不错,但一直觉得功能设计上还有改进的余地,然后有点没想好以什么具体的形态发出来所以还留在私有仓库,具体做什么这个就先留个神秘感hhh,如果公开了会写在博客里面的。还有一个是之前那个搁浅的sqlmap-auto,这个确实是我目前太菜了,想设计好具体的形态和流程有一定困难,所以目前还是个小玩具的样子,不太能用到实战里面。然后就是这个,模型路由器了。纯粹为爱发电了。这个版本目前是第二版,还在持续改进。这个过程中还是吸取了一些经验,比如,有了初步的构思之后,在定技术路线之前,要尽量把影响巨大的功能考虑进去,不然等后面都跑出来了,再发现问题,再改,说不定就得全盘推翻了,我不喜欢重复干活。尽量一次性就定好第一版本的功能,然后给后续功能留好增添空间。整个过程中其实计划变更了很多次我才反应过来。(有点奇葩了,我明明在其他地方都知道要先定好需求再开始实现,在这里给忘了)然后就是测试,我觉得这个得单独做,不能让模型自己一次性跑完。这次就是没注意这个问题,然后第一版本出来虽然给出了占位说明这些,但实际让我朋友帮忙测试的时候才发现不够通用,会跟他原本的环境打架,没有安装失败说明什么的,还是我一个人的个人工具这样子,然后才改进了第二版本。我感觉我还是得去学一下搓东西的技巧和流程。
url:michele-codex-router/README.zh-CN.md at main · Michele-deng/michele-codex-router
以下为中文readme:
Michele-Codex 模型路由器(Jev router / OpenAI Codex 的模型故障切换代理)
本地优先的 Windows Codex 模型路由器。它决定每一轮由哪个模型来干活, 然后代理请求——Codex 的工具、权限、登录、会话和原生 /model 界面全部保留。
1 | 用户 -> jev-codex 启动器 / 桌面版 |
内部代号说明:npm 包与代码标识符仍是
jev-router/@jev-router/*, 对外项目名为 Michele-Codex 模型路由器。
它做什么
- 模型选择就是开关:模型列表选 Jev Auto = 每轮自动路由;选具体模型 = 当轮暂停路由(原生
/model即开关)。 - 一个回合一个模型:工具循环中途绝不换模型;一旦开始输出绝不静默切换。
- 技术故障自动切换:401/402/403/404/429/529、
model_not_found、 额度、超时、网络、配置错误 → 用完整原始请求立刻重试下一候选(最多 3 次尝试)。 - 带记忆的模型健康:普通故障 30 秒起指数冷却到 10 分钟;账号级拒答直接 冷却 10 分钟,累计 3 次且期间无成功 → 永久停用,直到手动成功或
health-reset。状态持久化在~/.jev-router/model-health.json。 - 质量失败不自动换:写得烂、测试不过请用原生
/model手动换—— 自动化只处理技术故障。 - 有界、隐私友好的决策:Jev 最多收到 8000 字符任务摘要 + 4000 字符 上下文摘要,绝不发送代码、工具输出、授权头或密钥;决策硬超时(默认 800ms,中转慢建议 4000ms)超时立即 fail-open。
你能得到什么 —— 说实话,取决于你的模型池
- 池子宽(3 档以上):有省钱空间。 日常大头是解释、小修、文档, 路由器把它们派给便宜快的模型,贵的留给真正需要的回合。
- 池子窄(两档,如 flash/pro):保质量,不是省钱。 你本来就用便宜档, 没有钱可省;路由器的作用是难题自动升到强模型。这个场景我们不承诺 省钱,也不在文案里装作能省。
- 决策本身花什么。
auto策略下只有候选池出现 3 种以上档位才会 调用决策层;两档以内的池子由本地规则决定(零费用、零延迟、不碰第三方)。 调用 Jev(TypeSafe System One 的jev-latest,分类模型、无生成 token)时,它收到的是有界摘要(任务 ≤8000 字符 + 上下文规模 ≤4000 字符),硬超时内返回(默认 800ms,超时回退规则)。 - 不靠相信,靠测量。 每回合的模型/档位/置信度/切换原因/
decisionSource(rules或jev)都记录在~/.jev-router/decisions.jsonl,jev explain看最近一条,evals/有 30 任务基准集做前后对比。
为自己的供应商配置
jev doctor 负责重活,模型变化后重新跑一次:
1 | node apps\jev-cli\dist\index.js doctor |
它读取你 config.toml 里已有的接线(自定义 provider 块的 experimental_bearer_token/requires_openai_auth,或根部 openai_base_url),探测 GET /models,并为每个模型生成档案写到 ~/.jev-router/profiles/。探测失败且没有任何档案时,desktop enable 会拒绝安装并列出缺什么——绝不”先接管再让你的用法全坏”。
- 档位按模型名猜测(
pro/high/max→high,flash/mini/nano→low, 其余 medium);上下文优先取模型清单里的值,没有则保守 128k。档案标着auto-generated,手动改~/.jev-router/profiles/<模型>.json校准。 - 鉴权:注入的
jev_routerprovider 复制你上游的鉴权方式(bearer token /requires_openai_auth),OpenAI 凭据不会被发往非 OpenAI 端点;没有 档案的模型原样直通你的上游。 - 默认上游:跟随 config 已有接线;
JEV_CODEX_UPSTREAM_URL可覆盖;desktop enable只在.env该字段为空时自动填写。 - 内容级错误(如上下文超限)会换候选重试但不怪模型——只有账号/渠道 拒答(
model_not_found、不支持、额度)才计入冷却与三振停用。jev health-reset对运行中的服务立即生效。
环境要求
- Windows 10/11(唯一实测平台,启动文件夹与 PowerShell 逻辑为 Windows 专用)
- Node.js 20.12+
- Codex CLI / 桌面版,已登录
- 可选:Jev/TypeSafe API Key(没有也能用,回退规则路由)
- 可选:opencodex 或任意 OpenAI 兼容上游(模型访问通道)
快速开始
1 | cd <PROJECT_PATH> |
桌面接入(日常推荐):
1 | node apps\jev-cli\dist\index.js desktop enable # 期望 "issues": [] |
然后打开 Codex,在模型列表选 Jev Auto 即开始路由;desktop disable 卸载。
让 AI 帮你装:把 INSTALL.md 整段丢给你的 AI 编程助手—— 每一步都有机器可检验的期望输出,还带”报错原文 → 解法”对照表。
本次安装会改你电脑上的哪些文件
路径改动如何还原C:\Users\<你>\.codex\config.toml新增 model_provider、带 # Jev-Router managed 标记的 [model_providers.jev_router] 块、model_catalog_json自动:改前先备份到 ~\.jev-router\config.toml.backup;desktop disable 只按键值字节级还原这几处启动文件夹 \ jev-router-proxy.vbs新增隐藏自启项desktop disable 删除~\.jev-router\新建数据目录(日志、合并目录、健康记录、备份)想彻底清理直接删该文件夹
绝不修改:~/.codex/auth.json、Codex 登录状态、opencodex 自己的目录文件、 opencodex 注入的 openai_base_url、你的默认模型。
建议首次 enable 前手动再存一份(最后的保险):
1 | Copy-Item "$env:USERPROFILE\.codex\config.toml" "$env:USERPROFILE\Desktop\config.toml.manual-backup" |
还原验证方法(第一次与第三次哈希必须相同):
1 | $c = "$env:USERPROFILE\.codex\config.toml" |
2026-09-27 实测结论:反复 enable/disable 产生的状态对字节级一致。注意 Codex 自己也会随时间改 config.toml(测试机上它自己加过一个 [tui] 块), 所以几天前的整文件副本哈希不同属正常——路由器故意只还原自己的键、不回滚 整个文件,Codex 自己的设置因此永远幸存。
命令
下表 jev 即 node apps\jev-cli\dist\index.js <命令>(jev-codex 有独立 .cmd 包装)。
命令作用jev-codex [args]通过代理启动 Codexjev route [--model ID] 任务打印一次路由决策jev profiles列出模型档案jev health配置与模型健康(无密钥)jev health-reset [modelId]清除永久停用的健康记录jev explain最近一次决策及尝试链jev desktop enable / status / disable桌面接入管理jev mcp可选 MCP 决策服务(非核心)
路由规则(优先级从高到低)
- 用户显式指定的模型(
-m/--model或原生/model)——不自动切换。 - 硬约束:上下文上限、工具能力、成本;frontier 档位需
JEV_ALLOW_LONG=1。 - 任务与模型能力匹配(Jev 决策、硬超时、fail-open)。
- 成本、缓存亲和、实时健康状态。
- Jev 置信度——低置信度不允许降档。
配置
完整模板见 .env.example。真实环境变量 > .env > 默认值。
变量默认含义TYPESAFE_API_KEY空Jev 决策 Key(可选)JEV_DECISION_PROVIDER``typesafe``typesafe / static``JEV_ROUTE_TIMEOUT_MS``800决策硬超时;慢中转建议 4000JEV_FALLBACK_PROVIDER / _MODEL``deepseek / 空故障兜底JEV_CODEX_UPSTREAM_URLOpenAI responsesOpenAI 兼容上游DEEPSEEK_BASE_URL / _KEY空独立 DeepSeek 端点/KeyJEV_PROXY_PORT``10300桌面固定代理端口JEV_UPSTREAM_TIMEOUT_MS``60000上游头响应期限(小于 Codex 约 113 秒的耐心)JEV_DECISION_POLICY``auto``auto(≤2 档走规则、3 档调 Jev)/always/rules``JEV_ALLOW_LONG``0允许 frontier 档参与
隐私与安全
- 决策方只收到有界摘要(8k/4k 字符),没有源码、工具输出、授权头、密钥。
- 代理只监听
127.0.0.1;日志存任务哈希、模型、档位、置信度、延迟、 token、尝试链,全部经过密钥脱敏测试。 - 自动路由只选模型,绝不放宽 Codex 权限或审批。
已知限制
- 仅 Windows(Windows 10/11 + Codex CLI 0.158.0-alpha.2 实测)。
- 非官方项目,与 TypeSafe(Jev)、OpenAI、opencodex 无隶属关系;”Jev” 是 TypeSafe 的产品名,此处仅用于指代它提供的决策 API。
- opencodex 是第三方、版本敏感依赖;账号/渠道决定哪些模型可用(测试机上 luna/terra/深搜可用、sol/astra 被拒——健康系统正是为此存在)。
- 本地决策 provider(Ollama/LM Studio/Laya)未实现,
local模式回退规则。 - 交互式
/model菜单点选是唯一待人工确认的步骤(目录条目与-m jev/auto已验证)。
Demo 录制步骤(发帖用)
desktop enable→desktop status全绿(5 秒)。- 打开 Codex 桌面版 →
/model→ 选 Jev Auto。 - 问个小问题 → 跑
jev explain→ 展示模型/档位/置信度/尝试链(5 秒)。 - 切到某个具体模型 → 下一问日志无新增(路由已暂停)。
- ScreenToGif/OBS 录制,控制在 10 秒内,遮掉任何密钥和个人路径。
测试与验证状态
npm test:76 个单元/集成测试(配置优先级、密钥脱敏、错误分类、 冷却/三振出局、决策超时、SSE 不缓冲、故障切换、租期粘性、手动旁路、 回环端口、配置注入/还原往返)。- CI(GitHub Actions):Node 20/24 矩阵 + 密钥/个人路径扫描。
- 真实验证:
codex exec --ephemeral单轮与工具循环、桌面 enable → 透传 →-m jev/auto决策 → disable 哈希还原 → 重新 enable。
评测
30 个代表性任务与四策略对比方法: evals/tasks.json、evals/README.md。
许可证
MIT © 2026 dengxingyue