一个路由器,适配 pi 与 DeepSeek Harness

每个任务, 都用对的模型。

重要的事它是 CTO,跑量的活它是工程师。

日常编码用便宜快速的模型,复杂问题交给聪明模型。服务商掉线或限流?自动切换 —— 任务不中断。任务真的复杂时,Smart 层还会亲自规划、委派给 Fast 子代理 —— 在 pi 和 DeepSeek Harness 上通用。

多 Provider 自动切换,任务不中断 无第三方服务器 跑在你的 Pi 进程里 MIT 开源 零运行时依赖
pi-shift-router — 在 pi 中
状态栏 · toast · 自动
router: MiniMax-M3
档位: fast
mode: auto
judge 🧭 judging…
窗口 4/5 fast
🦾 [MiniMax-M3] → 修这个失败的测试
🧭 judging…
🧠 [kimi-k3] ← 架构问题自动升级到 Smart
⚠️ MiniMax-M3 429 → 切换到 deepseek-v4-flash — 1 分钟后重试
🦾 [deepseek-v4-flash] ← 同层 failover(v0.6.0)
See how
家族产品

一种路由思路,两个版本

同样的 LLM 裁判路由、同样的回退链、同样的任务级编排 —— 适配你实际在用的 agent。

pi-shift-router

v1.3.0
for pi-coding-agent

原版。一条命令装进 pi,在 Fast 与 Smart 之间路由每一轮,复杂任务还会委派给 Fast 子代理来编排执行。

  • 零运行时依赖 · 约 409 kB
  • 任务级编排默认开启
  • 369 个单元测试

dsh-shift-router

v0.5.0
for DeepSeek Harness

DSH 版本。通过 cordis.patch.yml 接入 harness,走它自己的 agent 管线,配置可以在 GUI 的 “Shift-Router” 卡片或 /router config 里实时改。

  • 复用 harness 的 agent/request 管线
  • GUI 配置卡片 + 实时命令
  • 109 个测试 · 免凭据 e2e

一晚上就能读完的代码库,两个版本。挑匹配你那个 agent 的就行。

快速上手

三步就能跑起来

装完什么都不变 —— 只有你选好模型后路由才开始工作。随时可卸载,没有任何绑定。

  1. 01 / 03

    安装

    一条命令。pi 会写入你的设置,下次启动自动加载 —— 不用重新编译,也不用改任何配置。

    为什么可以放心装
    • 零依赖、超轻量、无绑定 — 纯 TypeScript,node_modules 不多一个包,毫秒级加载;随时可卸载,pi 自动回到默认模型
    • 零遥测、零后端 — 不采集、不跟踪、不回传;一切都在本地 pi 会话内运行
    • 开源可审计 — 整个代码库一晚上能读完,装前装后都透明
    pi — zsh
    $ pi install npm:pi-shift-router
    Resolving pi-shift-router@1.3.0...
    ✔ Downloaded and registered
    ✔ Added to ~/.pi/agent/settings.json
    ℹ Loaded on next pi launch — nothing else to do.
  2. 02 / 03

    选好你的模型

    运行 /router config,选一个 fast 模型和一个 smart 模型 —— 就用你已经在用的那两个。可以存到用户级或项目级。

    怎么选
    • Fast — 你手里智价比最好的模型,而不是最便宜的(Judge 跑在它上面,它的判断力同样重要)
    • Smart — 处理重要工作的前沿模型
    • Fallback 链 — 每档加 2–3 个模型会自动形成 fallback 链,应对 429/5xx
    查看推荐配对
    pi-shift-router — Configuration
    / router config
    pi-shift-router — Configuration
    › 🦾 Fast — 0 model(s) (engineer: execution, daily coding)
    🧠 Smart — 0 model(s) (CTO: architecture, review, planning)
    🪄 Orchestration — auto (complex → Smart CTO delegates to Fast subagents)
    🎨 UX settings
    💾 Save & exit
    🚫 Discard & exit
    ↑↓ navigate · enter to select
  3. 03 / 03

    看它自己工作

    /router status 显示你的配置;下一轮就完成第一次分类。之后全自动 —— 想控制时用 /router quiet 和 /route-force 调整。

    输出怎么看
    • Spend — 每档花了多少,以及基线:不装路由器会花多少
    • Turns / upgrades / downgrades — 路由器升级或降级的频率
    • Cooldowns — 429/5xx 后休息的模型;退避结束后自动恢复
    • Window — 驱动降级门的最近 5 次分类
    pi — /router status
    / router status
    Tiers:
    🦾 Fast · deepseek-v4-flash (engineer mode)
    🧠 Smart · claude-opus-5 (CTO mode)
    Session:
    Mode: AUTO Enabled: ✅ Quiet: 🔊
    Orchestration: 🪄 auto (idle)
    Last audit: ✓ clean
    Turns: 12 (↑upgrade 1 · ↓downgrade 0)
    Manual: ✗ None
    Cooldowns: none
    Stats:
    Spend: fast $0.045 (9 calls) · smart $0.42 (3 calls) · total $0.465
    baseline: all-turns-on-smart (deepseek-v4-flash) → $3.21 · saved $2.74
    speed current=28 avg=24 tok/s
    Detail:
    Window: 5 entries (confidence: high=3 mid=2 low=0 none=0)
    Judge: 🧭 deepseek-v4-flash
    Tokens: total 12,847
    Config: ~/.pi/agent/pi-shift-router.json
工作原理

一个简洁而优雅的想法

每个任务有难度,每个模型有价格。Shift Router 自动把两者匹配起来。

就像一支团队:工程师又快又便宜地把日常活干了;CTO 在关键时刻亲自接管整轮。同一件事,两种脑力 —— 你还没打完字,路由器就已经决定该用谁。而 CTO 的任务足够大时,它也不只会单打独斗:它会把实现委派给 Fast 子代理,再逐个审查。

日常活保持便宜

只有任务真的需要深度时,judge 才升级 —— 日常编码一直跑在你的平价模型上,昂贵的前沿模型只留给真正重要的事。

判断本身几乎免费

一次微型分类调用 —— 按 fast 档价格计费几千 token,耗时 200ms–2s。相比避免误用 Smart 省下的钱,这点开销不值一提。

provider 掉线也不停

如果某个模型 429 或超时,它进入短暂冷却,同层下一个健康模型自动接管 —— 就在同一轮内,你什么都不用做。

Fast

工程师

你的日常工程师。日常活又快又稳 —— 写代码、跑测试、修 bug,不会为一次重命名或重构浪费前沿模型。

  • 日常编码与修 bug
  • 测试与重复性改动
  • 简单、低风险的任务

Smart

CTO

CTO —— 定方向、纠偏差、审结果,硬问题自己上手:架构、设计 review、安全、多步规划、不可逆的改动。高风险的轮次不会被敷衍。

  • 架构与设计决策
  • 需要真判断的 review
  • 高风险、模糊、要深度的任务
LLM Judge

一个小调用就决定

一次轻量分类 —— 由 fast 层模型自己完成 —— 读你的请求,选出 fast 或 smart。没有重推理,也没有你能察觉的延迟。

judgeTimeout: 5000
降级门

不来回抖

需要深度时升级立即生效。降级要等明确趋势 —— 最近 5 轮分类中多数是 fast —— 路由绝不中途在两个模型间来回跳。

window: { size: 5, threshold: 0.6 }
运行时故障转移

故障,自动处理

provider 限流或报错时,那个模型进入指数退避冷却(5xx 从 1m 起步;429/配额 从 16m 起步,封顶 6h),同层下一个健康模型接管 —— 你全程无感,继续干活。

cooldown: 1m → 4m → 16m → 1h → 4h → 6h
任务级编排

CTO 不单打独斗

当 Judge 判定任务复杂且编排处于 auto 模式(默认)时,Smart 层以 CTO 身份运行:规划工作、把实现委派给 Fast 工程师子代理、逐个审查结果并迭代,直到活干干净。简单任务永不编排 —— 它们留在普通路由器上。

  • 规划 → 委派 → 审查 → 迭代 → 验收
  • 每轮编排后的验收审计 —— 落地性 · 目标对齐 · 交付质量
  • fresh-context 子代理:小而快又便宜(约 $0.004 对比 fork 的约 $0.06)
  • 硬上限:maxRounds 3 · escalationThreshold 2 · /router status 显示 Last audit
  • 需要 pi-subagents;没有时优雅降级
使用场景

三种配置覆盖大多数场景

选最贴近你的那个 —— 随时可调。

01

多 Provider 抗故障

每层混 2–3 个 provider。某个限流或挂掉,同层下一个健康模型就在这一轮接管。

02

单 Provider 分层

一个 provider、两档、一份账单、一个额度池。最简配置 —— 日常用平价模型,硬活交给同一家的旗舰。

03

本地 + 云端混合

Fast 档跑你机器上的量化模型,Smart 档走云端前沿。日常活隐私在本地;关键时刻云端出手。

常见问题

几个常见问题

内容直接取自 README。

不配置任何模型会怎样?

什么都不变。两层默认都为空 —— 路由器不做任何事,pi 继续用你的默认模型。只有运行 /router config 选好模型后,路由才开始工作。

真的能省钱吗?

能。日常任务继续用你快速、高性价比的模型,而不是每个请求都烧旗舰。judge 本身按 fast 层价格计费几千 token —— 省下的钱远超这点开销。

试一下安全吗?

完全安全。配置前路由器什么都不做;纯 TypeScript、零运行时依赖;/router off 可立即停用。没有任何绑定。

Smart 层到底做什么?

它是 CTO 角色 —— 定方向、纠偏差、审结果,硬问题自己上手:架构、设计 review、安全、多步规划、不可逆的改动。高风险的轮次不会被敷衍。它不只是给建议或审查,它自己动手写代码、把活干完。

Judge 会增加明显延迟吗?

不会。分类调用只需几千 token、约 200ms–2s。调用期间状态栏显示 🧭 judging… —— 大多数用户根本感觉不到。

Primary 模型 429 或超时怎么办?

你继续干活就行。失败的模型进入指数退避冷却 —— 5xx 从 1m 起步(1m → 4m → 16m → 1h → 4h… 封顶 6h);值得故障转移的 4xx(429 限流 / 配额)跳过前几档、从 16m 起步,因为客户端限流通常比服务端闪断活得更久。同层下一个健康模型自动接管 —— 甚至在同一轮内。请求成功就立即清除冷却。

什么是任务级编排?

当 Judge 判定任务复杂时,Smart 层以 CTO 身份运行:规划工作、把实现委派给 Fast 工程师子代理(fresh context,模型取自你的 Fast 层)、逐个审查结果、用具体反馈迭代,最后做一次终验。简单任务永不编排 —— 它们留在普通路由器上。编排默认开启(auto 模式),/router orchestrate off 可关闭。它需要 pi-subagents 扩展 —— 没有它,复杂任务直接在 Smart 层运行,和以前完全一样。

编排会更费钱吗?

不会 —— 这正是它的意义。Smart 层负责规划和审查,实现交给 fresh-context 的 Fast 子代理,每个都很小很便宜:窄任务约 $0.004,对比继承 176k-token fork 的约 $0.06。硬上限把花费锁在范围内:maxRounds 3、escalationThreshold 2。如果任务其实很简单,编排机制根本不会启动。

怎么保证编排轮次真的被验收了?

两道保险。收敛协议要求每次重新委派都必须带上结构化的失败报告 —— 哪里失败、在哪、要重跑的确切验收检查 —— 并且禁止原样重发同样的反馈(此时 CTO 会自己接管该阶段)。之上还有一轮验收审计(v1.3.0):每次编排轮次结束后,确定性检查必定运行(所有子代理都已回报、最终消息带 CTO 总结、是否撞上硬上限),外加一个可选的小型 fast 档 LLM 审计,对照你最初的目标检查三个维度:落地性(验收声明有实际结果支撑)、目标对齐(交付回答了请求)、交付质量(没有拿占位符当完成)。审计结果绝不回退已完成的轮次 —— 它通过 console.warn + 提示以及 /router status 的 “Last audit” 呈现。可用 orchestration.audit.enabled 开关(默认开)。

能强制指定某一轮用某个模型吗?

可以。/route-force <tier> 为下一轮锁定 Smart 或 Fast;/route-force <provider>/<model> 锁定具体模型。/route-force auto 清除覆盖。

能混用不同 provider 的模型吗?

可以 —— 随便混。每层是一个按优先级排序的 {provider, model, priority} 列表,fast 层用 DeepSeek、smart 层用 Kimi,一份配置全搞定。

可以监控运行情况吗?

可以。/router stats 显示每档花费与节省、窗口大小、置信度分布(高/中/低/无)、累计升级/降级次数、tokens-per-second。它还会报告成本遥测:每档花了多少,以及一个基线 —— 如果每一轮都跑你的 Smart 模型(即不装路由器)会花多少钱。例如 Spend: fast $0.045 (9 calls) · smart $0.42 (3 calls) · total $0.465,基线 $3.21,省下 $2.74。状态栏也会显示实时吞吐:[🧠 kimi-k3 • 23 tok/s]。

怎么调节降级行为?

两个阈值:`threshold`(默认 0.6)控制最近 5 轮分类中要多大比例倾向 Fast 才触发降级;`minConfidence`(默认 0.5)设了一个门槛,低于它的票直接忽略。把 `threshold` 调到 0.8 能让 Smart 档停留更久。升级始终是即时的 —— 只有降级会等。

和 pi-bifrost、pi-smart-router 有什么区别?

两者都是同类 pi 路由器。@tenchi4u/pi-bifrost 用 7 步规则 + 历史技巧、4 个档位决策 —— 覆盖更多场景,但更难推演;它省的是订阅额度而不是钱,故障时断路器还可能跨档切换。pi-smart-router 跑一条 12 步本地管线(无 LLM),3 个档位还带本地档,用公式估算成本,需要本地 DB + ML 模型(约 2.5 MB 加下载)和 15+ 个环境变量。Shift Router 把决策收敛到一份可读的 LLM prompt(纯文本可审计、JSON 模式强制)、两档一个心智模型、任务级编排(Smart CTO 委派给 Fast 子代理)、省了多少钱的成本遥测、与 Judge 共用冷却的同档故障转移,以及零依赖约 409 KB。CC-Switch 是另一个类别:桌面应用,在会话之间手动切换 provider 配置 —— 可以和逐轮路由共存。

有 DeepSeek Harness 版本吗?

有 —— dsh-shift-router(v0.5.0),同一个路由器的 DSH 适配版。通过 cordis.patch.yml 接入 harness,走它自己的 agent/request 管线,配置有两种实时方式:完整的 GUI 卡片(Settings → Plugins → Plugin configuration 里的 “Shift-Router” 卡片,两档模型链都能直接编辑)和交互式 /router config 编辑器(get / set / unset / diff)。能力和 pi 版一致:LLM 裁判、缓存感知路由、运行时故障转移、任务级编排、成本遥测 —— 而且编排硬上限由插件强制,不只是提示。109 个单元测试加一个免凭据的 headless e2e。安装:git clone https://github.com/green-dalii/dsh-shift-router && npm install && npm run build,然后 dsh plugin --profile web add <路径>。

在 DeepSeek Harness 上,子代理也会被路由吗?

不会。subagent 工具派生的子代理带有 origin === 'subagent' 标记,保持它们被钉住的模型 —— 路由器只驱动顶层 agent。编排时 CTO 委派给 Fast 子代理,其模型由部署配置钉住(tool-subagent 的 agentOptions),所以子代理永远按 Fast 层的价格运行。