2853 字
14 分钟
dsh-plugin-NoLetMe
2026-08-19
Human Participation
Yuer6327
/
NoLetMe
Waiting for api.github.com...
00K
0K
0K
Waiting...

NoLetMe 是 DeepSeek Harness(dsh)网页端的官方插件插槽(shell.overlay)插件,在会话页右侧边缘挂载一块实时推理关键词统计面板——只统计模型**推理块(reasoning blocks)**中的词法指纹,用以区分当前推理是「直接行动」还是「第一人称试探」。

npm version dsh-std Community v0.15 Awesome dsh-plugin

一句话:它做什么#

模型流式输出时,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 工具目录的开场复述框架

0.3.x 灰测按轮判定再聚合(一轮抽中不再被旧 0813 轮稀释),不改 0813 词表。每轮独立给:verdict、I'm doing、列表密度、TTFT/吐字时长;TTFT 用会话自身历史轮估出的动态命中线(中位数基线 × 抖动),慢代理不会把每轮都误报成灰测。面板报命中态与完整数字(含按轮明细与网络画像);方法与阈值见 README 的灰测如何判定。这仍是观测性指纹,不是路由实锤。

面板本身是原生融入的悬浮层:复用 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):

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 的三分类直接镜像于此:

运行(模型 / 配置)得分welet melet'sI可见回复数
V4 Pro / Minimal WSL992720101171
V4 Pro / Minimal WSL962310117181
V4 Pro / anchored-standard Win98179188171
V4 Pro / anchored-standard Win99165098181
V4 Pro / Standard WSL9111208213755
V4 Pro / PTC WSL9216194023733

规律是显式的:

  • 高分运行(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 预设同形。平台模块只 require rc.7 ∩ rc.8 ∩ 0.1.1 ∩ 0.1.2 ∩ 0.1.3 ∩ 0.1.5 ∩ 0.1.6 ∩ 0.1.7 的冻结种子(react / react/jsx-runtime / react-dom / cordis / dsh-client-ui-slots / dsh-client-ui-primitives),其余内联;宿主种子表自 0.1.6 起扩到 9 项(新增 dsh-client-ui-dockkit,0.1.7 未变),这 7 项始终是子集,所以不 require 0.1.2 新增的 dsh-client-store,也不 require dsh-client-ui-dockkit。会话快照按结构子集读取:rc.7–0.1.1 用顶层 nodes/partial(必要时回退 chat.legacy);0.1.2+ 把节点从 SessionFace 拆到 uiConversation,插件惰性合并两路,且 dsh.client.inject 不再列出已删除的 dsh-client-runtime。所以 dsh 0.1.0-rc.7、rc.8、0.1.1-rc.x、0.1.2-rc.1、0.1.3-alpha.x、0.1.5-rc.x、0.1.6-alpha.1 以及 0.1.7-rc.1 都能装。注:客户端依赖只用于构建与类型检查,运行产物除宿主种子外不带任何 @deepseek-ai/*,跨版本兼容靠结构读取而非依赖范围。*.module.css 编译为哈希类名并自动注入样式。

安装与使用#

前置:已安装 dsh CLI ≥ 0.1.0-rc.7(dsh --version)并建好目标 profile。NoLetMe 0.3.2 起随包提供 dsh-std Community v0.15 静态清单 dsh-plugin.json(facets.host.entry → lib/std/host.js),可被 @dsh-std/adapter-dsh 发现与 inventory;面板仍走原生 dsh.client / shell.overlay(标准 browser.ui.dsh/v1alpha1 尚无 overlay surface)。0.3.3 跟进 0.1.2 的 dsh-client-runtime 删除与 uiConversation 拆分;0.3.4 把 dev 锁升到 npm 上的 0.1.2-rc.1,并核对 GitHub 上的 0.1.3-alpha.1(Session persistence API / Session format v2 是宿主侧破坏性变更,overlay 契约未变);0.3.5 跟进 GitHub 上的 0.1.3-alpha.2(默认工具 / persona 前后缀拆分、subprocess handle 去掉 pid 等均为宿主侧变更,overlay 契约仍未变);0.3.6 跟进 npm 上的 0.1.5-rc.2(Session format V3、ctx.agent / Inbox、Web 插件面板 sidebar.panellist/main 均是宿主侧变更;shell.overlay 仍在,面板不迁到 Sidebar;dev 锁升到 0.1.5-rc.2);0.3.7 跟进 npm 上的 0.1.6-alpha.1(agent/session-start → 异步串行 agent/created、弃用同步历史接口 snapshotEvents/eventAt/ownEvents、ptc-runtime / workflow-ptc 改名、Messages 协议默认化、内置 E2B 移除等均为宿主侧变更;shell.overlay 仍是 {kind:'list', scope:'root'},chat.legacy 的 nodes/partial 语义未变,dev 锁升到 0.1.6-alpha.1,并在 dsh 0.1.6-alpha.1 本机无头 Edge 实测通过:面板渲染零报错、历史会话折叠(51 推理块 / 71.2K 字 / 按轮灰测明细)、刷新后持久化恢复);0.3.8 跟进 npm 上的 0.1.7-rc.1(Session 日志升 V4、Agent 生命周期 / 会话历史 / Shell 沙箱接口异步化、设置改由 Profile 插件配置保存、Agent 预设改由插件组合包声明、PTC 与工作流执行器改名、工具返回按统一 token 预算截断等均为宿主侧变更;shell.overlay 仍是 {kind:'list', scope:'root'}、chat.legacy 计数切片仍未变,dev 锁升到 0.1.7-rc.1,并把 cordis 对齐到宿主同款 ~4.0.4)。0.3.8 在已安装的 0.1.7-rc.1 上实机验证:boot manifest 正确读到本插件的 inject(locale + ui-layout)与 immediately,面板以 plugins/??dsh-noletme/client.js&rev=… 合并形式下发且只 require react,headless Edge 下面板渲染、胶囊↔卡片形变通过、零 console 报错;唯一未覆盖的是真实会话的计数链路——0.1.7 的 web profile 停在首次运行 API Key 引导上,没有可打开的会话。

0.1.7 新增的插件版本闸门不影响本插件。 宿主 evaluatePluginCompatibility() 只校验插件在 package.json 里声明为 peerDependencies 的 @deepseek-ai/dsh / @deepseek-ai/dsh-* 范围(semver.satisfies,prerelease 参与比较),不满足就拒绝安装/启动并给出 dsh plugin allow-version 这一精确到「插件@版本 × dsh 版本」的例外入口;没有 peerDependencies 字段的插件直接跳过校验。NoLetMe 不声明任何 dsh peer——它的兼容性来自结构读取而不是版本区间,因此不会被拦,也不需要开例外。

更早的 rc 未保证兼容。

Terminal window
# 推荐:从 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 ./NoLetMe
dsh 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。

相关链接#

注:本文所述词频与分类均可通过 modeltest 仓库的 trajectory_stats.json 与 classifier.mjs 独立复现;NoLetMe 仅做可视化与实时化,不对文本内容做语义判定。

这篇文章对你有帮助吗?