dsh-llm-pi-ai-live:为 llm-pi-ai 路由实时刷新模型列表

前言

在 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 长期脱节」这一问题。

核心功能

一次刷新(启动延迟后、定时周期内,或通过工具触发)大致分四步:

  1. Plan — 通过 llm.listConfigurableProviders() 读取可配置 provider 目录,得到每条路由对应的 settings 命名空间与路径。命名空间来自 profile 里 loader 的 entry id(例如 include:llm-pi-ai),因此不会写死插件名;若 profile 未加载 pi-ai 相关条目,插件不会对错误命名空间生效。
  2. Interrogate — OpenAI 方言:GET {baseURL}/models(Bearer);Anthropic Messages 方言:GET {root}/v1/models?limit=1000(x-api-key 与 anthropic-version)。两种回复归一化为同一候选结构。
  3. Merge — 以 live 返回的 id 决定「有哪些模型」;name、contextWindow、maxTokens、input 优先从已安装的 pi-ai catalog 补齐,端点上报的容量作后备。
  4. 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」一节。

典型用法

  1. 在目标 profile 按上文完成 build 与 dsh plugin add link:$PWD,重启 DSH。
  2. 保持 dryRun: true,观察日志里各路由「would add」的 id 是否与你的 endpoint 一致。
  3. 关闭 dry run,按需调整 startupDelayMs、intervalMs,或用 exclude: ['某路由'] 跳过本地或不可 listing 的 provider。
  4. 发布新模型后,让 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。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye