前言¶
在 DSH(DeepSeek Harness)里跑 OpenAI 兼容路由时,模型实际落在哪条检查点、网关有没有悄悄换上游,往往只能事后翻日志或抓包。官方响应里的 system_fingerprint 能对应检查点,但 UI 里通常不会直接展示;走第三方网关时,指纹字段还可能根本不存在。
下面介绍社区插件 dsh-system-fingerprint(维护者 Mizumic,分类:模型推理)。它在会话头部显示当前模型检查点或网关请求级溯源,主动探测 system_fingerprint 并映射成可读名称,同时拦截响应元数据做存证与端点登记;原始响应字节默认不落盘。插件以独立 bundle 分发,不写本机绝对路径进仓库,供应商映射可配置。
目录页:https://www.skillhub.cn/plugins/Mizumic/dsh-system-fingerprint
源码:https://github.com/Mizumic/dsh-system-fingerprint(MIT,当前包版本 0.3.0)
这是什么¶
dsh-system-fingerprint 是 DSH Web 插件:宿主半边注册 API 与响应拦截,浏览器半边在会话头部注入「检查点 / 网关溯源」徽标。
两条信息通路可以概括为:
会话模型路由(provider/model)
├─(主路)主动探测:POST <同层端点根>/chat/completions → response.system_fingerprint
│ └─ 内置 MD5 映射表 → 检查点名
└─(证据/兜底)fetch 拦截:模型响应解码前 clone,解析元数据(默认不落原始字节)
└─ 解析 system_fingerprint / model / x-ds-trace-id;记录真实对话 URL / host
└─ 上游不返回指纹时,解析响应头里的网关溯源头
└─ 仅 captureRaw: true 时把原始字节写到 $DSH_HOME/storages/system-fingerprint/raw/
插件是被动层:单独安装即可工作;可选的外部行为监测工具只读本插件产物,不装也不影响徽标与存证。
环境要求¶
| 项 | 要求 |
|---|---|
| DSH | >= 0.2.0-rc.2(需 bundle patch 与插件管理能力;README 在 0.2.0-rc.2 上完成端到端验证) |
| Node.js | >= 20(宿主半边仅用 Node 内建模块) |
| 模型端点 | OpenAI 兼容端点(可选);有 system_fingerprint 最佳,没有则走网关溯源或「不适用」 |
| 凭据 | 环境变量或 DSH credentials ref(如 DEEPSEEK_API_KEY);不写进配置文件或仓库 |
核心功能¶
徽标与交互¶
- 已知指纹:显示映射后的检查点名,例如内置表中的
flash 1017。 - 映射表未收录:显示原始 32 位
system_fingerprint(md5),不猜测、不冒充。 - 网关路由(上游不返回指纹):徽标直接显示上游端点名;悬浮卡给出后端池、上游路由、请求 id,并标明「这不是模型指纹」。取不到端点名时回退为「网关溯源」;尚未抓到真实响应时显示「不适用」。
- 悬停:自定义卡片展示模型、检查点、指纹、明文、来源、探测端点、同层可信度、trace id、稳定性、存证开关状态等;长字段自动换行。
- 点击:绕过缓存强制重新探测;可见时约每 10 分钟轮询一次(探测为真实计费请求)。
- 可选行为告警:配置
externalAlertFile读取外部只读告警 JSON;warn/critical 时徽标追加警示标记,文件缺失或损坏时静默降级。
同层探测可信度不是 high 时,圆点转警示色并在卡片中说明原因。
隐私默认¶
分发语义以隐私优先(README 自 2026-10 起):
| 开关 | 默认 | 含义 |
|---|---|---|
capture |
开 | 拦截响应,保留元数据/响应头;不落模型正文 |
captureRaw |
关 | 仅显式开启时才把解码前原始字节写入 raw/ |
captureHeaders |
开 | 头原文进存证;Authorization 等凭据始终记为 <redacted> |
请求体只解析 model 字段,不保存 prompt。默认配置下 raw/ 目录应为 0 个文件(由测试断言锁定)。
对外契约(v1)¶
| 契约 | 路径 / 形态 |
|---|---|
| HTTP 状态 | GET /api/system-fingerprint/state?sessionId=…&provider=…&model=…&refresh=1,响应带 apiVersion: 1 |
| 端点登记表 | $DSH_HOME/storages/system-fingerprint/endpoints.json |
| 只读配置导出 | $DSH_HOME/storages/system-fingerprint/config.json(白名单、无凭据) |
插件代码不引用外部监测项目,只写自己的存储目录;meta.json / raw/ 为内部产物。
内置检查点映射(默认值)¶
| 检查点 | 说明 |
|---|---|
| v4-pro | 内置 fingerprint / plaintext |
| v4f 0908(内测) | 同上 |
| flash 0910(统一版) | 同上 |
| flash 1017 | 同上 |
完整明文与 md5 见仓库 README;换供应商时可替换 checkpointTable 配置。
安装与启用¶
插件是 DSH bundle(package.json 的 dsh.bundle.patch 指向 cordis.patch.yml),并注入浏览器模块 lib/client.js。机器相关路径由符号映射定义,详见仓库 docs/SYMBOLS.md 与 docs/AGENT-INSTALL.md(含离线验证、安装、回滚步骤)。
取得发行包或本地目录后,在 DSH 中安装 bundle,例如:
# 在 DSH 里用插件管理器安装(绝对路径或 npm 包名均可)
# plugin_manager install_bundle('/绝对路径/dsh-system-fingerprint')
或在 profile 的 dsh.profile.bundles 中以 link: 引用本目录(开发时)。
装好后:
- 重新启用 bundle 后宿主半边立即生效,浏览器半边需刷新页面。
- 会话头部右上角出现徽标;无凭据时显示「缺少凭据」。
- 卸载:从 profile 的 bundles 去掉本包并刷新页面。
README 说明:勿在发行配置中写 file:// 绝对路径;开发期可通过 patch 里递增 ?v=N 热加载宿主单文件模块。
配置要点¶
在 profile 的 cordis.patch.yml 覆盖本插件行的 config(包内 cordis.patch.yml 为模板)。常用项:
| 配置 | 默认 | 说明 |
|---|---|---|
provider |
deepseek-official |
主动探测针对的路由 |
model |
deepseek-flash |
投影缺失时的兜底模型 |
openaiBaseURL |
https://api.deepseek.com |
同源根不可用时的回退探测端点 |
apiKeyEnv |
DEEPSEEK_API_KEY |
凭据环境变量名 |
timeoutMs |
15000 |
单次探测超时 |
cacheTtlMs |
60000 |
成功结果缓存 TTL |
capture / captureRaw / captureHeaders |
见上表 | 拦截与存证 |
gatewayHosts |
[opencode.ai] |
网关溯源需拦截的 host |
gatewayHeaders |
默认 6 角色 | 网关响应头语义映射;false 关闭网关溯源 |
checkpointTable |
内置 4 行 | 可替换的 fingerprint 映射 |
externalAlertFile |
空 | 可选外部告警 JSON 路径 |
非 provider 配置的路由:若响应里实际带 system_fingerprint,徽标仍优先采用;既不返回指纹又没配网关溯源头时显示「不适用」,不会借用其他路由的检查点。
典型用法¶
- 配置
DEEPSEEK_API_KEY(或apiKeyEnv指向的变量),安装 bundle 并刷新 Web 页面。 - 在目标会话中发起至少一次真实模型对话,让拦截层记录同源端点;观察头部徽标是否为检查点名或 md5。
- 悬停查看探测端点、同层可信度与最近对话响应时间差;需要强制刷新时点击徽标。
- 若走不带
system_fingerprint的网关,确认gatewayHosts/gatewayHeaders与供应商响应头一致,徽标应显示端点名或「网关溯源」。 - 需要脚本或监测工具消费状态时,请求:
GET /api/system-fingerprint/state?sessionId=…&provider=…&model=…&refresh=1
模型解析优先级:query > 会话 modelSelection > 已拦截的 llm/stream > 默认模型 > 配置。
存证或审计若必须保留原始响应体,在配置中显式设置 captureRaw: true,并注意 maxRawBytes(默认 524288)与 maxRawFiles(默认 120)的存储上限。
适用场景与注意¶
适合谁:需要在 DSH 会话界面一眼确认检查点或网关路由的开发者;需要端点登记表与元数据存证、又不想默认落盘全量回复正文的团队;可与只读消费 endpoints.json / config.json 的监测工具配合,但插件本身不依赖这些工具。
开销:主动探测会向配置的端点发送真实 chat/completions 请求(计费);页面可见时每 10 分钟轮询一次。
安全与信任:插件以当前 DSH 进程权限运行,会拦截经 connection.fetch 的模型流量并写入 $DSH_HOME/storages/system-fingerprint/。安装前请阅读源码与 MIT 许可证,确认 capture / captureRaw 与网关 host 列表符合本机合规要求;凭据不应出现在 config.json 导出中。
生态说明:DSH 社区插件目录(SkillHub)为独立站点,与 DeepSeek / 幻方无官方从属关系;本仓库 README 标明为可分发型独立仓库,不修改 DSH 宿主源码。
验证状态:仓库 CI 与 README 记载离线/宿主测试共 218 项通过(以仓库当前 badge 为准)。
结尾¶
dsh-system-fingerprint 把 system_fingerprint 探测、可配置网关溯源和响应元数据存证收敛到会话头部一条徽标里,默认不把模型回复原始字节落盘。若你已在 DSH 0.2.0-rc.2 及以上环境使用 OpenAI 兼容路由,可按 docs/AGENT-INSTALL.md 安装 bundle 并在 profile 中按需覆盖 config。