NoLetMe 是 DeepSeek Harness(dsh)网页端的官方插件插槽(
shell.overlay)插件,在会话页右侧边缘挂载一块实时推理关键词统计面板——只统计模型**推理块(reasoning blocks)**中的词法指纹,用以区分当前推理是「直接行动」还是「第一人称试探」。
一句话:它做什么
模型流式输出时,NoLetMe 对每一块 reasoning 做增量词法计数,归入三类并实时可视化:
| 分类 | 信号词 | 含义 |
|---|---|---|
| 🟢 高效 · 直接行动 | We need… We should… We can… We will… Let's…;首行 Good. / Great. / Excellent. | 高分轨迹的集体行动框架 |
| 🟠 犹豫 · 第一人称试探 | Let me… I think… I'm not sure… I wonder… maybe / perhaps | 低分轨迹的第一人称犹豫 |
| ⚪ 中性 · 复述任务 | The user wants… The user asked… this task… the request… | Standard 工具目录的开场复述框架 |
面板本身是原生融入的悬浮层:复用 harness 的设计系统(--dsw-alias-* 语义令牌、DetailsPanel 头/体结构、CSS Modules、明暗与 prefers-reduced-motion),通过官方 shell.overlay 插槽挂载,不改动、不补丁任何既有 UI。数据只在浏览器本地计算与存储,不外发。
为什么要做这个面板:V4 Pro GA 0813 过拟合事件
这不是一个拍脑袋的关键词列表,它的背景是一次被完整记录的后训练过拟合。
2026 年 8 月,社区在 xiaobright/modeltest 中对 DeepSeek V4 Pro GA 0813 做跨 harness 复测时发现:同一权重在 dsh 的 Minimal 预设下表现显著优于 Standard / Creator / Code 等更宽的工具目录——典型如 Project2 V4.1b 上 99/96 分(Minimal) vs 91–92 分(Standard)。诊断指向 RL 阶段对 Minimal 双工具脚手架(bash + str_replace_editor、固定 persona、固定 schema)的过拟合。
关键分析文档(2026-08-14,modeltest docs/v4.1):
DEEPSEEK_V4_PRO_HARNESS_ANALYSIS_20260814.mdDEEPSEEK_V4_TRAJECTORY_ANALYSIS_20260814.mdDEEPSEEK_V4_TRIGGER_MECHANISM_EXPERIMENTS_20260814.md
NoLetMe 的价值,就是把这份事后分析变成事中可观测——当你在 dsh 网页端与模型对话时,不必事后导出轨迹再跑脚本,面板会实时告诉你:当前推理更接近哪一类轨迹。
证据链:从冻结数据集到可复现的词频分界线
本插件刻意把每一步都锚到可验证的公开产物上,而非「感觉像」。
1. 测试集是冻结的真实工程任务
所用测试集为 Project2 V4.1b——一个真实损坏的 ESP-IDF 嵌入式工程修复任务,已于 2026-07-23 正式冻结(PROJECT_FROZEN.md),评分规则与隐藏测试用例于 2026-07-19 做 SHA-256 固定。这保证了「Minimal 高分 / Standard 低分」不是 prompt 挑拣的结果。
2. 词频是指纹,而非猜测——看实测数据
modeltest 的 evaluator/trajectory_evidence/derived/trajectory_stats.json 对已完成的助手推理块做大小写不敏感的边界匹配(流式分块已去重,每次运行 SHA-256 固定),得到一条干净的分界线。NoLetMe 的三分类直接镜像于此:
| 运行(模型 / 配置) | 得分 | we | let me | let's | I | 可见回复数 |
|---|---|---|---|---|---|---|
| V4 Pro / Minimal WSL | 99 | 272 | 0 | 101 | 17 | 1 |
| V4 Pro / Minimal WSL | 96 | 231 | 0 | 117 | 18 | 1 |
| V4 Pro / anchored-standard Win | 98 | 179 | 1 | 88 | 17 | 1 |
| V4 Pro / anchored-standard Win | 99 | 165 | 0 | 98 | 18 | 1 |
| V4 Pro / Standard WSL | 91 | 11 | 208 | 2 | 137 | 55 |
| V4 Pro / PTC WSL | 92 | 16 | 194 | 0 | 237 | 33 |
规律是显式的:
- 高分运行(96–99)
we/let's密集,let me接近零; - 低分运行(91–92)
let me数以百计,I的总数也同步膨胀(137–237 vs 17–18); - 推理块更短(高分 p50 约 111–239 字符 vs 低分 437–550 字符),且高分只发布 1 条可见回复,低分则多达 33–55 条——前者把过程留在推理里,后者把过程外溢为可见文本。
完整矩阵与 p50 等细节见本仓库
docs/research.md。
3. 分类器是保守的词法规则,有原文可对
modeltest 自带精确词法分类器(evaluator/trigger_probe/src/classifier.mjs),NoLetMe 逐条对齐:
- 首行
We need→ minimal-like; - 有
we无let me→ +2; - 出现任何
let me→ standard-like; - 独立首行
Good./Great./Excellent.→ +1(弱信号,仅作辅助)。
触发机制探针则记录了开场帧的差异:Minimal / anchored 首块以 We need… / Need… 开场;Standard 25 工具目录则以 The user wants… Let me… 开场——这正是 ⚪ 中性类的来源。
4. 诚实边界:指纹不是身份
原始矩阵原文的警告被原样保留在插件与文档中:
「词法轨迹标签是观测性指纹,而非路由或身份标签。」
词频只反映推理风格,不能判定后端、路由或 checkpoint;V4 Flash 也会在分数不变时改变风格。NoLetMe 的定位因此是推理风格诊断工具,不是「模型鉴别器」。面板的 mode 徽章与占比条,回答的是「现在像哪类轨迹」,而不是「这是哪个模型」。
词表是怎么定的
三类词表的每一条都能在上表或探针记录中找到对应(实现见 src/client/keywords.ts,KEYWORD_TAXONOMY_VERSION = 1):
- 🟢 高效:
we need / we should / we can / we will(集体行动框架,Minimal 首帧)、let's(高分 88–117 次 vs 低分 0–2 次)、首行good / great / excellent(弱肯定信号)。 - 🟠 犹豫:
let me(核心指纹,Minimal 为 0,Standard/PTC 为 194–249)、i think / i'm not sure / i'm not certain / i wonder / i guess / i should、maybe / perhaps,以及原始I / I'm / I'll计数作为健康度量。 - ⚪ 中性:
the user wants / asked / is asking / needs / would like、this task / the request——覆盖 Standard 目录的复述开场与通用任务描述。
匹配规则:大小写不敏感、词边界匹配、最长连续 token 优先;good/great/excellent 仅在块首有效。
面板体验与工程细节
只统计推理,与证据一致关键词只对推理块计数,与
analyze_trajectory_exports.py的口径完全一致。若模型几乎全部以可见文本输出、推理块很少,面板会显示推理健康告警(附原始reasoning / text计数),而不是拿文本去凑数。
- 实时增量折叠:每个
reasoning-delta流式增量到达即折叠,每动画帧至多一次,不整段重扫会话。 - 切换会话不闪:先用
localStorage(dsh-noletme.stats.<sessionId>)的本地缓存重绘,再翻页载入完整历史,期间显示「同步中」。 - 本地持久化与健壮性:压缩重写只重置计数一次、历史翻页有上限且切走即中止、存储失败静默吞掉。
- 动效:胶囊 ↔ 卡片是同一表面的临界阻尼弹簧形变(可打断、锚定右 dock),
prefers-reduced-motion下降级为瞬时切换;开合状态会被记住。
浏览器包通过 window.__ModuleLoader__.load(...) 闭包工厂产物加载,与 harness 自带的 clientBundle 预设同形;平台模块走冻结模块表,其余内联,*.module.css 编译为哈希类名并自动注入样式。
安装与使用
前置:已安装 dsh CLI ≥ 0.1.0-rc.7(dsh --version)并建好目标 profile。NoLetMe 的浏览器包按 rc.7 的客户端包构建与验证。
# 推荐:从 npm 安装(预构建,无需 allowBuilds 审批)dsh plugin --profile demo add dsh-noletme
# 或从 GitHub 安装(prepare 会自动构建 lib/)dsh plugin --profile demo add github:Yuer6327/NoLetMe
# 本地目录安装dsh plugin --profile demo add ./NoLetMedsh web --profile demo面板停靠于会话标题栏下方右上角(避开「Session log」按钮),浮在对话框上:折叠时为圆角胶囊(圆点 + “NoLetMe” + 当前模式),展开后显示实时状态条(流式/同步圆点、推理块数/字符数、可见回复)、轨迹模式徽章、各类占比条、原始指标(we · let's · let me · I)、关键词明细与犹豫压力健康提示。
Windows 注意:
cordis.patch.yml的行名用包名dsh-noletme,行名写成原始绝对路径会因 ESM loader 拒绝D:\…而报ERR_UNSUPPORTED_ESM_URL_SCHEME。
相关链接
- 插件仓库:Yuer6327/NoLetMe(MIT)
- npm:dsh-noletme
- 上游分析:xiaobright/modeltest
docs/v4.1· CTOL Digital 深度报道 · QQ 新闻 / LOCDD 社区讨论 - dsh 官方:deepseek-ai/deepseek-harness · Awesome dsh-plugin
注:本文所述词频与分类均可通过 modeltest 仓库的 trajectory_stats.json 与 classifier.mjs 独立复现;NoLetMe 仅做可视化与实时化,不对文本内容做语义判定。