跳转至

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}}次了),
你的语气可以带上一点点不易察觉的失落。

工作原理

私聊模式

采用"连续循环调度"模式:

  1. 每次私聊对话结束后,计算下一个随机触发时间
  2. 在 APScheduler 中创建持久化定时任务
  3. 任务执行完毕后再次调度,形成无限循环
  4. 达到最大未回复次数时停止

群聊模式

采用"沉默倒计时 + 逻辑复用"模式:

  1. 群聊中任何活跃都会重置沉默倒计时
  2. 只有真正沉默达到设定时间后才触发
  3. 复用 APScheduler 的任务管理能力

TTS 与分段回复

TTS 配置

配置项 说明
启用 TTS 主动消息是否转语音
附带原文 语音后是否发送文字版本

分段回复设置

配置项 说明
启用分段回复 长文本切分为多条消息
不分段字数阈值 超过此值不分段(保护长文阅读)
分段模式 正则表达式或分段词列表
间隔计算 随机间隔或基于字数的对数计算

平台支持

平台 状态 备注
QQ 个人号 (aiocqhttp) ✅ 完美支持 所有功能经过测试
Telegram ⚠️ 理论支持 未经完整测试
飞书 ⚠️ 理论支持 未经完整测试

常见问题

Bot 不主动发消息?
  • 确认已启用主动消息功能开关
  • 检查目标用户/群聊 ID 是否正确
  • 确认当前时间不在免打扰时段
  • 查看日志是否有错误信息
主动消息效果不理想?
  • 优化 Prompt,增加更具体的上下文指示
  • 多聊些内容提供更丰富的上下文
  • 使用能力更强的模型
  • 明确告诉 Bot 这是主动消息场景
达到未回复上限后如何恢复?

给 Bot 发送任意消息即可重置计数器。

更多信息