xsluck/dsh-llm-pi-ai-headers ↗★ 0
dsh-llm-pi-ai-headers
DeepSeek Harness LLM User-Agent/header injector with key pool round-robin: keeps the official llm-pi-ai adapter, re-injects user-agent, and supports multi-key rotation per provider. | DeepSeek Harness LLM 请求头注入器 + Key 轮询:保留官方适配器,补回 User-Agent,支持按提供商多 Key Round-Robin 轮询。
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:xsluck/dsh-llm-pi-ai-headers说明文档
阅读完整 README ↗使用
-
重启 dsh web 进程
-
浏览器硬刷新(Ctrl+F5)
-
打开 设置 → 模型扩展
-
选择提供商 → 添加请求头,例如:
Key Value User-Agentopencode/1.18.18X-Customyour-value -
如需 Key 轮询:勾选「启用 Key 轮询」,设置请求头名称(默认
Authorization),逐个添加 API Key。启用后,每次请求会按添加顺序循环选取下一个 Key 注入该请求头,与上方「自定义请求头」互不干扰 -
如需调整失败重试:在下方「重试策略」区修改模式/次数,用中文标签勾选可重试错误码(可另填自定义码),并调整退避参数(默认限次数 2 次,可一键恢复默认)
-
保存
请求头合并顺序:官方 attributionHeaders(身份头)→ Authorization → headers(settings.yaml / UI 写入,官方原样发送,其中 user-agent 被官方过滤)→ 本插件 transformHeaders 把 user-agent 补回 + Key 轮询注入(最终覆盖)。
Key 轮询配置示例
### Key 轮询配置示例
```yaml
# settings.yaml 等价写法(也可通过 UI 配置)
llm-pi-ai:
providers:
my-provider:
keyPool:
headerName: Authorization # 注入的请求头名,默认 Authorization
keys:
- "sk-key-aaa-first"
- "sk-key-bbb-second"
- "sk-key-ccc-third"
请求顺序:第 1 次 → sk-key-aaa,第 2 次 → sk-key-bbb,第 3 次 → sk-key-ccc,第 4 次 → sk-key-aaa……
Key 健康度(坏 Key 定位)
某个 Key 失效(凭据无效 / 额度耗尽 / 限流)时无需猜:
- 服务端日志:立即打 WARN,含脱敏 Key 与序号——
key #2 (Bearer…ab1f) on "my-provider" failed with INVALID_CREDENTIAL — check/replace this key - UI 健康面板:「模型扩展」→ Key 轮询卡片下方显示每个 Key 的 调用数 / 失败数 / 最后错误码;疑似失效的 Key 红框高亮 + ⚠️ 标记
- 错误码含义:
INVALID_CREDENTIAL= Key 已失效;QUOTA= 额度耗尽;RATE_LIMIT= 限流(通常无需处理)
官方重试机制会自动轮到下一个 Key,因此单个坏 Key 通常只表现为延迟略增;健康面板告诉你该换哪个。修复或删除该 Key 并保存后统计自动清零。
⚠️ 注意:
keyPool.keys以明文存储在~/.dsh/settings.yaml(官方 schema 仅对apiKeyEnv走凭据服务,未知字段不参与脱敏)。请确保该文件访问权限受控。
卸载
标准安装
dsh plugin --profile web remove dsh-llm-pi-ai-headers
官方 llm-pi-ai 适配器始终未被修改,卸载后恢复官方原样(headers 里的 User-Agent 会恢复为被过滤、不再注入的状态)。
旧版
node uninstall.mjs # 恢复前端备份 + 还原 cordis.patch.yml
node uninstall.mjs --purge # 同时删除插件文件
标准安装为什么升级不需要重跑
旧版把 UI 直接写进官方 dsh-client-ui-settings-models 的 bundle,dsh 升级后该 bundle 被新版覆盖,补丁失效。
新版把 UI 做成独立 client module:
dsh.client声明让 dsh 在浏览器侧加载lib/client.jslib/client.js注册到官方settings.section槽位,显示为设置侧边栏「模型扩展」分节(order 11,位于「模型」与「插件」之间)- 服务端通过
/api/dsh-llm-pi-ai-headers(loopback-only)读写同一个llm-pi-ai设置命名空间 - 服务端只 wrap 官方
PiAiAdapter的streamSimple,注入transformHeaders钩子;官方适配器本体不被替换
因此 dsh 升级不会覆盖本插件的前端代码与服务端注入点;升级后通常无需任何重装操作。
目录结构
dsh-llm-pi-ai-headers/
├── package.json # 标准 dsh 插件包声明
├── cordis.patch.yml # 仅插入本插件,不修改官方适配器
├── lib/
│ ├── index.js # 包入口(复用 plugin/llm-pi-ai.mjs)
│ └── client.js # 前端「模型扩展」分节(设置侧边栏)
├── plugin/
│ └── llm-pi-ai.mjs # 服务端注入器 + 设置桥(单文件,旧版也复制它)
├── install.mjs # 旧版安装脚本(保留兼容,新用户勿用)
├── uninstall.mjs # 旧版卸载脚本
└── patches/ # 旧版前端补丁片段
License
MIT