dsh-session-header:給 DSH 的 LLM 請求帶上會話頭

前言

在 DSH / 智能體開發中,模型網關、代理或審計鏈路有時會按 HTTP header 識別會話。dsh-session-header 是一個 DeepSeek Harness 插件,用來在 DSH 發出的 LLM provider 請求上注入 x-session-id,讓每次調用攜帶對應 harness session id。下面介紹它的定位、核心行爲、安裝方式和驗證方法。

這是什麼

dsh-session-header 由 homily707 維護,許可證爲 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-deepseek、llm-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
羽毛球分组比赛记分
小程序二维码

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

小夜