🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

情绪分析器 Thatgfsj/dsh-emotion-analyzer

DeepSeek Harness
Thatgfsj11 天前有提交已提供中文文档扫描:含敏感能力

本地为每条回复打分,悬浮框实时显示情绪变化

30/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/25 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add Thatgfsj/dsh-emotion-analyzer
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么[目录]—
dsh 原生插件 · other
暂无时间戳·判据 →
装得上吗[实装验证]—
本站尚未做安装检查
暂无时间戳·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 11 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件
查看扫描证据(共 18 处,展示前 18 条)
  • 读取本地文件
    src/inference.ts:169
    if (!existsSync(file)) throw new Error(`tokenizer.json 不存在:${file}`)
  • 读取本地文件
    src/inference.ts:252
    if (!existsSync(this.modelPath)) {
  • 读取本地文件
    src/inference.ts:270
    if (!existsSync(this.tokenizerPath)) {
  • 读取本地文件
    src/models/manager.ts:134
    return existsSync(fileURLToPath(legacy.local.model)) && existsSync(fileURLToPath(legacy.local.tokenizer))
  • 读取本地文件
    src/models/manager.ts:140
    const info = await stat(file)
  • 删除本地文件递归
    src/models/manager.ts:316
    await rm(this.modelDir(preset.id), { recursive: true, force: true })
  • 写入本地文件
    src/models/manager.ts:327
    await mkdir(modelDir, { recursive: true })
  • 写入本地文件
    src/models/manager.ts:378
    await mkdir(dirname(destination), { recursive: true })
  • 写入本地文件
    src/models/manager.ts:380
    const writer = createWriteStream(temp)
  • 删除本地文件
    src/models/manager.ts:408
    await rm(temp, { force: true }).catch(() => undefined)
  • 删除本地文件
    src/models/manager.ts:412
    await rm(temp, { force: true }).catch(() => undefined)
  • 写入本地文件
    src/models/manager.ts:415
    await rename(temp, destination)
  • 读取本地文件
    src/settings.ts:101
    if (!existsSync(file)) return DEFAULT_SETTINGS
  • 读取本地文件
    src/settings.ts:103
    const text = await readFile(file, 'utf8')
  • 写入本地文件
    src/settings.ts:120
    await mkdir(dir, { recursive: true })
  • 写入本地文件
    src/settings.ts:123
    await writeFile(temp, `${JSON.stringify(normalized, null, 2)}\n`, 'utf8')
  • 写入本地文件
    src/settings.ts:124
    await rename(temp, file)
  • 删除本地文件
    src/settings.ts:126
    await rm(temp, { force: true }).catch(() => undefined)
扫描于 2026/11/4(1 天前) · 范围 全包扫描(包内未声明入口) · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-session
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DSH 情绪分析器插件:本地 ONNX 推理为每条主模型回复打分,投影到会话状态并在网站注入可拖拽悬浮框

README

由 DeepSeek 最新模型翻译生成
dsh-emotion-analyzer DSH(DeepSeek Harness)情绪分析器插件:对主模型的每条回复做本地情绪打分,把累积情绪状态投影进 Session,并在 DSH 网站注入一个可拖拽的悬浮情绪监测框。 悬浮框展开态 功能 - 本地推理,零第三方模型 API:v0.2 默认 Horizon-Labs/multilingual-emotions-small(GoEmotions 28 标签、36 语言、Apache-2.0、官方 INT8,约 256 MiB);legacy tabularisai(11 标签)保留为回退资产。ONNX 全本地 CPU 推理,不联网、不额外消耗主模型 Token。 - 多语言:默认模型覆盖 36 种语言;中文 / 英文按 CJK 占比显示语言标识。 - 可插拔映射配置档:模型标签 → 7 个统一维度(愉快 pleasant / 悲伤 / 愤怒 / 焦虑 / 反感 unwell / 疑问 confused / 平静)。内置 legacy-11、go-emotions-28、zh-8 三套配置档;阈值过滤 + 衰减 + 步长 + 封顶,参数集中在 src/mapping.ts。详见 模型与映射。
展开完整文档(README 剩余 1 节)
dsh-emotion-analyzer

DSH(DeepSeek Harness)情绪分析器插件:对主模型的每条回复做本地情绪打分,把累积情绪状态投影进 Session,并在 DSH 网站注入一个可拖拽的悬浮情绪监测框。

悬浮框展开态

功能

- 本地推理,零第三方模型 API:v0.2 默认 Horizon-Labs/multilingual-emotions-small(GoEmotions 28 标签、36 语言、Apache-2.0、官方 INT8,约 256 MiB);legacy tabularisai(11 标签)保留为回退资产。ONNX 全本地 CPU 推理,不联网、不额外消耗主模型 Token。
- 多语言:默认模型覆盖 36 种语言;中文 / 英文按 CJK 占比显示语言标识。
- 可插拔映射配置档:模型标签 → 7 个统一维度(愉快 pleasant / 悲伤 / 愤怒 / 焦虑 / 反感 unwell / 疑问 confused / 平静)。内置 legacy-11、go-emotions-28、zh-8 三套配置档;阈值过滤 + 衰减 + 步长 + 封顶,参数集中在 src/mapping.ts。详见 模型与映射。
- Session projection:每轮分数以 plugin:emotion-analyzer/turn(ignorable)写入会话日志,由 emotion projection 单元纯同步 fold;重启、fork 自动恢复。
- 悬浮框:Web Components + Shadow DOM;默认 64px compact 徽章(emoji + 中文情绪),可拖拽;点击展开分数条/sparkline,再点 [—] 折叠;无 [×]/重开 chip,显示/隐藏只由 Settings → 情绪分析器控制(#31、#34)。

| 折叠徽章 | 暗色主题 | 真实 DSH 页面 |
| 折叠 | 暗色 | 真实页面 |

架构(DSH 0.2.1-rc.2 实际 API)

agent/turn-stopping { agent, turn, signal } ← 真实事件名(不是 turn-stopping)
→ 最后一条 assistant 的 text block → EmotionScorer.score(text) ← onnxruntime-node + INT8,惰性加载 → appendPluginRecord(session, 'plugin:emotion-analyzer/turn', data) → ctx.sessionProjections.register({ key:'emotion', ... }) ← 纯同步 fold → Web 客户端 useProjection('emotion') → 模块 store → shell.overlay(root slot)→ React portal → <emotion-monitor>(Shadow DOM)

提示词里的 turn-stopping / ctx.session.projection / ev.getLastMessage() 与真实宿主不一致,完整校准表见 docs/calibration.md。

安装

dsh plugin --profile web add /path/to/dsh-emotion-analyzer

装好后默认尝试使用 horizon-small;如果模型尚未下载,会自动回退到 assets/ 里的 legacy 模型(需按 模型导出与量化 生成),两者都没有时插件静默降级、不影响聊天。

在设置页(或调用 Host API)下载并选择模型后,下一轮生效:

curl -X POST http://127.0.0.1:<port>/api/emotion-analyzer/v1/model/download \
-H 'content-type: application/json' -d '{"id":"horizon-small"}'
curl -X POST http://127.0.0.1:<port>/api/emotion-analyzer/v1/model/select \
-H 'content-type: application/json' -d '{"id":"horizon-small"}'
curl http://127.0.0.1:<port>/api/emotion-analyzer/v1/state

- 首次回复会触发 ONNX 加载(legacy 约 1.5s,Horizon small 约 2–3s),之后单条约 9–20ms;模型缺失时自动降级。
- onnxruntime-node / tokenizers 是原生模块,Windows/macOS 的安装脚本批准与二进制下载需在目标机验证(本机只验证了 Linux + Node 24)。

模型选择(v0.2)

| 预设 | 许可 | 体积 | 语言 | 标签 | 说明 |
| horizon-small(默认) | Apache-2.0 | 268 MB | 36 | 28 | 官方 INT8,可在线下载 |
| horizon-base | Apache-2.0 | 641 MB | 36 | 28 | 更准,但更慢、更大 |
| legacy-tabularisai(回退默认) | CC-BY-NC-4.0 | 279 MB | 23 | 11 | 包内 assets,回退用,不可删除 |
| zh-johnson-small | MIT | 待导出 | zh | 8 | needsExport(暂无官方 ONNX) |

- 设置持久化在 $DSH_HOME/emotion-analyzer/config.json;模型下载到同目录 models/<id>/,不进仓库。
- 下载/切换/删除/测试接口:/api/emotion-analyzer/v1/*(鉴权由 DSH Connection 负责)。
- 完整预设、映射 profile、离线安装与风险见 docs/models.md。

可调参数

都集中在 src/mapping.ts 顶部:

| 常量 | 值 | 说明 |
| THRESHOLD | 0.2 | 聚合分低于该值视为噪声:整轮跳过,不积累也不衰减。校准记录:模型对「难过」常给 sadness≈0.27,0.3 会丢真实悲伤;中性句其余标签 <0.05,降到 0.2 不误报(#30) |
| DECAY | 0.85 | 每轮回落系数。校准记录:提示词给 0.9,但 0.9^10=0.349 无法满足「5 轮伤心 + 10 轮中性后 sad<0.2」,故取 0.85(见 #13) |
| STEP_MAX | 0.25 | 单轮命中最大步长,避免一次爆表 |
| CAP | 1.0 | 统一维度封顶 |

模型原始标签 → 统一维度映射见 EMOTION_MAP(sad = sadness、angry = max(anger, contempt, frustration)、anxious = fear、unwell = max(disgust, 0.5·fear)、confused = max(surprise, doubt),doubt 为文本启发式)。

验收结果

| 项 | 结果 |
| 20 中文 + 20 英文 top-1(legacy) | 40/40 = 100%(Node 复算同一 40 条 CASES) |
| 20 中文 + 20 英文 top-1(Horizon small) | 38/40 = 95%(≥90% 验收线) |
| CPU INT8 单条推理 | legacy 中位 8.6ms;Horizon small 中位 19.3ms(Node 含分词,< 200ms) |
| tokenizer 与 Python fast 对齐 | 4/4 case 逐 token 一致 |
| 5 轮 sad 累积 / 10 轮 neutral 回落 | 单测通过(≤ CAP、< 0.2) |
| 重启 projection 恢复 | 日志重放回归测试通过 |
| 真实 DSH 页面悬浮框 | 展开/折叠/预览截图,0 console error |

完整矩阵与未验证项见 docs/e2e.md。

文档

- 架构
- DSH 宿主 API 校准
- 客户端集成(slot / portal / 设置开关)
- 悬浮框(交互、主题、localStorage)
- 模型注册、下载与映射
- 模型导出与量化(legacy)
- 端到端验收
- 贡献规则 · AGENTS

隐私

- 只把助手回复文本送进本进程内的 ONNX 推理;不联网、不调用第三方模型 API。
- 会话日志中的插件记录只含分数、语言、长度、FNV-1a 文本 hash 与时间,不含回复原文。
- 悬浮框趋势最多 30 轮(内存 + localStorage),不上传。

License

- 代码:MIT(见 LICENSE)。
- 模型权重:默认模型 Horizon-Labs/multilingual-emotions-small 为 Apache-2.0;回退用的 legacy tabularisai/multilingual-emotion-classification 为 CC-BY-NC-4.0(非商业)。本仓库不随源码分发权重,只提供下载/导出/量化脚本。商用请使用默认模型或自行替换。
预览分享卡片长什么样 ↓Thatgfsj/dsh-emotion-analyzer
分享 · DeepSeek Harness Hub
Thatgfsj/dsh-emotion-analyzer

本地为每条回复打分,悬浮框实时显示情绪变化

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部