如何启用 9Router 的 Ponytail 模式(Lite/Full/Ultra)减少输出 token?
【免费下载链接】9routerUnlimited FREE AI coding. Connect Claude Code, Codex, Cursor, Cline, Copilot, Antigravity to FREE Claude/GPT/Gemini via 40+ providers. Auto-fallback, RTK -40% tokens, never hit limits.项目地址: https://gitcode.com/GitHub_Trending/9r/9router
如果你在通过 9Router 让 Claude Code、Codex、Cursor 等客户端写代码时,发现模型总产出冗长代码、多余的抽象和"以防万一"的脚手架,可以用 9Router 内置的 Ponytail 功能:它在每次 chat 请求转发给 provider 之前,向请求体的 system message 注入一段 "lazy senior dev"(懒高级开发)提示词,把模型逼向最小化、YAGNI-first 的写法,从而减少输出 token。本文基于项目 README.md 与相关源码,说明如何启用 Ponytail、在 Lite/Full/Ultra 三个档位之间选择,以及如何确认注入确实生效。
先说两个默认值(见 settingsRepo.js):
ponytailEnabled默认false,即 Ponytail 默认关闭,需要你手动打开;ponytailLevel默认"full",如果只打开开关不选档位,实际按 Full 档执行。
Ponytail 做了什么
注入的完整提示词在 ponytailPrompt.js 中,核心内容:
- 人设:You are a lazy senior developer —— "懒"指高效而非草率,"最好的代码是不用写的代码";
- YAGNI 阶梯:写代码前停在第一个成立的台阶——1) 这东西是否必须存在;2) 标准库能否解决;3) 平台原生能力能否覆盖;4) 已装依赖能否解决(不为几行代码新增依赖);5) 能否一行了事;6) 最后才写最少可运行的代码;
- 规则:不写未要求的抽象(单实现的 interface、单产品的 factory、永不变值的配置一律不写)、删除优先于新增、最少的文件、最短的可工作 diff;
- 输出格式:先给代码,随后最多三行说明"跳过了什么、什么时候补",固定模式为
[code] → skipped: [X], add when [Y]; - 底线:信任边界的输入校验、防数据丢失的错误处理、安全、无障碍、以及你明确要求的任何内容,绝不为简化而砍掉;非平凡逻辑会留下一个可运行的自检。
注入时机在 chatCore.js:格式翻译完成后、dispatch 到 provider executor 之前执行,且受总开关约束(见下文"单请求绕过")。
选择档位:Lite / Full / Ultra
三个档位对应同一套阶梯与规则,强度不同(README 与 dashboard 前端常量描述一致):
| 档位 | 级别值 | 行为 |
|---|---|---|
| Lite | lite | 按要求实现,但额外用一行指出"更懒的替代方案",由你来决定是否采纳 |
| Full | full(默认) | 强制执行 YAGNI 阶梯:stdlib → 原生能力 → 现有依赖 → 一行代码 → 最少代码;最短 diff、最短解释 |
| Ultra | ultra | YAGNI 极端派:删除优先于新增,直接给出一行解,并在同一回复里质疑需求中其余部分的必要性 |
档位值是小写字符串lite/full/ultra,UI 按钮和 API 字段都用这套值。
通过 Dashboard 启用(主路径)
- 打开 9Router Dashboard 的 Token Saver 页面(路由
/dashboard/token-saver,README 中写作 Dashboard → Endpoint → Ponytail)。该页同时管理 RTK、Headroom、Caveman 等 token 节省项,Ponytail 是其中的独立一行; - 找到Lazy senior dev (Ponytail)这一行,把右侧 Toggle 打开;
- 打开后,Toggle 左侧会出现Lite / Full / Ultra三个按钮,点击其中一个选择档位;
- 每个操作都会立即通过
PATCH /api/settings持久化,刷新页面后仍保持。
替代路径:直接调用 settings API
如果你习惯用命令行管理(或 dashboard 不便访问),读写的是同一组字段:
# 查看当前设置(返回 JSON,检查 ponytailEnabled / ponytailLevel 字段) curl http://<9Router 服务地址>/api/settings # 启用 Ponytail 并设为 Lite 档;<9Router 服务地址> 替换为你实际访问 dashboard 的主机与端口 curl -X PATCH http://<9Router 服务地址>/api/settings \ -H "Content-Type: application/json" \ -d '{"ponytailEnabled": true, "ponytailLevel": "lite"}'关闭时把ponytailEnabled置为false即可,档位值可以保留。
验证是否生效
- 设置持久化:
GET /api/settings的返回中应为ponytailEnabled: true、ponytailLevel为你所选的档位; - 响应形态:向任意走 9Router 的模型发一个编码请求。开启后回复会遵循 Ponytail 的输出格式——先给代码,随后至多三行说明,出现
→ skipped: [X], add when [Y]这样的收尾,且不再附带设计说明式的长文; - 运行日志:chatCore.js 对每个请求维护一条 token-saver 标记日志行,Ponytail 生效时会追加
PONYTAIL:<level>(如PONYTAIL:lite),可在 9Router 的调试/请求日志中搜索该标记确认。
单请求绕过与组合使用
- 单请求绕过:请求头加
X-9Router-Token-Saver: off,该次 chat 请求会绕过所有 token 节省项(包括 Ponytail、Caveman、RTK、Headroom)。适合临时需要模型"正常发挥"的场景; - 组合:Ponytail 与 Caveman(输出简练化)、RTK(输入压缩)互不冲突,可叠加使用——Ponytail 约束"写什么代码",Caveman 约束"话怎么说",RTK 压缩"输入里的工具输出";
- 边界:Ponytail 只改变模型的写作风格,文档未给出固定的 token 节省百分比,README 只说明收益是 "Fewer output tokens, less refactoring"。信任边界的输入校验、安全、防数据丢失的错误处理等内容按提示词约定不会被简化掉。
如果同一请求里你既想要 Ponytail 的极简代码、又想要 Caveman 的电报式回复,在同一个 Token Saver 页面同时打开两者开关即可,验证方式相同。
【免费下载链接】9routerUnlimited FREE AI coding. Connect Claude Code, Codex, Cursor, Cline, Copilot, Antigravity to FREE Claude/GPT/Gemini via 40+ providers. Auto-fallback, RTK -40% tokens, never hit limits.项目地址: https://gitcode.com/GitHub_Trending/9r/9router
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考