@zhushanwen/pi-model-switch
Intelligent model recommendation and switching for Pi coding agent
Package details
Install @zhushanwen/pi-model-switch from npm and Pi will load the resources declared by the package manifest.
$ pi install npm:@zhushanwen/pi-model-switch- Package
@zhushanwen/pi-model-switch- Version
0.1.0- Published
- Jun 2, 2026
- Downloads
- not available
- Author
- zhushanwen321
- License
- MIT
- Types
- extension
- Size
- 42.8 KB
- Dependencies
- 1 dependency · 1 peer
Pi manifest JSON
{
"extensions": [
"./index.ts"
]
}Security note
Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.
README
@zhushanwen/pi-model-switch
Pi coding agent 的智能模型推荐与切换扩展。
根据套餐用量、高峰期规则、场景需求和 KV Cache 粘性,自动推荐最佳模型并通过 prompt 注入告知 AI。
安装
pi install npm:@zhushanwen/pi-model-switch
重启 Pi 后生效。
快速开始
1. 生成配置
首次使用需要生成 ~/.pi/agent/extensions/model-switch/model-policy.json 配置文件。
方式 A:自动生成(推荐)
在 Pi 中运行:
/setup-model-policy
扩展会自动读取你已配置的模型(优先使用 settings.json 中的 enabledModels),按 provider 分组,推断场景偏好和套餐规则,生成配置并展示给你确认。
方式 B:手动创建
按照下方配置格式手动创建 ~/.pi/agent/extensions/model-switch/model-policy.json。
2. 配置生效
配置文件创建后,下一个 turn 自动生效。扩展会在每次对话开始时:
- 读取套餐用量缓存
- 计算当前时间和高峰期状态
- 评估 KV Cache 粘性
- 在 system prompt 中注入推荐信息(约 150-200 tokens)
3. 切换模型
AI 看到 switch_model 工具后可随时切换:
用户: 切换到 ds-pro
AI: (调用 switch_model action=switch query=ds-pro)
配置文件格式
~/.pi/agent/extensions/model-switch/model-policy.json:
{
"version": 1,
"models": {
"glm-5.1": {
"provider": "zhipu",
"modelId": "glm-5.1-plus",
"plan": "zai",
"capabilities": ["coding", "reasoning", "planning", "chat"]
},
"ds-flash": {
"provider": "opencode-go",
"modelId": "deepseek-chat-v3-0324",
"plan": "opencode-go",
"capabilities": ["coding", "chat"]
}
},
"scenes": {
"coding": ["glm-5.1", "ds-flash"],
"planning": ["ds-pro", "glm-5.1"],
"vision": ["mimo-v2.5-pro", "mimo-v2.5"],
"chat": ["ds-flash", "glm-turbo"]
},
"plans": {
"zai": {
"priority": 1,
"peak": { "start": 14, "end": 18, "multiplier": 3 },
"budgetTarget": 85
},
"opencode-go": {
"priority": 2
}
},
"stickiness": {
"minTurns": 3,
"minInputTokens": 20000
}
}
字段说明
| 字段 | 说明 |
|---|---|
models |
模型别名到 Pi provider/modelId 的映射,含所属套餐和能力标签 |
scenes |
场景偏好列表,数组顺序 = 优先级顺序 |
plans |
套餐配置:priority(越小越优先)、peak(高峰期时段)、budgetTarget(目标消耗百分比) |
stickiness |
KV Cache 粘性保护阈值:连续 turn 数和累积 input tokens |
推荐引擎
三层决策
| 优先级 | 维度 | 规则 |
|---|---|---|
| 1 | 场景硬性需求 | vision → 多模态模型,planning → 推理模型。不受预算影响 |
| 2 | KV Cache 粘性 | 连续 ≥ minTurns turn 且累积 ≥ minInputTokens tokens 时,倾向不切换。compaction 后 1 turn 内可自由切换 |
| 3 | 预算决策 | 非高峰期优先使用高优先级套餐;高峰期自动降级到低成本套餐 |
预算算法
非高峰期 → 使用高优先级套餐(如 zai)
高峰期:
- 窗口快重置 + 还有大量预算 → 仍然使用高优先级套餐(urgency)
- 已超预算目标 → 切换到低成本套餐
- 低成本套餐也快满了 → 仍然使用高优先级套餐
- 其他 → 切换到低成本套餐
switch_model 工具
| Action | 说明 |
|---|---|
switch_model |
列出配置中所有模型(标注当前模型) |
search |
按别名/provider/modelId 模糊搜索 |
switch |
切换到指定模型 |
recommend |
查看当前推荐结果和原因 |
setup |
自动生成配置 JSON(无配置时可用) |
/setup-model-policy 命令
自动生成 model-policy.json 的流程:
- 读取
settings.json中的enabledModels(如果没有则降级到全部已配置 API key 的模型) - 按 provider 分组
- 推断每个模型的能力标签(reasoning → planning,vision → 多模态,其余 → coding/chat)
- 推断套餐规则(zai 套餐默认启用高峰期 14:00-18:00 3x 计费 + 85% 预算目标)
- 展示生成的配置供用户确认修改
生成后用户可以让 AI 调整任何字段,确认后写入文件。
降级模式
配置文件不存在时:
- 不注入推荐信息
switch_model工具仍可使用list/search/switch/setupaction- 运行
/setup-model-policy可自动生成配置
依赖
本扩展依赖 @zhushanwen/pi-quota-providers(private 包)获取套餐用量数据。
License
MIT