前言¶
在 DeepSeek Harness(DSH)里,若你通过 @deepseek-ai/dsh-llm-pi-ai 接入 OpenRouter、自建网关等 OpenAI / Anthropic 兼容端点,模型下拉列表通常来自 pi-ai 安装包内的静态快照,而不是向端点发起 GET /models。快照里带有 contextWindow、maxTokens 等 listing 接口往往不返回的字段,这是有意为之;代价是新发布的模型不会自动出现,手写 models 也会一直停在当初录入的版本。社区里关于「列表陈旧、与线上一致性差」的讨论已有多条(例如 deepseek-harness 仓库 discussions #3816、#5306、#5691、#4685)。dsh-llm-pi-ai-live 走另一条路:不改写适配器内部的 discover 逻辑,而是通过官方 settings、credentials、llm、tools 接缝,向各路由的 live 端点拉取模型 id,合并 pi-ai 目录元数据,并以追加方式写回配置。
这是什么¶
dsh-llm-pi-ai-live 由 WeatherWind 维护,归类为联网工具类 DSH 插件(当前 GitHub 星标为 0)。一句话定位:为使用 llm-pi-ai 的可配置 provider 路由,定期或按需查询端点上的模型列表,把新 id 追加进路由的 models 配置,并在失败时保留原配置不动。
它不 patch 核心包;也不替换 llm-pi-ai 自带的 model discovery(外部插件无法注册重复的 discovery)。它解决的是「配置里的模型表与 endpoint 实际对外公布的 id 长期脱节」这一问题。
核心功能¶
一次刷新(启动延迟后、定时周期内,或通过工具触发)大致分四步:
- Plan — 通过
llm.listConfigurableProviders()读取可配置 provider 目录,得到每条路由对应的 settings 命名空间与路径。命名空间来自 profile 里 loader 的 entry id(例如include:llm-pi-ai),因此不会写死插件名;若 profile 未加载 pi-ai 相关条目,插件不会对错误命名空间生效。 - Interrogate — OpenAI 方言:
GET {baseURL}/models(Bearer);Anthropic Messages 方言:GET {root}/v1/models?limit=1000(x-api-key与anthropic-version)。两种回复归一化为同一候选结构。 - Merge — 以 live 返回的 id 决定「有哪些模型」;
name、contextWindow、maxTokens、input优先从已安装的 pi-ai catalog 补齐,端点上报的容量作后备。 - Persist — 经
settings.mutate()写入,写前读 revision,写后确认值已落地。
行为保证(README 原文要点):
- 仅追加:已有条目按引用、顺序原样保留;新 id 追加在末尾;端点不再公布的 id 不会被删除。
- 无法完整理解则跳过:若存储的
models不是可处理的列表(例如字符串、或缺少id的项),整条路由跳过并在报告中说明,而不是用猜测覆盖。 - 失败不改配置:5xx、超时、非 JSON、协议无法解析或写入被拒,路由保持原样,并在报告中体现。
- 不写推断性字段:只写
id、name、contextWindow、maxTokens、input;不推断reasoningEfforts、compat。
可选能力 reasoning 规则(cordis.patch.yml 内 reasoning 块):对 pi-ai catalog 未覆盖、且路由上未声明 reasoningEfforts 的第三方模型,按 provider / model 的 glob 规则补全思考档位映射;已声明或 catalog 已知条目不会被改动,规则写错档位会在日志中按索引拒绝。
工具 refresh_model_catalog:可选参数 provider 限定单条路由;供智能体在不发版、不重启的情况下拉一次新模型。
安装与启用¶
插件版本 0.1.0,许可证 MIT,Node 引擎要求 ^22.19.0 || >=24(见 package.json)。安装步骤以仓库 README 为准:
# 1) build
cd dsh-plugins/dsh-llm-pi-ai-live
npm install && npm run verify && npm run build
# 2) add to the target profile (local path uses link:)
dsh plugin --profile <profile> add link:$PWD
# 3) restart DSH
也可将仓库中 cordis.patch.yml 的 insert 块合并进 <DSH_PROFILE_DIR>/cordis.patch.yml。
首次建议开启 dry run。 dryRun: true 时只计算并打日志,不写 settings。README 给出的 OpenRouter 实机启动日志示例:
[live-catalog] mounted (first pass in 0ms, periodic refresh off, dry run)
[live-catalog] openrouter: dry run — would add 464 model(s): openai/gpt-6.1-sol-pro, ...
[live-catalog] scheduled: 1 updated, 464 added, 0 failed, 0 skipped in 932ms
确认报告合理后再将 dryRun 设为 false。
配置项均在 cordis.patch.yml 中有默认值说明,常用字段如下:
| 字段 | 默认值 | 含义 |
|---|---|---|
enabled |
true |
总开关;false 时加载插件但不调度 |
startupDelayMs |
10000 |
挂载后首次刷新延迟(ms);0 立即执行 |
intervalMs |
21600000 |
周期间隔(ms,六小时);0 关闭周期刷新 |
timeoutMs |
30000 |
单次请求超时 |
settingsNamespaces |
[] |
要服务的命名空间;空则自动检测 pi-ai 命名空间 |
include / exclude |
[] |
只刷新或排除的路由 key |
enrichFromCatalog |
true |
新条目是否用 pi-ai catalog enrichment |
maxModels |
2000 |
每条路由存储模型条目上限 |
dryRun |
false |
只报告不写入 |
toolEnabled |
true |
是否注册 refresh_model_catalog |
第三方网关若需为新型号声明 reasoningEfforts,可在 patch 中启用 reasoning.enabled 与 rules(provider / model glob + efforts 或 efforts: false),详见 README 「Declaring reasoning effort for third-party models」一节。
典型用法¶
- 在目标 profile 按上文完成 build 与
dsh plugin add link:$PWD,重启 DSH。 - 保持
dryRun: true,观察日志里各路由「would add」的 id 是否与你的 endpoint 一致。 - 关闭 dry run,按需调整
startupDelayMs、intervalMs,或用exclude: ['某路由']跳过本地或不可 listing 的 provider。 - 发布新模型后,让 Agent 调用
refresh_model_catalog,必要时传入provider缩小范围,无需改 yaml 再重启。
适用场景与注意¶
适合谁: 已用 DSH llm-pi-ai 接 OpenAI / Anthropic 兼容 API,且希望配置中的模型表与线上一致、又不想手工维护几百个 id 的开发者与运维。
务必知晓:
- 插件以 当前 DSH 进程权限 运行,会向各路由配置的 base URL 发起联网请求并使用已有 credentials;安装前应阅读源码与 MIT 许可证,确认 endpoint 与密钥归属可信。
- 它 不能 替代 UI 里「从 provider fetch models」若与内置 discovery 冲突的那条路径;它改的是 持久化在 settings 里的
models列表。 - 列表 只增不减;若要从配置里下线某 id,仍需人工编辑 settings。
- DSH 生态强调「一切皆插件」;社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-llm-pi-ai-live 在不动核心适配器的前提下,用官方 settings 接缝把 llm-pi-ai 路由的模型表与 live listing 对齐,并保留 catalog 元数据与保守的写入策略。目录页:https://www.skillhub.cn/plugins/WeatherWind/dsh-llm-pi-ai-live;源码与完整说明:https://github.com/WeatherWind/dsh-llm-pi-ai-live。