dsh-fingerprint-show:在 Web UI 指标行中显示模型指纹

前言

在 DeepSeek Harness (DSH) 的开发流程中,适配器将提供方的 SSE 流翻译成内部 StreamChunk 协议时,响应级的元数据(包括 system_fingerprint)通常会被丢弃。这意味着开发者很难在 Web UI 中确认当前回复实际使用的模型部署版本。dsh-fingerprint-show 插件通过捕获这一指纹,并将其以纯文本形式展示在每条 AI 回复的指标行末尾,解决了验证模型部署一致性的问题。

这是什么

由 Bortor 维护的 DSH 客户端插件。它捕获每次模型调用的提供方模型指纹(OpenAI 兼容的 system_fingerprint 字段),并在 Web UI 中每条 AI 回复的指标行末尾以纯文本显示该指纹。

核心功能

  • 完整指纹文本:以纯文本追加该次调用实际的模型指纹(如 … 127 tok/s · 0123456789abcdef0123456789abcdef),完整不截断,无按钮或图标。
  • 样式与原生一致:使用 14px 字体、24px 行高、三级灰色(--dsw-alias-label-tertiary)以及 10px 圆点间距,与原生指标文本像素级统一。
  • 悬停同步:指纹与时间、用时等指标同生同隐,悬停或聚焦消息时一起淡入(80ms 过渡),移开一起消失。
  • 历史保留:中途切换模型后,每条回复各自标注当时实际生效的部署。
  • 零侵入:不修改会话日志、不进入模型上下文、不影响 KV 缓存。

安装与启用

前置条件:已安装 dsh CLI 与 pnpm。

git clone <this-repo> dsh-fingerprint-show
cd dsh-fingerprint-show
pnpm install
dsh plugin --profile web add <path-to-checkout>

注意:add 的参数是插件包目录本身。在仓库目录里执行 add ./dsh-fingerprint-show 会把链接指到不存在的子目录(pnpm 会照常记录依赖但 bundle 层不会生效)。装好后用 dsh --profile web --dump-config 确认输出里有 # == dsh-fingerprint-show 一层。

重启 dsh web 后,把鼠标移到 AI 回复上,指标行末尾会出现 · 完整指纹 文本。

插件只在 web profile 下激活(依赖其 webServer 服务);headless profile 中保持休眠。

配置

在 profile 的 cordis.patch.yml 或 --patch 覆盖层中按 id 覆盖该行配置。注意 patch 会整行替换 config,覆盖时请重述全部需要的键。

- id: fingerprint-show
  config:
    pathPrefix: /dsh-fingerprint-show   # HTTP 路由前缀
    matchPatterns:                      # 对请求 URL 做子串匹配
      - chat/completions
    maxObservations: 500                # 进程内环形缓冲容量

诊断

浏览器直接访问 /dsh-fingerprint-show/api/observations(同源)可查看捕获结果:

{
  "observations": [ { "fingerprint": "…", "model": "…", "sessionId": "…", "time": 123 } ],
  "stats": {
    "matchedResponses": 2,
    "capturedFingerprints": 2,
    "parsedChunks": 2,
    "inflightCalls": 0,
    "totalStored": 2
  }
}

若 matchedResponses > 0 而 capturedFingerprints = 0,说明提供方响应里没有 system_fingerprint(自建/代理端点常见);lastPayloadSample 会给出最近一次无指纹响应的首个 SSE 载荷样本。

限制

  • 并发归属:并发同模型调用(如同时运行的 subagent)之间按「时间最近」归因,极端并发下可能归属到相邻调用——但指纹本身标识的是模型部署版本,值始终正确。
  • 辅助调用排除:辅助调用(会话标题、压缩)带 purpose 标记,匹配时排除,不参与消息标注。
  • 端点缺失:指纹由提供方返回,非 OpenAI 兼容的自建端点可能不携带该字段(此时不显示)。
  • 仅指标行显示:只在有指标行(timing)的消息上显示,无指标文本的消息不显示指纹。

开发

pnpm install
pnpm run build     # esbuild → lib/index.js (Node ESM) + lib/client.js (浏览器 lazy-CJS)
pnpm test          # 主机流水线 + 客户端 bundle 冒烟测试

总结

该插件通过在 Web UI 层面捕获并展示 system_fingerprint,让开发者能够直观地验证模型调用的部署一致性。它采用零侵入的设计,通过 HTTP 路由和前端半区注册结合的方式实现功能,适合需要在调试或生产环境中确认模型版本的开发者。

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

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

小夜