- Home
- Plugins
- Tools & Capabilities
- dsh-bagu
dsh-bagu
hongdougao111/dsh-bagu
Two gates for outbound AI text. (1) Guard: before any text goes out it blocks the shapes anyone could write — padding verbs plus abstract nouns ("optimised the code structure"), hollow adjectives, universal filler, template openers, git commit/PR/review boilerplate, comments that narrate the code. Covers chat, comments, email, commit messages, PR descriptions, reviews, issues, docs and code comments. Passes with OK, blocks with one line naming what to change. (2) Catch memes: when someone drops a slang term the model does not guess or look it up — it already knows. A built-in 6792-entry meme wiki is queried before the model starts thinking, and the entry usage field ("how to answer this") goes straight into context. Matches only exact title/slug/alias hits, never fuzzy, so ordinary chat never triggers it. Bundled SQLite by node:sqlite, zero dependencies, 1.6ms per query. Settings page: guard on/off, strict mode, prompt section toggle, meme wiki toggle, per-turn auto-lookup, a four-step tone slider (reserved / measured / follow the room / unrestrained) that is behavioural rather than a label, AI-completion switch (off by default, uses the session own model so no API key needed), a paste-and-test box, and three thresholds. No model call for any check.
Install
dsh plugin --profile web add github:hongdougao111/dsh-baguREADME
dsh-bagu
两道门。发出去的话像八股,打回;对方抛了个梗,接住。
这是什么
AI 说话有两个毛病,这个插件各管一半:
一是写出谁都能说的话。「优化了代码结构」「这个视频真的很不错」「首先态度要正,其次内容要实」——换个人说照样成立,等于没说。
**二是认出梗却接不上。**群里冒出一句「康神开播了」,它要么当没看见,要么开始念词条:
✗「康神开播了」出自游戏主播陈兴玉观看另一位《无畏契约》区职业选手康康直播时的经典名场面…
✓ 真的假的 我去真开播了
第一件事靠规则,第二件事靠内置 6792 条梗词库 + 在模型开始想之前就查好。
一 · 守门:发出去之前拦一道
覆盖所有对外文本:聊天、评论、邮件、commit、PR、review、issue、文档、代码注释。
拦的是这些:
这条我认!首先态度要正,其次内容要实,最后要持续更新。
感谢分享!这个视频通过生动有趣的方式展示了相关内容,受益匪浅。
feat: 优化了用户模块的代码结构,提升了可维护性
整体实现思路清晰,代码结构合理,建议后续可以进一步优化。
// 初始化计数器
注意看,这个男人叫小帅
判断一句话:换个人说,还成不成立?
「卖卡卖完了随便写了」 → 能发(编不出来)
「这个视频真的很不错」 → 打回(谁都能说)
「登录失败时不再清空已填的手机号」 → 能发(具体到一行)
「优化了代码结构,提升可维护性」 → 打回(改哪一行?没说)
三层规则
第一层 · 通用(不分场景)
- 空转——说了动作没说做了什么:
优化了代码结构/提升了可维护性/修复了若干已知问题 - 空形容词——能贴到任何产品上:
先进的技术架构/高性能、高可用/具备良好的扩展性 - 万能话——放到哪都通顺:
随着人工智能的发展/众所周知/值得注意的是
第二层 · 套话
- 模板整句:
这条我认/感谢分享/受益匪浅/说白了就是 - 鸡汤口号:
愿你所行皆坦途/努力不一定会成功 - 学习腔:
学到了很多/涨知识了/希望以后多发这类帖子 - 视频开场白:
注意看,这个男人叫小帅/话不多说,让我们直接进入正题/一键三连
第三层 · 场景
- git:commit / PR 模板骨架 / review 空话 / issue 客服腔
- 代码注释:把代码念一遍
判据来自 beagle style-criteria 和 voku/code-slop: comments must explain why, never what the code already expresses.
引用和使用的区别
「评论区一水儿「我记下了」」 → 在讨论这句话不是用它 → 放过
「我记下了」 → 直接用了 → 拦
「不要只说「受益匪浅」」 → 在批评 → 放过
「受益匪浅」 → 真在拍马屁 → 拦
四条判据:引号里的不算、前面有否定词、前面有指代词、后面跟评价词。
二 · 玩梗:内置 6792 条,模型开始想之前就查好
**这一步和「能查梗」不一样。**查梗要模型主动调工具——它经常不调,直接按自己理解答了,或者联网搜一圈报个百科答案。
这个插件不等它调。用户消息一进来,先查好,把怎么接塞进上下文:
用户说:康神开播了
模型拿到的:
[梗] 对方提到:康神开播了
怎么接:…观众会刷"康神开播了"来指代这一经典片段。
要回复 真的假的 我去真开播了
这一类:主播梗/游戏梗/瓦/文字梗
照这个接,别念词条出处。
关键在那个「要回复 真的假的 我去真开播了」——词库的 usage 字段里本来就有。
有了这句,模型不用自己想该接什么。
不含梗的消息一句都不注入。闲聊一句都不浪费。
为什么能接住
匹配只认精确命中:标题、slug、别名真的出现在话里。不做反向模糊匹配。
**因为 6792 条里任何两个汉字的组合都能撞上东西。**早先试过「按 2-3 字滑窗去 LIKE 查标题」, 结果「帮我看看这个报错」撞出「让我看看你的战斗表情」——全是误报,直接废掉。
宁可漏接,不许乱报。
玩梗尺度
四档,0–100。默认交给模型自己判断,想手动接管才打开滑杆:
| 档位 | 什么行为 |
|---|---|
| 很收着(≤20) | 只接正面的、自嘲的。带贬义的外号不复读,不跟着起哄。 |
| 有点度(≤45) | 损发挥可以,损长相、损身体不行。别人先开的头,接半句。 |
| 跟着玩(≤70) | 社区玩什么就接什么,不自己发明。分寸跟着对方调子走。 |
| 放得开(>70) | 带刺的也能接。但对方认真了就立刻停。 |
档位不写在提示里当标签,写行为——写标签模型只会背标签。
三 · 数据
**内置 data/memes.db,6792 条,17MB SQLite。**零依赖,只用 Node 自带的 node:sqlite。
表结构:
CREATE TABLE memes (
title TEXT PRIMARY KEY, -- 词条名
slug TEXT, -- 别名
tags TEXT, -- 标签,逗号分隔
usage TEXT, -- 怎么用 / 怎么接 ← 最值钱的就是这个
origin TEXT, -- 出处
other TEXT, -- 演化 / 相关 / 备注
summary TEXT, -- 释义
aliases TEXT -- 别名,逗号分隔
);
99% 的词条有 usage(6709/6792),这就是它能「接」而不是只能「查」的原因。
性能:首轮建索引 54ms,之后每次查询 1.6ms(内存索引,索引里带 usage,不碰数据库)。
四 · 八组测试
全部在 tools/ 里可复现:
| 测试 | 样本 | 结果 |
|---|---|---|
| 贴吧真人(孙吧 + v吧原文) | 68 条 | 误拦 0 |
| B站评论(两个讨论「AI 味」的视频热评) | 30 条 | 误拦 0 |
| 全域场景(18 个场景 × 2 条) | 36 条 | 漏 0,误拦 0 |
| 真人原话 | 51 条 | 误拦 0 |
| git 真人 | 28 条 | 误拦 0 |
| AI 八股 | 35 条 | 拦住 35(100%) |
| 真实场景 | 25 条 | 漏 0,误拦 0 |
| 对抗绕过 | 10 种 | 拦住 6(60%) |
node tools/tieba-real.mjs # 贴吧真人
node tools/bili-real.mjs # B站评论
node tools/all-scenes.mjs # 18 个场景
node tools/evasion.mjs # 对抗绕过
五 · 拦不住什么
对抗测试 10 种绕过手法拦住 6 种。剩下 4 种是已知边界:
- 换同义词——「功能多牛啊,用起来也顺手」,词换了形状没换
- 换成英文——英文只做了留白词,句式没做
- 加脏话伪装——「真他妈不错」,脏话把评价词淹了
- 去掉分组标记——「目标是明确的,任务是拆过的」
规则只能认形状,认不了「这句话是不是真的」。 止血带,不是解药。
六 · 成本
| 场景 | 配置 | 成本 |
|---|---|---|
| 纯浏览 / 日常聊天 | 默认 | 0 |
| 守门 | 默认 | 0(本地正则) |
| 每轮自动查梗 | 默认开 | 0(本地 SQLite,1.6ms) |
| 要它替你想一句具体接话 | + AI 接梗开 | 每条一次会话模型调用 |
系统提示:守门 31 字;开了玩梗加约 120 字。判断全在本地跑,不调模型。
七 · 装
dsh plugin --profile web add dsh-bagu
装完重启一次 dsh。设置 → 八股检测。
八 · 设置页
- 挡不挡——总开关 / 严格模式 / 提示那一节
- 玩梗——梗库开关 / 每轮自动查 / 尺度开关 + 滑杆
- AI 接梗——开关 + 显示当前会话模型 + 另配接口(兜底)
- 试一段——八种样本,当场看能不能过
- 阈值——留白词下限、结构腔倍数、具体物下限
九 · 开发
npm test # 110 个单元测试
致谢
词库来自 梗Wiki。
6792 条词条是那个站点一条一条攒出来的——来源、用法、标签、别名、摘要,全部来自它的公开 API。
最值钱的 usage 字段(「怎么接」)也是它整理的,不是这里编的。
没有那个站,这个插件只会有几十条手抄的梗,接不住任何东西。
也感谢 thawline/dsh-memewiki—— 「不等模型来查,先把答案摆在它面前」这个做法是它先做的,词库打包分发的方式也是跟它学的。
规则部分的判据参考自 beagle style-criteria、 voku/code-slop、 sloplint、 lieflat-less-ai-tone。
许可
MIT。词库数据来自梗Wiki,使用时请一并保留对其的署名。
Related plugins
archify (deepseek-harness)
tt-a1i/archify
next-ai-draw-io (dsh-plugin)
dayuanjiang/next-ai-draw-io
WeKnora (dsh-weknora)
tencent/weknora
weknora
tencent/weknora