GrayPrint · dsh 思维链写法比对面板
中文 | English
DeepSeek Harness(dsh)网页端插件,在会话页右下角挂一块面板:把当前会话的思考文字定位在两个实测样本极点之间 —— 写法更像哪一批。只比写法,不评好坏。
| 极点 | 写法 | 证据来源 |
|---|---|---|
| 🟢 灰度思维链 | 第一人称叙述:I'm planning out… I'll set up… I've got… |
opncd.ai 分享的 dsv4 灰度 opencode 会话 41 个 / 1749 段思考 |
| 🔵 当前版思维链 | 集体人称速记:We need answer likely… Let's inspect…,不成句 |
本机 DSH 导出的当前版 standard preset 会话 42 个 / 2727 段思考 |
为什么是这两极
起因是检验 NoLetMe 的判据在这批语料上是否成立。结论是极性相反:13 个当前 flash 会话里 11 个 let me = 0,按 NoLetMe 的规则全部拿到「高效」;而被社区称作"核弹之作"的灰度会话全部被判「犹豫」。let me 在两极间只差 5.7 倍,是最弱的一根轴,所以 GrayPrint 把它只做展示、不进判别。
对照组的一次重大修正
v0.1 的对照组是错的。 当时的"当前极"取自 anchored-standard preset —— 而那个 preset 的设计目的本就是把模型锚回 minimal 的电报体轨迹,等于把结论写进前提。用 169 个真实会话分层复测后发现:同一个当前模型,只换 preset,得分从 10% 跳到 86%,8 个当前版会话被误判成「灰度思维链」(其中一个还是本插件的开发会话自己)。
改用 standard preset 作对照后,真实分离度是这样:
| 判别轴(每推理段归一) | 灰度 | 当前版 standard | 倍差 | 单轴准确率 | 权重 |
|---|---|---|---|---|---|
段落开头就说 I'm/I'll |
43.4% | 4.8% | 9.1× | 95.2% | 44% |
每段 I'm+I'll 次数 |
5.73 | 2.08 | 2.8× | 86.7% | 36% |
每段 we+let's 次数(反向) |
0.083 | 0.649 | 7.8× | 71.1% | 20% |
段落开头说 We/Let's |
0.0% | 0.6% | — | 53.0%(≈随机) | 0% |
| 段落中位长 | 506 字 | 1419 字 | 2.8× | 50.6%(≈随机) | 0% |
两条轴被剔除计分:块首 We 类 只在对 anchored-standard 时有效;段落长度方向和我最初的假设相反(灰度段落更短)且到了随机水平。
判别式
三轴加权(比率轴线性、计数轴 log10(x+0.01),在两极值间夹逼到 [0,1])。得分 ≥45% 判「灰度思维链」,≤25% 判「当前版思维链」,其间为「两者之间」。
非对称证据门:判「灰度」额外要求 ≥16 段思考文字。灰度是"意外主张",而小样本下块首比率极不稳(标定中 3 个误判全是 8/9/15 段的会话);不足 16 段时报「样本偏少 · 倾向灰度」。这一道门把标定内误判从 3 个降到 0 个。
验证
留出验证 92.8%(200 次 70/30 随机划分,阈值在训练折内重选)。这才是诚实的数字 —— v0.1 宣称的 96.3% 是在同一批数据上自证的。
发货代码在全部语料上的实测:
| 语料 | n | 灰度 | 两者之间 | 当前版 | 守卫拒判 |
|---|---|---|---|---|---|
| 灰度 opencode(41 会话 / 1749 段) | 41 | 35 | 0 | 1 | 5 |
| 当前版 standard(标定内) | 43 | 0 | 4 | 35 | 4 |
| 当前版 其他 preset(标定外 72 个) | 72 | 1 | 0 | 67 | 4 |
得分分位:灰度 中位 78%(p25 68%);当前版 standard 中位 18%(p75 23%);当前版其他 preset 中位 0%。
唯一被判成「当前版」的灰度会话是 Pybm06QA(18%)—— 它也正是该批里最接近原始草稿的一个(let me=255、自我纠正标记最多)。
四道守卫(拒绝给假读数)
- 中文思考 — 中文占比 >15% 时拒判并标注。词表全英文,中文思考下各轴全部计 0 会伪装成"满分",这是 NoLetMe 的已知盲区,此处显式堵住。
- 样本太少 — 思考段落 <5 拒判。
- 非对称证据门 — 判「灰度」需 ≥16 段,否则降级为「样本偏少 · 倾向灰度」。
- 没有思考文字 — 只有可见回复时报告异常,不从回复文本编造轨迹。
诚实边界
- 两极样本来自不同渲染通道:灰度侧是 opencode 分享页的叙述体呈现,当前侧是 DSH 原生
reasoning块。部分差异可能来自通道而非模型版本 —— 这一点至今没有被排除。 要排除它,需要"当前模型跑在 opencode 上"的样本,而那批仓库是灰度期存档,没有。 - 灰度侧只有正例(社区精选后发布,幸存者偏差),两侧都没有任务评分或 rubric。
- preset 的影响大于版本的影响:同一模型换 preset,得分可以从 10% 到 86%。所以一个「灰度」读数不能推断模型版本。
- 因此本面板测的是推理的叙述人称形态,不是能力、后端、路由或 checkpoint 判定。
安装
前置条件:dsh CLI ≥ 0.1.0-rc.7,并已建好目标 profile。
方式一 · 从 GitHub 直装(推荐) —— 不需要任何构建授权。本插件的 lib/ 是手写的、已随仓库提交,没有 prepare 脚本,所以 pnpm 没有需要你 allowBuilds 批准的东西:
dsh plugin --profile web add github:HongzhongL/dsh-grayprint
想钉死版本就加 commit:github:HongzhongL/dsh-grayprint#<sha>。
方式二 · Release 里的 tgz:
dsh plugin --profile web add ./dsh-grayprint-0.2.0.tgz
方式三 · 本地 clone:
git clone https://github.com/HongzhongL/dsh-grayprint.git
dsh plugin --profile web add ./dsh-grayprint
装好后重启 dsh web 宿主,再刷新页面。卸载:dsh plugin --profile web remove dsh-grayprint。
使用
面板停靠右下角(NoLetMe 在右上角,两者不重叠)。折叠时是一枚显示判决的胶囊,点击展开成卡片:极性刻度、三条判据(各带两端参照值)、以及实际数出来的数字。开合状态记在 localStorage。
数据口径与隐私
- 只统计推理块(
kind === 'reasoning');可见回复文本仅用于"没有思考文字"的异常诊断,永不参与词频。 - 每块计数按块对象身份缓存在
WeakMap,流式增量只重算在飞的那一块。 - 数据不离开你的浏览器。
架构
lib/index.js # Node(宿主)半边 —— 空操作,满足 Loader
lib/client.js # 浏览器包(手写闭包工厂,无构建步骤)
# 计数引擎 / 判别式 / 守卫 / 实时会话源 / store / 面板
evidence/profile.json # 标定档:两极参照值、单轴判别力、验证结果、preset 敏感性
浏览器包是 window.__ModuleLoader__.load({id, factory}) 闭包工厂产物,externals 走注入的 require(此插件只用 react),通过官方 shell.overlay 插槽挂载,样式为带 data-plugin 的自注入 <style>。不改动、不补丁任何既有 UI。
为什么没有构建步骤:lib/client.js 直接手写成符合 dsh 客户端契约的闭包工厂产物,不经 tsdown。代价是没有 TypeScript 类型检查,收益是 git 直装即可用、用户无需授予任何安装期代码执行权限。
致谢
判据的起点来自 NoLetMe(Yuer6327)与 xiaobright/modeltest 的轨迹调研;灰度语料来自 YunhaoFu/dsv4ga-news-gather 收录的 opncd.ai 分享链接。本插件的结论与它们不一致,理由见上文。
No comments yet. Be the first to write one.