← 返回列表
✓ 可直接安装
Deepseek v4 神鬼二象性观测面板
自动检查通过:npm 包已发布且 engines 声明满足基线(声明 Node >=22);该结论来自程序自动检查,未经人工实机验证。 · 最近上游提交 2026/8/28 · 已提供中文文档
综合分
33
GitHub 分
33
用户评分
—
★ Stars
8
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add dsh-noletmenpm 包 dsh-noletme 已校验归属本仓库,走 npm 安装最省事
信任档位:已验证本站已于 4 天前真实安装成功(L4 · 真实安装)
- 是什么
- dsh 原生插件 · other
- 装得上吗
- 本站已真实安装成功(L4 · 真实安装,非静态推断)
- 安全吗
- 本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
- 还在维护吗
- 活跃:最近一次提交在 28 天前
档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →
🟢实装验证通过· 2026/9/22
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/21(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
安装兼容性检查✓ 自动检查通过
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-noletme @ 0.3.3
✓Node 引擎要求 >=22 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后验证 2026/9/21 23:34:39
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-locale@deepseek-ai/dsh-client-runtime@deepseek-ai/dsh-client-ui-layout@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-slots用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
由 DeepSeek 最新模型翻译生成NoLetMe · dsh 推理轨迹面板
npm version dsh-std Community v0.15 Awesome dsh-plugin
NoLetMe 是 DeepSeek Harness(dsh)网页端插件,在会话页右侧边缘挂载一块实时推理关键词统计面板。
模型流式输出时,NoLetMe 只统计其推理块(reasoning blocks)中出现的特征词,据此反映当前推理风格:
| 分类 | 关键词 | 依据 |
|---|---|---|
| 🟢 高效 · 直接行动 | We need… Let's… We should… We can… We will…;首行 Good./Great./Excellent. | minimal 类高分轨迹 |
| 🟠 犹豫 · 第一人称试探 | Let me… I think… I'm not sure… I wonder… I guess… maybe perhaps | standard 类低分轨迹 |
| ⚪ 中性 · 复述任务 | The user wants… The user asked… this task… the request… | Standard 目录开场框架 |
灰测是另一层、不改 0813 词表。面板只报命中态与数字;完整判定规则见 灰测如何判定。
面板是原生融入的悬浮层:复用 harness 设计系统(--dsw-alias- 语义令牌、DetailsPanel 头/体结构、CSS Modules、明暗与 reduced-motion),通过官方 shell.overlay 插槽挂载,不改动、不补丁任何既有 UI。
证据链
本插件的分类体系并非杜撰,每一条都追溯至公开的 xiaobright/modeltest 仓库,及其对 DeepSeek V4 Pro GA 0813 后训练过拟合事件的调研:在 DeepSeek Harness「Minimal」预设(RL 训练所用的双工具脚手架)上训练出的 checkpoint,换到更宽的 Standard 工具目录后能力崩塌。
测试集:Project2 V4.1b —— 一个真实损坏的 ESP-IDF 嵌入式工程任务,已正式冻结(PROJECT_FROZEN.md,2026-07-23 冻结;评分规则与隐藏测试于 2026-07-19 做 SHA-256 固定)。
实测数据:evaluator/trajectory_evidence/derived/trajectory_stats.json(每次运行做 SHA-256 固定;只统计已完成的助手推理块,排除流式分块):
| 运行(模型 / 配置) | 得分 | 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 ≈ 0;低分运行(91–92)let me 数以百计。这条干净的界线就是 🟢 高效 / 🟠 犹豫的划分来源。
分类器:仓库自带精确词法规则(evaluator/trigger_probe/src/classifier.mjs),NoLetMe 逐条镜像:首行 We need → minimal 类;有 we 无 let me → +2;出现任何 let me → standard 类;独立首行 Good./Great./Excellent. → +1。⚪ 中性类覆盖其余 ambiguous(模糊)及复述框架 —— Standard 目录开场 The user wants … Let me …(见 DEEPSEEK_V4_TRIGGER_MECHANISM_EXPERIMENTS_20260814.md),外加通用任务描述词汇。
诚实边界:原始矩阵原文警告:“词法轨迹标签是观测性指纹,而非路由或身份标签。”* 词频只反映推理风格,不能判定后端、路由或 checkpoint;V4 Flash 会在分数不变时改变风格。灰测探针同样只报告社区观测到的特征组合,不能据此断言路由到了哪家模型。NoLetMe 是推理风格诊断工具,不是模型身份测试。
文献上的「LLM 风格指纹」分类器(例如 Bitton & Bitton, arXiv:2503.01659 的三分类器集成,或 Attestify 一类需训练语料的统计指纹)需要离线权重与校准集,不适合塞进这个浏览器插件。NoLetMe 只保留能本地、无模型地从 reasoning 算出的统计:列表密度、块长 p50、TTR、平均词长,作为灰测旁的完整数据,而不是把会话贴上 Claude/Gemini/GPT 标签。
完整事件报告见 docs/research.md。
灰测如何判定
一句话:对会话里每个助手轮独立打分,score ≥ 5 命中、≥ 2 疑似、否则未命中;任一轮命中即整段会话显示命中。加分项:出现 I'm doing +4、开场即 I'm doing +2、概要/条目形 CoT(列表行占比 ≥ 35%)+2、脏 token(Nameeee 等)+2、泄漏 fp_… 串 +2、TTFT 超过本会话动态线 +1;减分项:Let me ≥ 2 且无 I'm doing −3、裸 we ≥ 3 且无 I'm doing −1。0813 词表完全不动。
面板「灰测」一行(未命中 / 疑似 / 命中)的规则写在这里。实现:src/client/graytest.ts(信号表 gray-signals.ts),GRAYTEST_VERSION = 3。
按轮判定,再聚合
灰测是抽卡——一次抽中一轮。探针因此逐轮独立计分:
1. 每个已加载的 assistant 节点各得一个 TurnProbe(verdict、score、I'm doing 数、列表密度、TTFT…);
2. 流式 partial 单独算一条 live 轮(无 timing);
3. 会话聚合:任一轮 likely → 命中;否则任一轮 possible → 疑似;面板徽章取最高分轮的家族。
这样第 3 轮抽中不会被前两轮 0813 的 Let me 稀释;反过来旧会话里偶然一次 I'm doing 也只影响那一轮。展开后「按轮」区列出每轮一行(T / live · verdict · I'm doing · TTFT · 吐字时长)。
每轮怎么打分
对这一轮的 reasoning 文本(只算 kind === 'reasoning' 的块,可见 text 一律不算):
| 信号 | 分 | 说明 |
|---|---:|---|
| I'm doing / I am doing / 粘连 I'mdoing ≥ 1 | +4 | 08-19/20 社区主指纹 |
| 本轮最新块首行即 I'm doing… | +2 | 开场比块中出现更强 |
| 有 I'm doing 且该轮 let me = 0 | +1 | 灰测常缺 Let me |
| 概要形:列表/标题行占比 ≥ 35%(或 ≥ 15% 且有 I'm doing) | +2 | 列表行 = 行首 - • 1. 1) #–### |
| 脏 token:Nameeee、antml:thinking、 pnpm ≥ 10 默认拦截 git 依赖的 prepare 脚本。先把 pnpm 提示的包名写入该 profile 的 pnpm-workspace.yaml,再重新执行 add:
方式三 · 本地目录安装
cd /path/to/this/repo/.. # 进入 NoLetMe/ 所在目录的上级
dsh plugin --profile demo add ./NoLetMe
dsh web --profile demo # 或直接:dsh --profile demo
allowBuilds:
dsh-noletme: true
原理:cordis.patch.yml 这层在组合里插入 dsh-noletme 行;package.json 的 dsh.client 块告诉网页壳加载浏览器包。包根另有 dsh-std Community v0.15 静态清单 dsh-plugin.json(facets.host.entry → lib/std/host.js),给 @dsh-std/adapter-dsh 等标准宿主做安装前兼容判定与 inventory;面板本身仍走原生 dsh.client——Community v0.15 / browser.ui.dsh/v1alpha1 目前只有 SettingsSection 与 ToolCallView,没有 shell.overlay 对应 surface,所以标准宿主不会重挂这块面板。
标准宿主侧可先装 adapter 再装本包(adapter 扫描 profile 依赖里的 dsh-plugin.json):
dsh plugin --profile demo add @dsh-std/adapter-dsh
dsh plugin --profile demo add dsh-noletme
Windows 注意:cordis.patch.yml 的行名用的是包名 dsh-noletme,因此只有把该包装入 profile 后悬浮层才生效。行名写成原始绝对路径会失败 —— ESM loader 拒绝 D:\… 入口名(ERR_UNSUPPORTED_ESM_URL_SCHEME);Linux 下可用 file:// URL 替代。
本地开发:
pnpm install && pnpm buildsh
dsh web --patch 'D:/OneDrive/桌面/play/codes/dsh-plugin/NoLetMe/cordis.patch.yml'
使用
- 面板停靠于会话标题栏下方右上角(避开「Session log」下载按钮),浮在对话框上。
- 折叠时是圆角胶囊(圆点 + "NoLetMe" + 模式;灰测命中/疑似时改显示该态)。展开后:状态条、灰测(命中态后有指向本 README 灰测如何判定 的 ? 链接,数字始终显示)、轨迹模式、占比条、we · let's · let me · I、关键词明细、犹豫压力。方法说明不进面板。
- 胶囊↔卡片是同一表面的临界阻尼弹簧形变(可打断、锚定右 dock),prefers-reduced-motion 下降级为瞬时切换;开合状态会被记住。
数据口径、持久化与隐私
- 只统计推理,与证据一致:关键词只对推理块计数。灰测与风格数字同样扫已加载的全部 reasoning(含历史与当前 partial),不看 text。若推理块缺失/极少,面板只报健康告警和原始计数,不拿文本凑数。0813 会话分类器保持原样。
- 实时:每个流式推理增量做增量折叠(每帧至多一次),从不整段重扫会话。
- 切换会话:立即用本地缓存重绘新会话统计,再翻页载入完整历史(期间显示「同步中」指示)。
- 本地持久化:每个会话的折叠计数存于 localStorage(dsh-noletme.stats.),重开会话不重新计数,只折叠新增消息。
- 健壮性:压缩重写只重置计数一次;历史翻页有上限、切换离开即中止;存储失败被吞掉。
- 数据不离开你的浏览器。
构建
sh
pnpm install # devDependencies:tsdown、lightningcss、typescript、react types
pnpm typecheck # 可选;tsc --noEmit
pnpm test # 计数引擎 + 灰测探针 + dsh-std Community v0.15 清单契约
pnpm calibrate # 灰测阈值校准(克隆 modeltest 冻结聚合做负样本回归)
pnpm build # tsdown → lib/index.js(node 半边)+ lib/std/host.js(dsh-std facet)+ lib/client.js(浏览器包)
客户端依赖(@deepseek-ai/dsh-client-)声明为 >=0.1.0-rc.7 =0.1.1-rc.1 ⚠️ 这些包在 npm 的 latest 标签常常滞后(client 包 latest 仍可能是 0.0.1-rc.1,而 @deepseek-ai/dsh 的 latest/next 现为 0.1.1-rc.2)。升级依赖时请显式写上面的范围或具体 rc,不要用 @latest。
dsh CLI 升级后无需重装 profile:基底包(dsh-base、dsh-web-app 等)按"安装优先"从 CLI 自身解析,profile 里的行会自动跟到新版本。
浏览器包是 window.__ModuleLoader__.load(...) 闭包工厂产物(与 harness 自带的 clientBundle 预设同形):平台模块走冻结模块表解析,其余内联,.module.css 编译成哈希类名映射并自动注入样式。
架构
src/
├── index.ts # Node(宿主)半边 —— 空操作,满足 Loader
├── std/host.ts # dsh-std Community v0.15 FacetModule(无 @deepseek-ai/)
└── client/
├── index.ts # 浏览器包入口(apply/inject)
├── apply.ts # 注册 shell.overlay 入口 + 统计 store
├── slots.ts # inject-face + composed-props 契约
├── conversation.ts # 宿主快照结构子集(nodes/partial、chat.legacy、或 0.1.2 uiConversation)
├── session-source.ts # 当前会话 ConversationView 可观察源
├── session-store.ts # 统计 store:实时折叠、全历史翻页、持久化
├── accumulator.ts # 每会话增量折叠 + 压缩 + 序列化
├── keywords.ts # 有研究依据的 0813 关键词表
├── stats.ts # 计数引擎(最长匹配遍历、按块缓存)
├── graytest.ts # 本轮灰测探针(I'm doing / 概要形 / 脏 token / fp_)
├── NoLetMePanel.tsx / .module.css
└── locales.ts # zh + en 词典
推理流以 reasoning-delta 分块到达,会话层累加进 partial(每动画帧至多发布一次),落定的轮次进 nodes。rc.8 起宿主另有 chat/views,顶层 nodes/partial 仍是 0.1.1 的兼容切片;0.1.2-alpha.1 删除 dsh-client-runtime,节点改由 uiConversation 发布为 views.get('chat').legacy,SessionFace 只留 openState/hasMore/loadOlder。conversationViewOf 合并这两路。统计 store 对两者都做增量折叠(按块身份缓存计数,新节点由 seq 高水位门控),发布现成的 TrajectoryStats —— 面板从不整段重算会话。shell.overlay 是布局的帧级纯增量席位,面板样式镜像 DetailsPanel。
许可证
MIT