用途:Pi 保存的默认模型只有在模型注册表中存在完全匹配的 provider/id 时才会加载。Pi 每个 provider 只自带静态内置列表,因此 OpenRouter 的路由快捷变体(:nitro 按吞吐排序、:floor 最便宜、:exacto 高质量工具调用)以及任何新 slug 都不在其中。默认无法解析时,Pi 会静默回退到内置的 provider 默认值(openrouter 为 moonshotai/kimi-k2.6),看起来像模型被“重置”。解决办法是把该 slug 注册为自定义模型,使 find(provider, id) 能匹配。
相关文件(全局):~/.pi/agent/settings.json 保存 defaultProvider、defaultModel、defaultThinkingLevel;~/.pi/agent/models.json 按 provider 保存自定义模型;~/.pi/agent/auth.json 保存 provider 凭据(确认 provider 键存在)。
步骤:先确认真实存在该 slug(例如检查 OpenRouter 的模型/变体),拼错的 id 同样会静默回退;确认鉴权,provider 必须在 auth.json 中有 key 或存在如 OPENROUTER_API_KEY 的环境变量,无鉴权则模型虽注册但不可用,仍会回退;在 models.json 的 providers.<provider>.models 下添加模型,对内置 provider(openrouter、anthropic 等)只需提供元数据,api、baseUrl、auth 会从内置默认继承;cost/contextWindow/compat 应复制自基础模型(变体与其共享),可查看 <pi-pkg>/node_modules/@earendil-works/pi-ai/dist/providers/<provider>.models.js 中的内置条目,不要硬编码通用的 128k/16k;在 settings.json 中把 defaultProvider 与 defaultModel 设为完全一致的 id,defaultThinkingLevel 保持用户原值;验证:pi --list-models | grep <id> 能显示且 JSON 可解析,可选冒烟测试 pi --provider <p> --model "<id>" "which model are you?"。
注意事项:find() 要求 provider+id 精确匹配,settings.json 与 models.json 中的 slug 必须逐字节一致;默认无法解析时 Pi 不报错,只在页脚显示不同模型,这是判断线索;不要只改 settings.json,把 defaultModel 设为未注册 slug 无效,models.json 才是实际修复点;可选用 enabledModels(如 "enabledModels": ["<provider>/<id>:<thinking>"])固定模型选择器,防止 Ctrl+P 切换漂移;仓库内 .pi/settings.json 会覆盖全局,若默认只在某项目内恢复,先检查该文件;需完全重启 Pi,因为注册表在启动时加载。
限制:本技能改编自 davidondrej/skills,操作前请核对本地路径、工具、凭据与 agent 功能;涉及命令、远程访问、调度、浏览器自动化或改文件的工作流,须先获得用户明确同意并确认目标环境。