在基于 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)。
安装与启用¶
- 安装插件:
使用官方包名安装到web配置文件:
dsh plugin --profile web add "@gausszhou/dsh-opencode-session-id"
- 重载服务:
安装后需重启 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 仓库。