前言¶
在 DSH(DeepSeek Harness)里调用模型时,请求往往还要经过自建网关或统一代理:需要带会话标识、租户头、链路追踪 ID 等。这类头通常只能改 DSH 源码,或在网关侧写死逻辑,改动面大、也难按 provider 或模型区分。
dsh-request-injector 是社区维护的 DSH 插件,用一份配置在请求发出前注入自定义 HTTP 头,并按 provider、model、host 做匹配;头值里的 ${变量} 只在真正发请求时求值。下面介绍它的定位、能力、安装与配置方式。
这是什么¶
- 插件名称:dsh-request-injector(目录页:SkillHub 插件条目)
- 维护者:PluieM
- 分类:模型推理(社区目录归类)
- 一句话:按 provider / model / host 匹配,向下游模型请求注入自定义 HTTP 请求头;请求头的值支持
${variable}占位符,在请求真正发出时才求值。
插件以当前 DSH 进程的权限运行,安装前应自行查阅 GitHub 仓库 源码与 MIT 许可证。社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
核心功能¶
匹配与注入¶
- 三个匹配维度:
provider精确匹配;model精确或尾部*前缀匹配(如deepseek-v4*);host按真实目标主机匹配(不计大小写)。留空表示该维度不限。 - 占位符:例如
x-opencode-session: ${sessionId}、x-trace-id: ${uuid};不做递归展开,$$输出字面量$。 - 变量缺失时:可选
skip(跳过该头)、empty(替换为空串)、error(让本次请求失败)。 - 保留头保护:
authorization、host、content-length、x-dsh-*等由 HTTP 栈或宿主管理的头拒绝写入。
双后端与生效范围¶
插件在链路上有两处落点,默认 backend: auto 同时启用:
| 后端 | 覆盖的场景 | 盲区 |
|---|---|---|
A · 官方扩展点 llm-pi-ai/request-headers |
pi-ai 适配器的全部传输方式(含 websocket) | 拿不到真实目标 URL;非 pi-ai 适配器与模型列表探测不走这里 |
B · 包装 globalThis.fetch |
所有走 fetch 的路径,可按 host 精确匹配 | websocket 握手不经 fetch |
同一条规则被两个后端各写一次时,值相同则幂等,无需额外去重。无 LLM 上下文时(例如模型列表探测),只有显式写了 host 的规则才会命中——避免把本会话级头误注入到进程内任意 fetch。
配置与 UI¶
- 配置页入口:设置 → 「请求头注入」,或 插件管理器 → 请求头注入行详情;两处读写同一 namespace。
- 配置整节为 volatile:在插件页保存后立即生效,无需重启插件或重载 DSH;也可手写 profile 的
cordis.patch.yml,Host 侧会审计并告警明显错误。 - 可视化表单支持规则增删排序、逐头校验、可用变量速查表;保存采用整表提交并带版本冲突检测。
- 安装后默认
rules为空,不注入任何头,不影响现有行为。
安装与启用¶
在 DSH 环境中执行:
dsh plugin install dsh-request-injector
或在插件管理器「添加插件」中填写 dsh-request-injector。包内已包含可直接加载的 lib/index.js(Host)与 lib/client.js(Web 客户端),无需构建步骤。
资料中 package.json 标明版本 0.1.3,声明与 DSH 0.2.2-rc.1 兼容;Node 引擎要求 >=22.19.0。
快速上手¶
配置可在界面中完成,不必先改文件。
- 打开插件管理器,找到「请求头注入」,进入配置页。
- 在「基本」区:启用插件、后端(默认「自动(两个后端都注册)」)、变量缺失时的处理方式、调试日志。
- 在「规则」区点「新增规则」:
- 匹配条件:provider、model、host,留空表示不限。
- 请求头:逐条填名称与值,值中可写${sessionId}等占位符。
- 顺序:数字小的先应用;同名头后写的覆盖先写的。 - 点「保存」。保存即生效,下一条请求即可带头。
典型 YAML 示例(给网关带会话头):
enabled: true
backend: auto # auto | headers | fetch
onMissingVariable: skip # skip | empty | error
debug: false
rules:
- enabled: true
comment: 给网关带会话头
match:
provider: newapi-responses
model: '' # 空 = 不限
host: '' # 空 = 不限
headers:
x-opencode-session: ${sessionId}
适用场景与注意¶
适合谁:需要在不改 DSH 核心、不改网关硬编码的前提下,按 provider / 模型 / 目标 host 附加 HTTP 头的智能体或网关集成场景——例如自建网关会话头、按模型区分租户标识、链路追踪头。
务必注意:
- websocket:仅后端 A 对 WS 有效;保持默认
backend: auto即可。 - 配置明文:保存在 profile 的
cordis.patch.yml;不要把长期密钥写进配置,优先用短期会话 ID 类变量。 - 能力边界:
model需手填,无下拉;只处理请求头,不修改请求体。 - 运行权限:插件与 DSH 同进程,安装前请核对源码与许可证。
结尾¶
dsh-request-injector 把「按条件注入下游模型请求头 + 运行时占位符」收成可热更新的插件配置,并兼顾 pi-ai 扩展点与 fetch 两条路径。需要查阅说明与源码时,可参考 SkillHub 目录页 与 GitHub:PluieM/dsh-request-injector。