thawline/dsh-memewiki

dsh-memewiki

离线梗/黑话词典:内置 6792 条词条,只在消息像在问梗时才提前查好注入上下文。带查询工具、可增删改词条与别名的设置页、可调的玩梗尺度滑杆,以及检查版本更新。

待分类astrbotchinesedeepseek-harness

dsh-memewiki

给 DSH 用的梗百科 / 黑话词典插件。

⚠️ 这是 DSH 插件,不是 AstrBot 插件。 仓库里出现 astrbot_plugin_memewiki 字样,只是因为本项目的灵感来自那个 AstrBot 插件;装进 AstrBot 里不会生效。

致谢:灵感来自 AstrBot 插件 astrbot_plugin_memewiki(作者 in1t1a1),谢谢原作者提供的灵感。原仓库已删除,这里不放链接。

内置 6792 条网络梗词条,查词离线可用、零依赖(只用 Node 自带的 node:sqlite)。

当你问一句「XX 是什么梗」时,它会在模型看到这句话之前就把对应词条查好塞进上下文,让模型直接接梗;同时提供一个 search_meme_wiki 工具,让模型自己想查的时候也能查。

作者:@thawline 致谢:灵感来自 AstrBot 插件 astrbot_plugin_memewiki(原仓库已删除),感谢原作者

特性

  • 预查注入:只对「像在问梗」的消息触发(问梗句式、裸词、停用词过滤),闲聊不会被塞东西;你主动讲梗的来历(「这是康康的梗」「这是叉叉叉的梗,你应该说……」)时另注入一段反馈引导——先接住,再问要不要补进梗维基。
  • 一条都不多:没命中就不注入,命中只注入那一条。
  • 设置页可管:DSH 设置 → 插件 → 梗百科(词条库 / 反馈 / 关于 三个页签)里能查、增、改、删词条,页签在梗百科标题下面,搜索框和新建 / 更新词库 / 检查更新在页签下面,能看到本机词条总数;标题也能直接改名,改成已存在的名字会报错而不是覆盖。
  • 自动思考梗开关:不想让它自动预查时,一个勾选框关掉即可,下一轮生效。
  • 双向匹配:除了「问句里包含标题」,还支持「标题里包含查询词」(查询 ≥ 3 字才启用,避免两个字乱中)。
  • 串子程度可调:手动接管玩梗尺度(0–100 滑杆)。拉到低很尊重、黑称不接;拉到高放开串、黑称也玩;不开时交给模型自己判断,看梗冲谁去。
  • 检查更新:设置页标题旁边显示当前版本,点「检查更新」去 GitHub 比对一次最新版本,有新版本会告诉你去哪拉。
  • 一键更新词库:设置页点「更新词库」,后台跑 scripts/sync-cnmeme.mjs --no-existing,只把站点上的新词条补进来(不覆盖你手改过的),跑完自动刷新条数。全程纯 Node 脚本,不经过模型,不烧 token。
  • 上传词条:设置页「词条库」每条梗后面有「上传」,把本地改好的正文整篇传到梗维基(来源 / 用法 / 其他小节),站内 AI 和真人审核。
  • 提交昵称:设置页「反馈」里可以填以后把纠正反馈给梗维基时用的名字,默认「大肥鱼」,改完失焦自动保存(trim、最长 40 字)。
  • 反馈给梗维基:设置页「反馈」里填一个联系方式、点「连接梗维基」领一张 90 天凭证;以后你纠正某个梗、或主动说「这是XX的梗」时,模型会先接住、再问要不要把它补进梗维基(cnmeme.wiki),同意后走 feedback_meme_wiki——只提交要补的那一段,插件自己去拉原文、在「用法」小节末尾追加、拼好整篇再提交,不用模型贴全文;站内 AI 先审、拿不准转人工。提交记录显示在设置页。用户不用注册网站、不用登录,凭证由插件在后台领。
  • 关于页:设置页顶部有三个页签「词条库 / 反馈 / 关于」,「反馈」页最上面是反馈规则,下面是提交昵称、反馈给梗维基和提交记录。关于页里有项目简介、Star 按钮、仓库地址和致谢,词库来源梗维基(cnmeme.wiki)的原网站也放在致谢下方。
  • 离线:查词、注入全在本地,不发网络请求;只有你主动点「更新词库」「检查更新」或提交反馈时才联网。

用了它,实际会变成什么样

  • 群里冒出一个生梗,模型不再硬猜。 以前它要么当没看见,要么编一个像模像样的解释;现在查得到就直接接,接不上就说“不知道”。
  • 不用装东西。 原版要 Python + AstrBot + sqlite3,这里只要 Node ≥ 22.13,零依赖,pnpm add 完事。
  • 词条能自己管。 设置页里增删改查,改完下一轮就生效,不用改代码、不用重启。
  • 不想让它多嘴时一个勾就关。 「自动思考梗」关掉后,预查注入彻底停,模型只在主动调工具时才查库。
  • 短着问也查得到。 以前问「码头」查不到「去码头整点薯条」,现在 3 个字以上会做反向匹配。
  • 不把聊天发出去。 原版的联网兜底被去掉,所有查询只发生在本地那个 16MB 的 SQLite 里。

安装

这是 DSH 插件,不是 AstrBot 插件,请装进 DeepSeek Harness。

在 profile 目录(通常是 C:\Users\<你>\.dsh\profiles\desktop)下执行:

pnpm add github:thawline/dsh-memewiki

或者把仓库 clone 到本地,再用 link: 引用。

装好后,把 "dsh-memewiki" 加进同一个 package.json 的 dsh.profile.bundles 数组,重启 DSH。

还没发布到 npm,所以 pnpm add dsh-memewiki 会 404 —— 用上面的 GitHub 方式。 也不要把它交给 AstrBot 的插件安装流程:那是另一套 Python 插件体系,装进去不会生效。

配置

配置文件:~/.dsh/memewiki.json

{
  "自动思考梗": true,
  "串子开关": false,
  "串子程度": 50
}
  • 自动思考梗:是否在每轮请求前自动查词库并注入。默认 true。
  • 串子开关:是否手动接管玩梗尺度。默认 false(关着时模型自己判断)。
  • 串子程度:0–100。≤20 很低(很尊重,黑称不接)、≤45 偏低(损操作可以,损长相不行)、≤70 中等(跟着社区玩)、>70 很高(放开串,黑称也玩)。开关关着时不生效。

词条数据

data/memes.db 是 SQLite 数据库,表结构:

CREATE TABLE memes (
  title   TEXT PRIMARY KEY,  -- 词条名
  slug    TEXT,              -- 拼音/英文别名
  tags    TEXT,              -- 标签,逗号分隔
  usage   TEXT,              -- 怎么用 / 怎么接
  origin  TEXT,              -- 出处
  other   TEXT,              -- 其他分节(演化 / 相关 / 备注等)
  summary TEXT,              -- 释义
  aliases TEXT               -- 别名,逗号分隔
);

词库来自 cnmeme.wiki 的公开 API(来源、用法、标签、别名与摘要),2026-11-05 同步至 6792 条,对应站点当前的公开词条。最初 6668 条来自原版插件随包分发的 data/memes.db(2026-10-26 构建)。

更新词库

梗是会长出来的。想再同步一次,跑(需要联网,只读站点的公开 API):

node scripts/sync-cnmeme.mjs               # 补新词条 + 同步被站点改过的词条
node scripts/sync-cnmeme.mjs --dry-run     # 只报告会改什么,不写库
node scripts/sync-cnmeme.mjs --no-existing # 只补新词条,不动已有条目

脚本会先翻完全站公开列表(约 4–5 分钟),再只拉有变化的详情;写库前自动备份成 data/memes.db.bak-时间戳。你在设置页手动填的 aliases 不会被冲掉,正文为空时也保留本地旧值。跑完 meta.built_at / count 会更新,设置页的总条数跟着变。

不想开终端的话,直接在 DSH 设置页 → 插件 → 梗百科点「更新词库」:后台跑的是 --no-existing(只加新词条),页面上会显示同步进度和结果,跑完条数自动刷新。按钮不经过模型,零 token。

与原版的差异

本插件是一次独立实现,不是逐行翻译。AstrBot 是 Python 的 Star 插件框架,DSH 是 Node.js 的插件体系,外壳必须重写;词库、匹配逻辑、预查闸门、注入文案这些设计受原版启发。

能力参考的 AstrBot 版 astrbot_plugin_memewiki本插件 dsh-memewiki
运行环境AstrBot(Python)DSH(Node.js,ESM,零依赖)
词库读取SQLite(sqlite3)node:sqlite(Node ≥ 22.13 自带)
预查注入点@filter.on_llm_request → _append_tempctx.systemPrompt.context()(order 950,仅该轮)
玩梗尺度无「串子程度」0–100 滑杆 + 开关(默认关,交给模型判断)
版本检查无设置页显示当前版本 + 「检查更新」按钮(只在你点击时连一次 GitHub raw)
注入内容接梗规则 + 命中词条相同设计(规则约 750 字符 + 一条词条)
查询工具search_meme_wiki同名工具,参数 { query }
匹配方式精确 + 查询词包含标题精确 + 查询词包含标题 + 标题包含查询词(≥3 字)
注入开关配置项设置页「自动思考梗」勾选框(写 ~/.dsh/memewiki.json)
词条管理AstrBot WebUI 面板 + /黑话 命令DSH 设置页「梗百科」(增删改查 + 总数)
图片卡片/梗 → Pillow 渲染图片❌ 暂未实现
联网兜底cnmeme.wiki 公开 API(像梗才查、同词 10 分钟一次、带缓存)❌ 不联网(见下)
预查闸门本地精确 → 像梗才联网 → 同词节流 → 缓存本地匹配 + 像梗判断(问梗句式 / 裸词 / 停用词)
黑话自建/黑话 词 释义 命令设置页新增词条(等价,但走界面)

关于联网

预查注入永远不联网。 原版在本地查不到时会去 cnmeme.wiki 搜;这里没有做,原因:

  1. 隐私:联网意味着把用户的聊天片段发到第三方,梗查询往往带着上下文;
  2. 稳定:外部 API 挂了就多一次失败路径,还要处理超时、缓存、节流;
  3. 够用:6792 条覆盖了绝大多数常见梗,查不到时模型说「不知道」比编一个更安全。

需要联网版的话,可以在设置页把「自动思考梗」关掉,改用 search_meme_wiki 工具自行决定何时查(工具同样只查本地库)。

另外有两个显式的联网动作:设置页的「更新词库」和「提交新词条」。这两个只在你点了之后才连一次 cnmeme.wiki,平时不跑。

已知限制

  • 只有本地词库,生僻梗、新梗查不到(例如「蚌埠住了」当前词库就没有)。
  • 预查判断靠句式与停用词表,不是分类模型;宁可漏查,不硬塞。
  • 没有图片卡片、没有命令系统(DSH 的设置页替代了 /黑话)。

许可

MIT。词库数据版权归原项目与 cnmeme.wiki;本项目仅做格式适配,功能设计受原版启发,详见 NOTICE。