Proactive Chat 主动消息插件
让你的 Bot 主动发起对话,而不只是被动回复
概述
一个功能强大的主动消息插件,让 Bot 在会话长时间没有新消息后,能够主动发起拥有上下文感知、符合人设且包含动态情绪的对话。
| 信息 | 内容 |
|---|---|
| 版本 | v1.1.5 |
| 作者 | DBJD-CR |
| 仓库 | GitHub |
功能特色
💬 智能主动消息
- 多会话支持:同时为多个私聊和群聊提供服务
- 上下文感知:回顾历史对话,生成与之前话题相关的回复
- 完整人格支持:加载当前会话的专属人格设定
- 动态情绪:内置"未回复计数器",可设计不同情绪表达
⏰ 灵活调度
- 定时触发:基于用户沉默时间,在随机时间范围内自动触发
- 免打扰时段:设定 Bot 不会主动打扰的时间段
- 未回复上限:连续多次未回复后暂停主动消息
🔧 高度可配置
- 持久化会话:重启后能恢复所有未执行的任务
- TTS 集成:支持调用 TTS 服务生成语音
- 分段回复:长文本切分为多条短消息发送
配置说明
基础配置
| 配置项 | 说明 |
|---|---|
| 启用私聊/群聊主动消息 | 总开关 |
| 目标用户/群聊 QQ 号 | 指定接收主动消息的对象 |
| 最小/最大沉默时间 | 触发主动消息的时间范围(分钟) |
| 免打扰时段 | 如 0-6 表示凌晨不打扰 |
| 最大未回复次数 | 达到上限后暂停主动消息 |
主动消息动机(核心)
这是插件的灵魂!你可以编写提示词告诉 Bot 在发起主动消息时应该想什么、做什么。
可用占位符:
{{unanswered_count}}- 未回复次数{{current_time}}- 当前时间
示例 Prompt:
[Bot名字],我们好像已经有一段时间没有说话了,我有点想你了。
现在的时间是{{current_time}},请你来主动打破沉默吧。
你可以从下面的想法里找点灵感:
1. 看看我们的聊天记录,关心一下我最后在做的事情
2. 向我提出一个有趣的问题,开启一个全新的话题
3. 如果上次的话题还没聊完,接着把它聊完
记住,如果之前你主动找过我但我没回(这是第{{unanswered_count}}次了),
你的语气可以带上一点点不易察觉的失落。
工作原理
私聊模式
采用"连续循环调度"模式:
- 每次私聊对话结束后,计算下一个随机触发时间
- 在 APScheduler 中创建持久化定时任务
- 任务执行完毕后再次调度,形成无限循环
- 达到最大未回复次数时停止
群聊模式
采用"沉默倒计时 + 逻辑复用"模式:
- 群聊中任何活跃都会重置沉默倒计时
- 只有真正沉默达到设定时间后才触发
- 复用 APScheduler 的任务管理能力
TTS 与分段回复
TTS 配置
| 配置项 | 说明 |
|---|---|
| 启用 TTS | 主动消息是否转语音 |
| 附带原文 | 语音后是否发送文字版本 |
分段回复设置
| 配置项 | 说明 |
|---|---|
| 启用分段回复 | 长文本切分为多条消息 |
| 不分段字数阈值 | 超过此值不分段(保护长文阅读) |
| 分段模式 | 正则表达式或分段词列表 |
| 间隔计算 | 随机间隔或基于字数的对数计算 |
平台支持
| 平台 | 状态 | 备注 |
|---|---|---|
| QQ 个人号 (aiocqhttp) | ✅ 完美支持 | 所有功能经过测试 |
| Telegram | ⚠️ 理论支持 | 未经完整测试 |
| 飞书 | ⚠️ 理论支持 | 未经完整测试 |
常见问题
Bot 不主动发消息?
- 确认已启用主动消息功能开关
- 检查目标用户/群聊 ID 是否正确
- 确认当前时间不在免打扰时段
- 查看日志是否有错误信息
主动消息效果不理想?
- 优化 Prompt,增加更具体的上下文指示
- 多聊些内容提供更丰富的上下文
- 使用能力更强的模型
- 明确告诉 Bot 这是主动消息场景
达到未回复上限后如何恢复?
给 Bot 发送任意消息即可重置计数器。
更多信息
- 📖 官方文档
- 💬 QQ 群:1033089808