前言¶
在 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 路由和前端半区注册结合的方式实现功能,适合需要在调试或生产环境中确认模型版本的开发者。