紅葉~
L
O
A
D
I
N
G
紅葉
AIchat:让小鲸鱼同时住进 QQ 和微信

AIchat:让小鲸鱼同时住进 QQ 和微信

🐋 一句话介绍
一只叫「小鲸鱼」的 AI 角色,同时在 QQ 和微信里陪你聊天、帮你搜 B 站视频,还会按自己的作息去找视频、认真读完再挑给你。每天三条推荐全部送达后,她会把当天的公开日记发给你。

本文记录这个本地 AI 助手的整体设计:它基于 DeepSeek Harness(DSH),把 dsh-bili-whale、qq-bridge 和 WeChatAgent 三个开源项目融合在一起。

🔒 文章只介绍可以公开的功能与维护思路。账号、白名单、Token、Cookie、聊天记录和本机目录一律用占位符代替。

🌸 1. 她能做什么

能力 说明
💬 连续聊天 QQ、微信私聊都能聊,傲娇、短句、爱玩梗,前后连贯
🔍 搜视频 按要求搜 B 站,返回真实标题 + 完整链接
🎯 挑视频 读字幕、评论、弹幕、抽帧后打分,合格才推荐
🧭 调整口味 “多推 AI 工具”“少推带货”会被记住,影响之后所有推荐
👎 单条反馈 引用推荐消息或附上 BV 号,说“不感兴趣”即可
📔 每日日记 三条自动推荐都送达后,发送当天公开日记
🔗 链接补全 消息里的独立 BV 号自动补成完整 B 站链接

QQ 和微信是同一只小鲸鱼的两个号,主人也是同一个人。 两边共用聊天记忆、推荐偏好和看视频的经历:在 QQ 说“多推 AI 工具”,微信那边也会照做;在微信说“这条不感兴趣”,QQ 也记得。

🧩 2. 整体结构

1
2
3
4
5
6
7
8
9
10
11
12
QQ   ─▶ qq-bridge   ─┐
├─▶ DeepSeek Harness(人设 / 会话 / 工具)
微信 ─▶ WeChatAgent ─┘ │
▼
dsh-bili-whale(作息 / 发现 / 深读 / 日记)
│
▼
dsh-bili-recommend(校验 / 分流 / 额度 / 回执)
│
├─▶ 普通推荐 → QQ
├─▶ 特别喜欢的 → 微信
└─▶ 当天公开日记 → QQ
目录 职责
dsh-bili-whale DSH 养鱼插件:自主作息、B 站发现与深读、写日记
dsh-bili-recommend 推荐校验、分流、额度、偏好、回执和每日公开日记
qq-bridge QQ 聊天、DSH 工具接入、搜索与消息处理
SnowLuma QQ / OneBot 连接,以及项目自带的 Node 运行时
WeChatAgent 微信消息、白名单与会话工具授权
scripts 一键启动、健康检查、补丁部署和日记检查后台

💡 运行时的配置、状态、日志和备份放在单独目录(例如 .qq-run/),不要和公开源码混在一起。

🚀 3. 一键启动

日常只需要以普通 Windows 用户身份双击启动脚本:

  1. 如果需要登录,先在客户端里完成 QQ、微信登录。
  2. 等窗口显示 “启动完成”,就可以关掉提示窗口,后台继续运行。

启动脚本会依次检查或拉起:QQ → SnowLuma → DSH → QQ 桥接 → 微信服务 → 日记检查后台。

  • 🔁 重复双击是安全的:已经在跑的服务会被复用,不会重复发测试消息。
  • ⏱️ QQ 首次登录最多等 90 秒,超时后登录完再双击一次即可。
  • 📵 微信没就绪时会显示原因,不影响 QQ 继续工作。
  • 🔌 DSH 的接口端口由程序自动发现,不用手填。

⚠️ 不建议以管理员身份长期运行聊天客户端和桥接服务。只在某个明确步骤确实需要权限时单独提升。

🔀 4. 聊天、搜索、推荐是三条路

这是整个项目最重要的设计:“搜到过”“分析过”和“真正推荐过”绝不能混为一谈。

想做什么 示例 实际发生了什么
普通聊天 “今天怎么样?” 按人设和近期上下文回复
搜视频 “去 B 站搜两个 DeepSeek 教程,把链接给我” 立即调用搜索,返回真实标题和链接
点播推荐 “推荐一个 AI 工具视频” 登记请求 → 搜索 → 深读 → 筛选 → 发回原聊天
问推荐内容 “这个视频讲了什么?”“为什么推荐?” 只根据实际保存的推荐依据回答
调整方向 “多推 AI 工具”“不要推荐猫咪” 保存为明确偏好,后续搜索和筛选都会用
评价某条 引用推荐说“不感兴趣”,或附上 BV 号 定位到具体视频后记录;定位不到会追问
查看 / 重置 “我的推荐偏好”“重置推荐偏好” 查看或清空聊天反馈

搜索只代表“找到了这些视频”,不能说成已经看过。推荐会读取可用字幕、评论、弹幕和抽帧,通常要几分钟;证据不够或没有合格视频时,宁可不推,也不硬凑。

🎯 5. 推荐规则与额度

类型 发到哪里 门槛
📮 普通自动推荐 主人的 QQ ≥ 14/20 分,有内容依据,置信度至少 medium
💖 特别喜欢的推荐 指定的微信好友 小鲸鱼明确标为“特别喜欢”,且 ≥ 16/20 分;只发微信
🙋 点播推荐 发起点播的原私聊 ≥ 12/20 分,每次最多 3 条,每天最多 10 次请求
📔 公开日记 主人的 QQ 当天 3 条自动推荐全部确认送达、日记写好之后
📏 防打扰的几条硬规则
  • 普通 + 特别喜欢的自动推荐合计每天最多 3 条,这是上限不是指标。
  • 同一个视频 7 天内去重。
  • 点播不占这 3 条额度,但同样要去重和核验内容。
  • 特别喜欢的视频只走微信,不会在两边重复推送。

🧠 6. 共用记忆的设计

开启共享身份后,QQ 与微信按同一个人、同一只小鲸鱼处理:

  • 两边共用聊天记忆、明确的推荐偏好、点播记录和看视频的经历,可以换个平台接着聊。
  • 共同记忆保留最近约 2000 条文字记录;每轮对话会按当前平台和问题,挑选另一端的近期记录来接话。
  • 原平台的记录仍然保留,用于引用定位和发送回执。
  • 群聊和其他联系人的聊天不进入这份私人记忆。

共用记忆不改变事实标准:

  • 搜索结果、只有简介的记录、预演数据,都不能冒充“看过”。
  • 只分析了字幕、评论或抽帧,不能说成完整看完了整部视频。

偏好写入遵循 “先保存、再确认”:真实来信先写入共用档案,成功后才回复“记住了”;保存失败会明确提示。同一条消息被重放、或模型重复提交时,通过消息 ID 去重,不会重复累计。

✏️ 修改人设时只维护一份主角色卡,再用同步脚本推到另一端,避免 QQ 和微信的小鲸鱼慢慢“性格分裂”。

📔 7. 每日公开日记

小鲸鱼有三份记录:

记录 用途
📖 公开日记 看过的视频、当天经历和写给主人的信,每日推送读这一份
🔐 私人日记 自己的感受、评分和偏好校准,不会自动发送
🧾 事件流水 看视频、推荐等活动的结构化简短记录

日记检查后台每 15 秒看一次,以下条件全部满足才发送:

  1. 当天 3 条自动推荐都已确认送达(QQ 普通 + 微信特别喜欢合计,点播不算)。
  2. 公开日记里已写好当天正文,并包含这 3 条推荐的 BV 号。
  3. 日记文件在最后一次送达之后有更新,并且稳定了至少 20 秒(防止发出写了一半的内容)。
  4. 推荐推送没有暂停,“推送日记”开关也没有关闭。

发送细节:

  • 只发当天的公开内容,较长时按约 1400 字分段并标段号。
  • 每天一份,重启不会重发;没推满三条就继续等,不拿昨天的日记凑数。
  • 明确发送失败的段落每 5 分钟重试一次;送达结果未知的段落不自动重发,以免刷屏。

👥 8. 群聊要单独收紧

群聊比私聊更容易打扰别人、甚至和别的机器人互相循环回复,所以单独配置:

  • 只在被叫名字、被 @、被引用时唤醒,每小时最多唤醒 4 次。
  • 一次最多连发 2 条;回复后 10 秒内会回看,允许自然追问。
  • 群里不读取、也不透露主人的私人推荐资料和共用记忆。
  • 点播和记忆修改工具只对已授权的私聊开放。

群聊权限和私聊权限必须分开配置,不能因为机器人进了群就默认开放全部能力。

⏸️ 9. 暂停与恢复推送

维护或想安静一阵时,可以只暂停推荐、普通通知和日记推送,QQ 和微信聊天照常:

1
2
node <推荐程序入口>/dbr.mjs pause    # 暂停
node <推荐程序入口>/dbr.mjs resume # 恢复

暂停推送不会退出客户端,关闭启动提示窗口也不会停掉后台。目前没有统一的一键停止;需要完全停服时,按实际进程路径逐个核对,避免误关其他 Node.js 程序。

🩺 10. 常用健康检查

下面这些检查都不会发送真实消息:

1
2
3
4
5
6
7
8
9
10
11
# QQ 与 DSH 连接
node <脚本目录>/verify-qq.mjs status

# QQ、微信、人设接入和视频资料
node <脚本目录>/verify-chat-memory.mjs

# 今天是否满足日记发送条件(不会创建发送任务)
node <脚本目录>/daily-diary-worker.mjs --check

# 今天的推荐额度和最近投递结果
node <推荐程序入口>/dbr.mjs status

日记检查返回的状态含义:

状态 含义
waiting_recommendations 今天还没推满三条
waiting_today_entry 当天日记正文还没写好
waiting_diary_videos 日记里缺少对应的 BV 号
waiting_diary_write 文件还在写入,先等一等
sent 已经发送
unknown 送达结果未知,先去聊天里核对,不要盲目重发

日志优先看:supervisor.log、bridge.log、bridge-error.log、wechat-start.log、daily-diary.log、daily-diary-error.log。

🛡️ 11. 安全与隐私

这个项目会接触聊天平台、模型接口和个人偏好,公开前必须脱敏。以下内容不得写进公开文章或提交到公开仓库:

  • QQ 号、微信 ID、群号和白名单成员标识
  • API Key、Access Token、Cookie、登录凭据和二维码缓存
  • 私聊记录、日记、用户偏好和推荐状态
  • 含有本机用户名的绝对路径
  • 真实收件人、机器人账号和内部会话 ID
  • 运行日志、发送回执和未清理的配置备份

公开配置示例用环境变量或占位符:

1
2
3
4
AI_API_KEY=<your-api-key>
OWNER_ACCOUNT=<owner-account>
BOT_ACCOUNT=<bot-account>
ALLOWED_USERS=<comma-separated-user-list>

运行时文件加入 .gitignore:

1
2
3
4
5
6
7
8
.env
*.local.json
state/
logs/
backups/
cookies/
sessions/
.qq-run/

另外遵循最小权限:私聊、群聊、搜索、推荐、发送和记忆写入分别授权,不让所有会话默认拥有全部工具。

🔧 12. 维护建议

升级组件前(QQ 桥接、微信接入或 DSH):

  1. 备份本地配置与补丁。
  2. 对比上游版本差异。
  3. 恢复必要的消息处理和记忆接入补丁(补丁脚本会核对锚点并保留备份)。
  4. 运行只读健康检查。
  5. 用测试账号做小范围消息验证。
  6. 最后再恢复自动推荐和日记推送。

改了 DSH 插件要重载 DSH;改了微信消息引擎要重启微信聊天后台。

防止误发送:开发阶段保留 dry_run 预演模式,测试通过、接收目标确认后才打开真实发送。测试不伪造真实推荐,也不补发以前的日记。目前这一套的联合回归共 86 项,覆盖推荐分流、反馈、日记门槛与去重、QQ 链接与群回复、微信消息处理。

🌙 13. 总结

一个能长期跑下去的多平台 AI 助手,难点不在“模型能回消息”,而在这些边界:身份与记忆、工具权限、内容依据、推荐门槛、发送回执、幂等去重和隐私保护。

把聊天、搜索、推荐、反馈和日记拆成独立流程以后,系统更好维护,小鲸鱼也不会把“搜到过”说成“看过”,把“看过”说成“推荐给你”。对一个私人助手来说,这份诚实比多加几个功能更重要。

💐 14. 感谢以下开源项目

本文作者:紅葉
本文链接:https://swe-et.github.io/AIchat/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可