前言¶
在 DSH 生态里,@zaofan/dsh-qqbot 是一个功能完备的 QQ 机器人框架,但要把它养成一个能长期陪伴、记得住人、还能自己产出内容的「助手」,通常需要自行拼接多个插件与补丁。这中间涉及记忆分层、人格注入、视频创作链路、B 站运营流程等复杂环节,很容易出现功能割裂或维护成本高的问题。
dsh-qqbot-muu 作为官方扩展包与补丁集,把这些能力整合成一条本地可运行的流水线:记忆、说话、出片、运营四件事串起来,无需托管服务或上传数据。
这是什么¶
dsh-qqbot-muu 是一个运行在本地机器上的 QQ 助手能力包,运行在 DSH 桌面端插件环境下。它不训练模型、不上传数据,而是把「记忆、语气、出片、运营」用本地 SQLite + 本地小模型 + 云端算力拼成一条流水线。
核心价值在于:把分散的社区插件补成一个能长期养的 QQ 助手——记得住人、分得清群、能自己写口播视频、有一个不会长歪的 2D 鲸鱼娘,还有一个主人说了算的 B 站运营流程。
核心功能¶
记忆与认知¶
两层记忆:个人层跨群统一记忆(印象卡、熟识度),群层物理隔离(台账、记忆、心情按 scope 分组),避免一个群的坏情绪带坏另一个群。
统一记忆库:单个 memory.db(node:sqlite + WAL + FTS5),chat / mem 全部带 scope。
类海马体检索:五路召回融合——向量余弦 + 倒排关键词(二元组 + 单字)+ 实体锚定 + 图谱随机游走(PPR)+ 回溯意图,再经模式分离(MMR 去重)与模式补全(时间邻近扩散 + 归纳补全)。PPR 能顺着「甲→乙→丙」捞到字面完全没命中的旧事。
时序失效:三元组带 valid_from / valid_to / status。单值关系出现新值时,旧事实标记 superseded 而不是删除——既能按「现在」回答,也能追溯「她什么时候改的口」。
回放巩固:按显著度挑种子 → 余弦聚类 → 抽成「归纳片段」写回,原文仍可溯源(mem_gist / mem_link)。
人格护栏:信念层带步长上限与锚点限幅——少数几次对话改不动对一个人的整体判断;driftReport 给出 0~100 稳定度。
群分级:「特别关心群 / 普通群」两级。普通群只看当前信息,不召回、不沉淀、不画像——省 token 也省心。
历史记录导入:支持 QQ 导出的 .txt 与 JSON。入口即脱敏:手机号、身份证、邮箱、银行卡、QQ 号在入库前就打码;再按信息量筛掉「在吗 / 哈哈 / [图片]」,只留像事实、态度、承诺的句子。
指定对话导入:--peer 从「导出全部消息记录」里只裁出和某一个人的对话;--self-uin 把「我」和「对方」分开。认得自己时第三方发言一律剔除;认不出自己且文件里多人时只留对方的话并提示补号。
完整记录归档:--archive 把整段对话原样写进 chat 台账:不筛寒暄、长消息不砍到 500 字、重复导入幂等。归档行 src='import',不吃 60 天保留窗。
人物归一:QQ 号优先做主键、昵称只作别名。同一人换昵称自动并到一份记忆;同昵称不同号不合并——宁可认不出,也不串号。记忆按 person:<id> 隔离。
轨迹与画像:每人一条 impression:出现次数、平均字数、活跃时段、高频词、提问率、语气倾向——统计口径,不依赖大模型也能稳定。
双方关系:除了「TA 是什么人」,还有一条 relation:「我们怎么相处」——轮次、会话段数、谁更常先开口、对方平均多久回、共同话题。
历史印象卡:切片(60 条/片、重叠 8)→ 每片摘要 → 汇总成高维卡,跑在本地模型上。私聊回合整理成功后会自动重建(进程内 12h/人 + perDayMs 双限流),也可 --digest 或面板手动触发。
旧识注入:导入的画像会以 [旧识] 块回到她眼前,但只给当事人、只在看得起的关系里(特别关心群 / 私聊)。普通群一个字都不带;块里只有统计结论,不含此人说过的原话。
降级召回:向量模型没装或离线时,不拿余弦当门槛——准入改看证据通道,无关提问直接返回空。召回结果带 vecMode。
中文单字通道:倒排表除了二元组还收单字(低权重)。二元组要求措辞完全一致,单字通道专治复述型问句。
回溯意图:「你还记得你说过要教我什么」「你答应过我什么」要的不是话题,是「她自己说过的话」——单独识别句式,把最近的 say / promise 提上来。
本地模型补图:隐式关系(「我上周搬去南山了」)正则抽不出来,交给本机小模型抽三元组,只在 mem_edge 加边、正文不动;模型没开就整批跳过。
数据主权:exportScope 导出全量(不含向量)、purgeScope 彻底删除(含索引/画像/图谱/JSONL)、_audit.jsonl 记录谁在何时导出或删了哪个 scope。
库自愈与体检:schema 带版本号,每次拿句柄都校验;dbHealth 看缺表/倒排覆盖/碎片率/完整性;maintainDb 做检查点 + 备份 + 补索引,每日维护窗口自动备份。
说话与分发¶
人格注入:qqbot-mod/persona/ 是唯一事实源,世界书按 scope 叠加。
本地代答:Ollama 小模型快速回;单脑仲裁避免「本地答一半、云端答一半」的自相矛盾。
批量门槛:一次勾选多个会话设置模式与最低分,不用一个个点。
TTS:发件箱统一出站。分段合成 + 句间呼吸(逗号 88ms / 句号 170ms / 省略号 280ms 分级停顿),再走 ffmpeg 人声后处理:高通去闷、5.2kHz 削齿音、轻压缩贴耳、−16 LUFS 归一。全篇语速语调平稳,不逐句抖。
表情包:本地视觉模型打标 + 准入分 + 间隔 / 每小时上限 / 最近去重。
浮窗 UI:设计令牌化的浅/深色主题、分段式 tab、记忆页卡片化。
浮窗尺寸:右下角有拖拽把手,拖到多大就记住多大(localStorage['qqs-dock-size-v1']);切换 tab 不再跳大小,聊天列表吃满剩余高度;双击把手/头部标题恢复默认尺寸。窗口顶边留 56px 安全区。
聊天记录来源:会话快照没了(重启、换会话)也不会白屏:按 {dataRoot}/.qqbot/msg-history/<group_|c2c_><openid>/YYYY-MM-DD.jsonl 的本地消息台账补齐最近 N 条。
视频创作¶
文案:脚本模型写口播稿,按句切分并估算时长(4.4 字/秒含标点停顿)。
分镜:shot-planner 按节拍(hook / point / turn / proof / cta)分配文字屏与真图屏,真图只给开场与例证;相邻屏 Jaccard ≥ 0.55 判重降级为文字。
出图:每屏最多 3 次变体;image_gate 用拉普拉斯方差、Hasler-Süsstrunk 色彩度、灰度熵、4bit 色数、dHash 查重打分,不过关换角度重画,全废才退回文字动效。
文字动效:逐帧渲染 11 种风格(打字机 / 逐字弹入 / 扫读高亮 / RGB 分离抖动…),配音时长决定帧数,画面与声音天然对齐。
字形叙事:借鉴《文字游戏》——以字代图(汉字按网格堆成鲸鱼/山/浪的轮廓,Zpix 像素字)、重新象形(拆字后部件飞入合拢)、留白呼吸(黑屏只留 8 个字)。一单最多 2 屏。
角色:主流 2D 鲸鱼娘形象(深蓝长发 + 白蕾丝发箍 + 蓝白水手女仆裙 + 鲸尾,DeepSeek 蓝 #4D6BFE),本地 SD(Counterfeit-V3)出 512×768 全身立绘,img2img 派生 idle / talk / wave / happy / point 五姿态保持同一人;char-key.py 从四边漫水抠底并对齐 720×980;char-cutout.py 用预乘 alpha 仿射做呼吸/摇摆/浮动,并只让嘴开合。无姿态库时退回程序化绘制(whale_char.py 纯矢量双形态)。
音效:空库用 ffmpeg 现场合成 12 个语义音效,每 cue 带淡入淡出 + 限幅;按分镜计划挑音,同一单内不重复。
成片:Ken Burns 推拉 + 按节拍取转场时长,导出 video.mp4 / cover.jpg / sub.srt / 剪映素材包。
运营¶
B 站登录:/bili login 扫码,Cookie 只写本机 bili-cookie.json。
分享卡片:视频以单条卡片分享(标题 + 封面 + UP + 播放/点赞 + 链接),记录可查。
运营流程:写脚本 → 出片 → 草稿;主人一句「通过」自动投稿;还能改名、写评论/回复、拉数据。
权限口径:所有写操作只接受主人私聊,群里发直接拒绝并提示私聊。
安装与启用¶
从插件市场 / GitHub 装壳(让 DSH 能识别并加载本包):
dsh plugin add github:wuwo1979/dsh-qqbot-muu#main
装扩展本体(把能力文件铺进 bot 数据根):
node install.mjs --data-root "D:\你的bot数据目录"
ollama pull qwen2.5vl:3b # 表情打标 / 识图
ollama pull nomic-embed-text # 向量检索(可选,缺了自动退回 lexical)
打客户端补丁(可选,按需):
node qqbot-mod/patches/add-memory-panel.mjs --apply # 记忆页
node qqbot-mod/patches/ui-theme-v2.mjs --apply # 设计令牌 / 深色 / 记忆页卡片化
node qqbot-mod/patches/merge-group-tabs.mjs --apply # 群组管理子标签
node qqbot-mod/patches/unify-fam-ui.mjs --apply # 熟识度统一入口
每个补丁都支持 --check(只看会改什么)、--apply、--revert,并且是幂等的。客户端补丁改完在 DSH 里按 Ctrl+R 重载;服务端补丁重启桌面端。
升级后补丁被冲掉?用 overlay 一键装回(推荐):
node qqbot-mod/patches/live-overlay/install.mjs --check # 看完再装
node qqbot-mod/patches/live-overlay/install.mjs --apply # 装进当前 live generation
node qqbot-mod/patches/live-overlay/capture.mjs # 定制有更新后,把 live 回写成新的 ours/
装完 / 升级完都要重启宿主(/bot-restart 或重启 DSH 桌面端),再在页面上 Ctrl+F5;只刷新页面的话,服务端路由还是旧的。
配置速查¶
装完要改的四个文件(安装脚本会自动替换标记位):
dshqqbot/.qqbot-extensions/memory-config.json→dataRootdshqqbot/.qqbot-extensions/local-llm-config.json→ 同上dshqqbot/.qqbot-extensions/draw-config.json→ 只有用本地 SD 绘图才需要改dshqqbot/.qqbot-extensions/bili-ops-config.json→ B 站运营
群分级在浮窗「🧠 记忆」页 →「🏷 群等级」设置;也可直接改 data/group-tiers.json。
视频链路可调参数(部分):
video.style:auto/text/imagevideo.planner:true分镜编排,false退回「一屏一图 + 固定淡入」video.maxImageShots:一单最多几张真图(默认 2)video.imageAttempts:每屏最多重画几次(默认 3)video.imageGate:出图质检开关(默认 true)video.imageGoodEnough:质检达标分(默认 0.84)video.character:文字屏是否带小蓝(默认 true)video.characterSize:小蓝落版尺寸(px,默认 300)video.shotMinSec/shotMaxSec:单屏时长上下限(默认 2.4 / 5.2)
典型用法¶
历史记录导入与脱敏¶
node install.mjs --data-root "D:\bot-data"
导入并脱敏历史记录(假设已导出 QQ 消息):
node install.mjs --data-root "D:\bot-data" --archive --peer "对方QQ号"
这会从导出的 .txt 或 JSON 里裁出与某一个人的对话,入库前自动打码手机号、身份证、邮箱、银行卡、QQ 号,并筛掉「在吗 / 哈哈 / [图片]」等非事实内容。
视频创作流程¶
在聊天中发送「帮我生成一条关于 X 的口播视频」,机器人会:
- 脚本模型写口播稿,按句切分并估算时长
shot-planner按节拍分配文字屏与真图屏,真图只给开场与例证- 本地 SD 生成角色立绘与变体,
image_gate做质检 - 逐帧渲染 11 种文字动效风格,配音时长决定帧数
- ffmpeg 合成语义音效与背景音乐,导出
video.mp4/cover.jpg/sub.srt
主人收到草稿后,一句「通过」自动触发 B 站投稿流程。
B 站运营¶
先扫码登录:
/bili login
然后通过脚本写脚本 → 出片 → 草稿;主人一句「通过」自动投稿;还能改名、写评论/回复、拉数据。所有写操作只接受主人私聊,群里发直接拒绝并提示私聊。
适用场景与注意¶
适合需要长期陪伴、能记住群内成员、并能自主产出内容的 QQ 助手场景:个人助理、社群运营助手、内容创作者辅助工具等。
注意:插件以当前 dsh 进程权限运行,安装前应检查源码与许可证;所有数据(包括 Cookie)仅存储在本地,不上传云端。
短结尾¶
dsh-qqbot-muu 把记忆分层、人格注入、视频创作、B 站运营整合成一条本地可运行的流水线,适合想长期养一个「能记人、能出片、能运营」的 QQ 助手。
- 目录页:https://www.skillhub.cn/plugins/wuwo1979/dsh-qqbot-muu
- GitHub:https://github.com/wuwo1979/dsh-qqbot-muu