dsh-session-header:给 DSH 的 LLM 请求带上会话头

前言

在 DSH / 智能体开发中,模型网关、代理或审计链路有时会按 HTTP header 识别会话。dsh-session-header 是一个 DeepSeek Harness 插件,用来在 DSH 发出的 LLM provider 请求上注入 x-session-id,让每次调用携带对应 harness session id。下面介绍它的定位、核心行为、安装方式和验证方法。

这是什么

dsh-session-headerhomily707 维护,许可证为 MIT

它的作用是:给 DeepSeek Harness 发出的每一个 LLM provider 请求注入 x-session-id HTTP header,值来自当次调用的 harness session id。插件面向 provider 层,不改变 adapter 代码,也不覆盖已有 header。

核心功能

  • 在 LLM provider 请求上注入 x-session-id。默认值是当次调用 GenerateOptions.sessionId,并去掉 session- branding prefix。
  • 使用 llm/stream waterfall 和 globalThis.fetch patch 覆盖基于 fetch 的 adapter,例如 llm-deepseekllm-pi-ai
  • 通过 AsyncLocalStorage 传播会话上下文,只影响 LLM 调用 stream 内的 fetch;并发会话按调用解析 header 值。
  • 不覆盖已存在的同名 header,判断按大小写不敏感处理。
  • 支持为每次调用配置固定值;如果既没有可用的 session id,也没有配置固定值,则该调用不注入 header。
  • 插件卸载时恢复原来的 fetch
  • 不触碰 attributionHeaders()

安装与启用

插件要求 dsh CLI 和 Node ≥ 22

作为 bundle 安装:

dsh plugin --profile <name> add github:homily707/dsh-session-header

该包是 plain JavaScript,没有 build scripts;pnpm ≥ 10 的 build allowance 不需要。安装后用 --dump-config 查看配置层:

dsh --profile <name> --dump-config

输出中查找层标记:

# == dsh-session-header

确认存在后启动:

dsh --profile <name>

如果使用本地 checkout 并通过 --patch overlay 加载,可以在 overlay 中插入插件配置。下面的 name 必须写成插件入口文件的绝对路径:

# my-overlay.yml
- insert:
    - id: session-header
      name: /absolute/path/to/dsh-session-header/index.js
      config:
        header: x-session-id
        # value: my-fixed-session-id

然后运行:

dsh --patch ./my-overlay.yml

配置项:

  • header:要注入的 header 名,默认 x-session-id
  • value:可选;设置后每次调用使用这个固定值,否则使用当次调用的 session id。

典型用法

把某个 provider 的 baseURL 指向一个会记录请求头的网关,或一个能回显请求头的 endpoint,然后开始一次会话。请求头应类似:

x-session-id: ba104306-a748-4052-a6e3-ab60be2e4c1f

每次调用使用当次调用的 session id;并发会话通过 AsyncLocalStorage 按调用解析 header 值。

适用场景与注意

适合在网关、代理或审计系统中按会话头做路由、缓存、审计的 DSH 使用场景,也适合需要覆盖 fetch 型 LLM adapter 的配置。

使用前注意:

  • 插件以当前 dsh 进程权限运行;安装前应检查源码与许可证。
  • 插件是 provider-neutral,并且不会覆盖已经存在的 header。llm-deepseek adapter 本身会发送 x-deepseek-harness-session-id;该插件不覆盖已有 header。
  • 没有可用 session id 且未配置固定值时,调用不会收到 header。
  • 插件运行时会 patch globalThis.fetch,卸载后会恢复原 fetch

链接

  • 社区目录页:https://www.skillhub.cn/plugins/homily707/dsh-session-header
  • GitHub:https://github.com/homily707/dsh-session-header
羽毛球分组比赛记分
小程序二维码

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

小夜