dsh-opencode-session-id:零配置 OpenCode 会话 ID 注入

在基于 DeepSeek Harness (DSH) 的智能体开发中,对接 OpenCode 类模型(如 opencode / opencode-go)时,需要在出站 HTTP 请求中携带会话标识(如 x-opencode-session),以便网关识别会话上下文。手动注入不仅繁琐,还容易在多实例部署时引入不一致。DSH 的插件化生态提供了标准化扩展点,下面介绍一个专门解决这一问题的插件。

dsh-opencode-session-id 是一个 DeepSeek Harness 插件,由 gausszhou 维护。它的核心价值是在使用 OpenCode 模型时,自动将会话 ID 注入到出站 HTTP 请求的 Wire 层,实现零配置运行。

核心功能

  • 自动注入会话头:在出站 HTTP 请求中添加 x-opencode-session、x-session-affinity、x-client-request-id 等头部。
  • 零配置:安装后默认启用,无需额外配置。
  • Wire 层拦截:通过包装 fetch 在网络传输层注入头部,不改变请求体、URL 和方法。
  • 确定性哈希:将会话 ID 中的 UUID 部分哈希为 8 位字母数字的 nanoid,提高安全性并降低头部长度。
  • 协议覆盖:主要覆盖基于 fetch 的协议(如 openai-completions、openai-responses、anthropic-messages)。

安装与启用

  1. 安装插件:
    使用官方包名安装到 web 配置文件:
    dsh plugin --profile web add "@gausszhou/dsh-opencode-session-id"
  1. 重载服务:
    安装后需重启 dsh-web 进程以使插件生效:
    systemctl --user restart dsh-web

典型用法

  • 查看日志:启用调试模式以查看原始 ID 到 Wire Token 的映射关系:
    journalctl --user -u dsh-web -f | grep opencode-session-id
  • 配置 verbose:在配置文件中开启详细日志:
    - id: opencode-session-id
      config:
        verbose: true

适用场景与注意

  • 适用场景:使用 DSH 运行 OpenCode 模型,且需要与 OpenCode Gateway 保持会话一致性的场景。
  • 注意:
    • 该插件仅支持基于 fetch 的协议,不覆盖 transport: websocket。
    • Wire Token 是对 UUID 部分进行的单向 SHA-256 哈希,无法逆向还原原始会话 ID。
    • 修改 nanoid 相关配置(如 nanoidLength、nanoidAlphabet)会破坏与旧记录的关联,需谨慎调整。

经过上述步骤,DSH 在调用 OpenCode 模型时将自动携带正确的会话头。该插件通过 Wire 层拦截,在不干扰业务逻辑的前提下完成了会话追踪。更多细节可参考插件目录或GitHub 仓库。

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

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

小夜