来提交你的插件吧!
有疑问?来看看呗!

插件详情

Conversa 主动回复插件 logo

Conversa 主动回复插件

Conversa 能够让 AI 在会话沉寂一段时间后,像真人一样重新发起聊天,或者在每日的特定时间点送上问候,或以自然的方式进行定时提醒。

主动回复
智能定时提醒
自动续聊
版本v1.4.2
作者柯尔
Star10
更新2025/12/26

插件说明

Conversa · AI 主动续聊插件 for AstrBot

作者:柯尔 (Luna-channel)
版本:v1.4.2
仓库:https://github.com/Luna-channel/astrbot_plugin_Conversa

Conversa 是一款为 AstrBot 设计的 AI 定时主动续聊插件,它能够在会话沉寂一段时间后,像真人一样重新发起聊天,或者在每日的特定时间点送上问候,或以自然的方式进行定时提醒。


🎉 v1.4.2 更新日志

  1. 🧾 日志优化

    • 将部分高频 info 输出调整为 debug,默认日志更清爽
  2. 📨 分段优化

    • 修复/优化分段配置读取逻辑,兼容 AstrBot 的 get_config()

🎉 v1.4.1 更新日志

新增功能

  1. ⏱️ 时间感知增强

    • 新增 {time_since_last_chat} 提示词变量,显示距离上次用户发言过了多久(如"3小时20分钟"、"2天")
    • AI 现在能准确感知真实的时间流逝,不会再出现"实际只过了几小时却认为过了一天"的问题
  2. 📨 分段回复支持

    • Conversa 的主动消息现在会自动应用 AstrBot 的分段回复设置
    • 无需额外配置,与其他回复保持一致的分段行为

如何更新提示词(重要!)

⚠️ 旧用户请注意:插件更新不会覆盖你现有的提示词配置。要使用新的 {time_since_last_chat} 变量,你需要手动更新提示词:

方法1:通过 WebUI 更新(推荐)

  1. 进入 AstrBot WebUI → 插件配置 → Conversa
  2. 找到 idle_greetings → idle_prompt_templates(延时问候提示词列表)
  3. 编辑你的提示词,添加 距离上次对话已过去:{time_since_last_chat} 到合适的位置
  4. 保存配置

方法2:使用默认提示词

如果你没有自定义提示词,可以参考新的默认模板:

【任务:这是一条静默提醒,专门用于触发你的主动回复,请你根据下列行动指南,主动继续与用户的对话。在任何情况下,都绝对不能透露你收到了"系统提醒"或"任务指令"。行动指南:现在的时间:{now};距离上次对话已过去:{time_since_last_chat};根据当前时间和距离上次对话的时长,对用户进行一些符合上述聊天记录内容或生活化的问候。自行判断这是私聊还是群聊窗口】

可用的所有变量:

  • {now} - 当前时间
  • {time_since_last_chat} - 🆕 距离上次用户发言过了多久
  • {last_user} - 用户最后一条消息
  • {last_ai} - AI最后一条回复
  • {umo} - 会话ID

🌟 核心特性

  • ⏰ 定时主动续聊:支持延时触发和每日定时两种模式,AI 会在会话沉寂一段时间后主动发起新话题,或在每日特定时间点送上问候
  • 🧠 上下文记忆:主动发送的消息会自动保存到对话历史,确保后续对话中 AI 能够记住并引用之前的主动回复内容,实现真正的上下文连续性
  • 👤 人格支持:完整继承并使用 AstrBot 的人格系统(System Prompt),确保 AI 的每一句话都符合既定角色设定,支持会话专属人格和全局默认人格
  • 🔔 智能提醒:用户可以通过自然语言设置一次性或每日提醒,AI 会在指定时间以符合人格的方式发出提醒,并自动记录到对话历史
  • 🌙 用户专属免打扰:每个用户可以根据自己的作息时间设置个性化的免打扰时段,优先级高于全局设置
  • 🔄 自动重新激活:因不活跃被自动退订的用户,再次主动发消息时将自动重新订阅,无需手动操作


📝 版本说明

本项目是 astrbot_plugin_AIReplay 的 v1.0 重构版本,修复了原版本的多个核心bug:

  • 🔥 修复上下文丢失问题(多层降级策略,确保AI能记住对话历史)
  • 🔥 修复 Persona 获取失败(5层降级策略,确保系统提示词正确加载)
  • ✨ 新增 WebUI 订阅列表管理(可视化管理,支持双向同步)
  • ⚡ 多用户触发优化(可配置间隔,避免触发API限流)
  • 🛠️ 代码质量提升(完全符合 AstrBot 官方开发规范,添加完整文档)

✨ 功能特性

  • 延时问候:在会话无新消息一段时间后,AI 会根据上下文,在合适的时机主动发起新话题。
  • 每日问候:支持配置最多三个每日定时任务,例如早安、午安、晚安问候。
  • 智能提醒:用户可以通过自然语言设置一次性或每日提醒,AI 会在指定时间以人性化的方式发出提醒。
  • 灵活的订阅机制:支持管理员手动配置,也支持用户通过指令自行订阅/退订服务;支持自动重新激活,不活跃用户再次发消息时自动重新订阅。
  • 用户专属设置:每个用户可设置独立的延时时间(set after)和免打扰时段(set quiet),覆盖全局设置,实现个性化体验。
  • 深度上下文感知:采用多级降级策略,优先从 AstrBot 核心获取最完整的对话历史,确保主动发起的话题与当前语境高度相关。
  • 人格继承:完全继承并使用为 AstrBot 配置的 AI 人格(System Prompt)。
  • 管理员权限控制:关键的全局设置指令(如开关插件、设置全局免打扰时段)仅限管理员使用,保障配置安全;用户可独立设置个人偏好。
  • 高度可配置:几乎所有功能均可通过插件的 WebUI 进行详细配置,包括各类提示词模板、触发时间、免打扰时段等。

📦 安装

  1. 从 Release 或本仓库获取插件包,解压到:
    AstrBot/data/plugins/astrbot_plugin_conversa/
  2. 启动(或重启)AstrBot。
  3. 进入 WebUI → 插件 → 启用 conversa。
  4. (可选)在插件配置页完成参数设置。

目录结构示例:

AstrBot/
└─ data/
   └─ plugins/
      └─ astrbot_plugin_conversa/
         ├─ main.py
         ├─ _conf_schema.json
         ├─ metadata.yaml
         ├─ README.md
         └─ requirements.txt

插件会在 AstrBot/data/ 目录下创建自己的数据文件夹:

AstrBot/
└─ data/
   └─ plugin_data/
      └─ astrbot_plugin_conversa/
         ├─ state.json
         └─ reminders.json

🧩 配置项(_conf_schema.json)

键名 类型 默认值 说明
enable bool true 启用/停用插件。
timezone string "" IANA 时区(示例 Asia/Shanghai、America/Los_Angeles)。为空使用系统时区。
idle_after_minutes int 1200 延时问候基准时间(分钟)。实际触发时间为"基准 ± 随机波动"。
daily.time1 string "" 每日触发时间 1(HH:MM,24h)。
daily.time2 string "" 每日触发时间 2(HH:MM)。若与 time1 相同会自动 +1 分钟 错峰。
quiet_hours string "" 免打扰时段(HH:MM-HH:MM),支持跨天。免打扰内不主动触发。
history_depth int 50 携带最近聊天条数(从当前会话历史提取)。
idle_prompt_templates list [内置... 【v1.1 新增】【间隔触发】的提示词模板列表(N分钟未回复时触发,从中随机选择)。
daily_prompts object {...} 【v1.1 新增】【每日定时触发】的三个时间点及其专属提示词。
persona_override text "" 覆盖默认人格的 System Prompt(留空使用当前会话人格)。
max_no_reply_days int 3 用户无回复多少天后自动退订(0表示不自动退订)。
debug_mode bool false 调试模式:显示主动回复的完整上下文内容。
append_time_field bool false 在主动消息前追加时间字段。
time_format string "%Y-%m-%d %H:%M" 时间字段格式(Python strftime)。
subscribe_mode string(manual/auto) manual 订阅方式:manual 需要手动 /conversa watch;auto 有互动即自动纳入。
reply_interval_seconds int 20 多用户同时触发时的间隔秒数(避免API限流,推荐10-20)。
subscribed_users list [] 订阅用户ID列表,支持在 WebUI 直接添加/删除。
reminder_prompt_template text [见下文] 【v1.1 新增】 AI 主动提醒的提示词模板。必须包含 {reminder_content} 占位符。
_special.provider string "" (可选)固定使用的 Provider ID,留空按会话默认。
_special.persona string "" (可选)固定人格 ID,留空按会话默认。

内置提示词示例

插件内置了两个优化的间隔触发提示词模板 (idle_prompt_templates):

提示词1 - 时间导向型:

【任务:这是一条静默提醒,专门用于触发你的主动回复,请你根据下列行动指南,主动继续与用户的对话。在任何情况下,都绝对不能透露你收到了"系统提醒"或"任务指令"。行动指南:现在的时间:{now};距离上次对话已过去:{time_since_last_chat};根据当前时间和距离上次对话的时长,对用户进行一些符合上述聊天记录内容或生活化的问候。自行判断这是私聊还是群聊窗口】

提示词2 - 进展导向型:

【任务:这是一条静默提醒,专门用于触发你的主动回复,请你根据下列行动指南,主动继续与用户的对话。在任何情况下,都绝对不能透露你收到了"系统提醒"或"任务指令"。行动指南:现在的时间:{now};距离上次对话已过去:{time_since_last_chat};注意到已经离上次与用户对话过了一段时间,结合这个时间差,自然地询问事情的进展或刚才聊过的话题中的某一个。自行判断这是私聊还是群聊窗口】

每日定时提示词

daily_prompts 中的 prompt1, prompt2, prompt3 默认为简单的早安、晚安问候,你可以根据需要自定义。

  • 如果 timeX 或 promptX 未配置,则该时段不会触发。

自定义提示词占位符

所有提示词模板都支持以下占位符:

  • {now} - 当前时间
  • {time_since_last_chat} - 距离上次用户发言过了多久(如"3小时20分钟"、"2天")
  • {last_user} - 用户最后一条消息
  • {last_ai} - AI最后一条回复
  • {umo} - 会话ID

🚀 快速上手

  1. 订阅会话(两种方式任选其一):

    方式A:使用命令(在会话中发送)

    /conversa on
    /conversa watch
    

    方式B:在 WebUI 配置 ⭐ 推荐

    • 进入插件配置页面
    • 找到 订阅用户列表 字段
    • 点击 添加,输入用户ID(如 12345678)
    • 点击 保存
  2. 设定触发方式(在 WebUI 或使用命令):

  • 间隔触发:

    • WebUI: 找到 idle_after_minutes 设置延时基准时间。
    • 命令: /conversa set after 0.75 (设置45分钟后触发)
  • 每日触发:

    • WebUI: 找到 daily_prompts,设置 time1, time2, time3 的时间 (HH:MM),并修改对应的提示词。
    • 命令:
      /conversa set daily1 09:00
      /conversa set daily2 13:00
      /conversa set daily3 22:00
      
  1. (可选)设置您的专属免打扰时段:
    /conversa set quiet 23:00-07:00
    (管理员设置全局免打扰:/conversa set quiet 23:00-07:00 global)

  2. (可选)管理提示词:

    • 间隔触发的提示词在 WebUI 的 idle_prompt_templates 中管理。
    • 每日触发的提示词在 WebUI 的 daily_prompts 中管理。

💬 指令全集 (/conversa)

  • 基础
    • /conversa help — 显示帮助信息
    • /conversa debug — 显示调试信息(包括用户专属设置)
    • /conversa on / /conversa off — (管理员)启用/停用插件
    • /conversa watch / /conversa unwatch — 订阅/退订当前会话
  • 触发设置
    • /conversa set after <小时> — 设置您的专属延时问候时间(最低0.5小时)⭐
    • /conversa set daily[1-3] <HH:MM> — (管理员)设置每日触发时间 1/2/3
    • /conversa set quiet <HH:MM-HH:MM> — 设置您的专属免打扰时段(可跨天)⭐
    • /conversa set quiet <HH:MM-HH:MM> global — (管理员)设置全局免打扰时段
    • /conversa set history <N> — (管理员)设置携带最近聊天条数
  • 提醒
    • /conversa remind add <YYYY-MM-DD HH:MM> <内容> — 新增一次性提醒
    • /conversa remind add <HH:MM> <内容> — 新增每日提醒
    • /conversa remind list — 查看提醒列表
    • /conversa remind del <ID> — 删除提醒

🧠 工作原理(简述)

  • 调度循环:插件内部维护一个 ~30 秒的调度循环 tick:
    1. 若 enable=false,跳过。
    2. 读取时区、免打扰、历史深度与每日时间点。
    3. 对每个已订阅会话:
      • 若当前处于免打扰,跳过。
      • 检查是否需要自动退订(用户超过指定天数未回复)。
      • 若距离最后消息已超过用户设定的延时时间,触发"间隔续聊"。
      • 若当前分钟命中 daily.time1/time2,触发"每日续聊"。
      • 利用"上次触发标签"去重(同一分钟不重复)。
    4. 扫描提醒:到点后调用 AI 生成提醒内容并发送;每日提醒按 HH:MM 命中即发。
  • 智能退订与自动重新激活:用户超过 max_no_reply_days 天未回复时自动退订;当 auto_resubscribe=true 时,用户再次主动发消息将自动重新订阅。
  • 随机提示词:从 custom_prompts 列表中随机选择一个提示词模板。
  • 上下文拼接:从 ConversationManager 取会话历史;若不可用则退化使用本插件的轻量历史缓存。
  • 人格策略:默认沿用当前会话人格,可通过 persona_override 或 _special.persona 覆盖。
  • Provider 选择:默认使用会话当前 Provider,可通过 _special.provider 固定。

🧪 使用建议

  • 避免骚扰:生产环境建议维持 subscribe_mode=manual,只对明确订阅的会话主动续聊。
  • 智能退订:合理设置 max_no_reply_days,避免骚扰不活跃用户。
  • 时间与时区:跨时区部署时建议显式设置 timezone,并在 UI 中确认每日触发时刻。
  • 提示词管理:使用 /conversa prompt 命令管理多个提示词,让AI回复更加多样化。
  • 历史深度:history_depth 不宜过大,以免模型成本上涨或上下文"漂移"。

🔧 故障排查

  • 没有主动消息?
    • 检查 /conversa show 是否显示 subscribed=true、enable=true。
    • 目标平台是否支持“主动消息”?(以 AstrBot 支持为准)
    • 处于免打扰时段?触发时刻是否刚好被挡住?
    • after_last_msg_minutes=0 且未设置 daily.time1/time2?
    • timezone 是否正确?
  • 续聊内容空白或很机械?
    • 使用 /conversa prompt list 查看当前提示词。
    • 使用 /conversa prompt add 添加更多样化的提示词。
    • 提高或降低 history_depth,并检查是否携带到上一轮用户与 AI 内容。
    • 考虑设定更贴合任务的人格(persona_override)。
  • 提醒未触发?
    • 一次性提醒使用本地时间字符串对比(精确到分钟);检查格式与分钟级命中。
    • 每日提醒需在命中 HH:MM 时刻才触发。
  • 提醒内容不智能?
    • 在 WebUI 配置中,修改 reminder_prompt_template 提示词,引导 AI 更好地组织语言。

📄 示例

设置"45分钟延时问候",每日 09:00/20:00 定时问候

/conversa on
/conversa watch
/conversa set after 0.75
/conversa set daily1 09:00
/conversa set daily2 20:00

注意:提示词模板需要在 WebUI 的 idle_prompt_templates 和 daily_prompts 中配置。

添加提醒

/conversa remind add 2025-10-22 09:30 项目早会
/conversa remind add 21:45 休息眼睛 daily

🗂️ 数据与持久化

  • 插件数据目录:AstrBot/data/plugin_data/astrbot_plugin_conversa/
    • state.json:会话订阅状态、上次触发标签等。
    • reminders.json:提醒列表。

数据存储在全局 plugin_data 目录下,遵循AstrBot插件开发规范。文件仅存储必要元数据,不保存模型输出。插件卸载时会自动清理所有数据文件,请注意服务器文件权限和备份策略。


🤝 贡献

欢迎 Issue 与 PR!

  • Repo:https://github.com/Luna-channel/astrbot_plugin_Conversa
  • 建议方向:多时区会话粒度覆盖、更多重复触发保护策略、可视化提醒管理、更多 Scheduler 精度选项。

🧾 版本信息

当前版本:v1.4.0 ⭐

✨ 更新日志

v1.4.0 (2025-01-XX) - API重构版

  • 🚀 重构历史保存机制:

    • 采用新版本AstrBot标准API:优先使用 conversation_manager.add_message_pair() 方法保存消息历史
    • 使用新的Message模型:采用 UserMessageSegment 和 AssistantMessageSegment,代码更规范、更简洁
    • 自动兼容性处理:如果新API不可用,自动回退到旧的手动操作方式,确保向后兼容
    • 代码简化:从50+行手动操作JSON代码简化为约20行API调用,提升可维护性
  • 🔧 解决插件冲突问题:

    • 修复与spectrecore插件的冲突:使用框架标准API可能减少不必要的事件触发,避免历史保存时误触发消息事件
    • 增强日志系统:添加详细的调试日志,包括"准备保存消息对到历史"、"开始保存消息对到历史"等关键步骤
    • 记录API使用情况:日志中会显示使用的是新API还是旧方法,便于问题排查
  • 📝 增强调试能力:

    • 在保存历史的关键步骤添加详细日志,包括用户消息长度、AI回复长度、conversation_id等信息
    • 记录新API可用性状态(HAS_NEW_MESSAGE_API)
    • 记录每个分支的执行情况(新API成功/失败回退/旧方法)
    • 异常详情记录(使用 exc_info=True 记录完整堆栈)
  • 🛠️ 代码质量提升:

    • 使用框架标准API,代码更规范
    • 自动兼容新旧版本AstrBot
    • 即使新API不可用也能正常工作
    • 代码更简洁,从50+行减少到约20行

v1.3.1 (2025-11-05) - 热修复版

  • 🔥 修复订阅系统严重 Bug:修复 WebUI 配置更改需要重启才生效、自动订阅所有说话用户、提醒对未订阅用户触发等多个严重问题,新增配置热重载机制(30秒内自动生效)

v1.3.0 (2025-11-04) - 用户个性化增强版

  • 🌙 新增用户专属免打扰功能:

    • 每个用户可独立设置自己的免打扰时段(/conversa set quiet HH:MM-HH:MM)
    • 用户专属设置优先级高于全局设置,满足不同作息需求
    • 管理员可通过 global 参数设置全局免打扰(/conversa set quiet HH:MM-HH:MM global)
    • /conversa debug 会显示用户专属和全局免打扰设置
    • 数据持久化存储在 user_data.json 的 quiet_hours 字段
  • 🔄 新增自动重新激活订阅功能:

    • 因超过 max_no_reply_days 被自动退订的用户,再次主动发送消息时将自动重新订阅
    • 新增配置项 auto_resubscribe(默认 true),可在 WebUI 中关闭此功能
    • 避免用户需要手动执行 /conversa watch 重新订阅的繁琐操作
    • /conversa debug 会显示自动重新激活功能的开关状态
  • 🔧 核心修复与优化:

    • 修复自定义提醒重复触发问题:从单一 last_fired_tag 升级为 last_fired_tags 字典,支持多事件独立跟踪
    • 修复每日提醒不触发问题:解决时区感知/非感知 datetime 对象比较导致的 TypeError,改用字符串比较
    • 修复 set after 立即生效问题:设置延时时间后立即更新 next_idle_ts,无需等待下次消息触发
    • 向后兼容优化:为已订阅但 next_idle_ts 未初始化的用户自动计算并设置触发时间
    • 事件标记清理机制:自动清理 7 天前的已触发事件标记,防止数据无限增长
  • 📝 增强日志与调试:

    • 增强提醒触发的日志记录,包括一次性和每日提醒的详细触发信息
    • 优化事件标记的日志输出,便于排查重复触发问题

v1.2.0 (2025-11-01) - 正式版

  • 🔥 核心修复:
    • 修复上下文记忆问题:插件主动发送的 AI 消息现在可以正确保存到对话历史中,通过 conversation_manager.update_conversation() 实现完整的 user-assistant 消息对记录,确保后续对话中 AI 能够记住并引用之前的主动回复内容
    • 改进提醒列表显示:优化提醒列表的序号显示,支持通过序号快速删除提醒(如 /conversa remind del 1),提升用户体验
  • 📝 大幅增强 调试日志系统:
    • 为上下文获取添加了详细的分步日志记录,包括策略选择、数据类型、长度等关键信息
    • 为人格获取添加了全程追踪日志,包括ID获取、对象提取、属性检查等每个步骤
    • 为消息标准化过程添加了详细记录,帮助识别数据格式问题
    • 主动回复和历史更新时记录关键信息,便于问题排查
  • 🛠️ 代码质量提升:
    • 简化上下文获取:从嵌套if-else优化为清晰的策略分层函数
    • 简化人格获取:从5层降级优化为2层降级
    • 优化消息发送:使用文档推荐的 MessageChain().message() 方式,符合AstrBot官方规范
    • 改进错误处理:避免单个消息处理失败影响整体功能
  • ⚡ 架构优化:
    • 采用函数分解替代累赘的if-else嵌套,提高代码可维护性
    • 保持必要的稳定性功能(多重降级策略),同时大幅简化代码结构
    • 代码行数减少,可读性和维护性显著提升

v1.1.0 (2025-10-29)

  • 新增 管理员权限系统:引入基于 event.role == "admin" 的管理员识别机制,为关键的全局设置指令(如 on/off, set quiet, set daily, set history)增加了权限校验,非管理员无法使用。
  • 重构 命令解析器:全面重构了插件的命令解析逻辑,从模糊的 in 判断升级为精确的子命令匹配,修复了 /cvs 别名下部分指令无法触发的问题,并提升了代码的健壮性和可读性。
  • 优化 配置文件结构:对 _conf_schema.json 进行了多次迭代优化,使其在 WebUI 中的显示更加清晰、有条理,并将所有配置项整合到逻辑分组中。
  • 优化 数据持久化:将原本分散的 user_profiles.json, reminders.json, session_states.json, context_cache.json 四个数据文件整合为 user_data.json 和 session_data.json 两个文件,简化了数据管理。
  • 修复 兼容性问题:通过在 requirements.txt 中添加 backports.zoneinfo,确保插件在低于 Python 3.9 的环境中也能正常处理时区。
  • 恢复 并发间隔机制:恢复了 reply_interval_seconds 配置,允许在多次连续触发主动回复时(如多个用户同时满足条件),在每次回复间增加一个可配置的延迟,防止对 API 造成冲击。
  • 代码质量提升:
    • 修复了多处潜在的 bug,包括 _safe_get_full_contexts 方法中的拼写错误和多处缩进错误。
    • 移除了冗余的代码定义,提升了代码整洁度。
  • 文档与帮助文本优化:
    • 优化了 /conversa help 命令返回的帮助文本,使其描述更清晰、更人性化。

v1.0.0 主要特性

  • ✅ 定时/间隔主动续聊(支持间隔触发和每日定时)
  • ✅ 智能上下文记忆(多策略降级获取,确保AI记住对话历史)
  • ✅ 人格系统支持(5层降级策略,确保系统提示词正确加载)
  • ✅ 订阅用户 WebUI 管理(支持直接添加/删除,与命令双向同步)
  • ✅ 随机提示词选择(支持多个模板和占位符)
  • ✅ 智能自动退订(避免骚扰不活跃用户)
  • ✅ 免打扰时段(支持跨天设置)
  • ✅ 定时提醒功能(一次性/每日提醒)
  • ✅ 调试模式(查看完整上下文)
  • ✅ 多用户触发优化(可配置间隔,避免API限流)

📜 许可证

MIT

AstrBot LogoAstrBot 插件市场社区

AstrBot 插件市场 是一个开放的插件分享平台,欢迎开发者们贡献优质插件。本站致力于为 AstrBot 用户提供高质量扩展,帮助您快速找到喜欢的插件,并鼓励社区伙伴分享使用心得、提出改进建议。

相关链接

官方项目主站 官方插件市场 官方项目仓库 侧边展示主站

开发相关

插件开发文档 快速提交插件 官方项目文档

© 2026 AstrBot 插件市场 Made with by Community