Skip to content

s11IM/astrbot_plugin_memory_reboot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Memory Reboot - 记忆重现

AstrBot 旧闻提醒插件 v3.5

当群聊中有人重复发送旧的新闻、话题或梗图时,自动识别并通过引用回复提醒该用户。

✋ 特别注意

在本插件配置面板选择识图模型后,识图模型将对每一张图片都进行图像转述,如果你使用付费API,这将会产生高额的费用。

  • 推荐自备费用不高的图像识别模型,或者考虑使用Qwen3 VL (32B/30B A3B) Thinking

✨ 功能特性

核心功能

  • 智能语义匹配:使用 Embedding 技术计算内容相似度,而非简单的关键词匹配
  • 图片哈希匹配:使用差值哈希(dHash)算法检测相似图片(256位高精度),与文本匹配形成"或门"逻辑
  • 多模态支持
    • 支持文本消息检测
    • 支持图片内容识别(自动区分表情包和内容图)
    • 图片通过视觉模型转为文字描述后存储

多重过滤机制

  • 表情包过滤:自动识别并忽略表情包
  • 指令/关键词过滤:支持短语匹配忽略(如"何意味"、"666"等)
  • 插件命令过滤:自动识别其他插件的命令并跳过(v3.0新增)
  • 短文本过滤:可设置最小文本长度,忽略无意义短语(默认≥3字符)
  • 人数检测:需≥3个不同用户发送相似内容才触发
  • 其他机制:同一用户去重、冷却时间

LLM 智能判断(可选)

  • 结合历史上下文和当前上下文综合判断
  • 消息格式包含时间、发送者、内容三要素,提高判断精度
  • 区分"旧闻重发"和"讨论延续"
  • 可通过开关关闭以节省token消耗

数据管理

  • 默认7天数据保留:自动清理过期消息和图片缓存
  • 按天分片压缩存储:优化IO和存储空间

🧠 工作原理

处理流程

接收群消息
    │
    ▼
┌─────────────────────────────────────────────┐
│              前置过滤                        │
├─────────────────────────────────────────────┤
│ 1. 群组黑名单检查                            │
│ 2. 内容提取(文本/图片识别)                  │
│ 3. 短文本过滤(< 3字符)                     │
│ 4. 正则表达式过滤                            │
│ 5. 🆕 插件命令自动过滤                       │
└─────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────┐
│              相似度检测                      │
├─────────────────────────────────────────────┤
│ • 文本:Embedding 余弦相似度 ≥ 0.95          │
│ • 图片:dHash 汉明距离相似度 ≥ 0.90          │
│ • 两者为"或门"关系,任一匹配即触发            │
└─────────────────────────────────────────────┘
    │
    ▼ (找到匹配)
┌─────────────────────────────────────────────┐
│              触发条件检查                    │
├─────────────────────────────────────────────┤
│ 1. 人数检测:≥ 3个不同用户                   │
│ 2. 排除自己:同一用户重发不触发              │
│ 3. 冷却时间:与历史消息间隔 ≥ 60分钟         │
└─────────────────────────────────────────────┘
    │
    ▼ (全部通过)
┌─────────────────────────────────────────────┐
│          🆕 LLM判断(可选)                  │
├─────────────────────────────────────────────┤
│ 启用时:                                     │
│   • 获取历史上下文(前后各40条)             │
│   • 获取当前上下文(最近40条)               │
│   • LLM综合判断是否为"旧闻重发"              │
│                                             │
│ 禁用时:                                     │
│   • 直接触发提醒(匹配即提醒)               │
└─────────────────────────────────────────────┘
    │
    ▼
┌─────────────────────────────────────────────┐
│              发送提醒                        │
├─────────────────────────────────────────────┤
│ 引用回复 + 提醒图片(或纯文本)              │
└─────────────────────────────────────────────┘

触发条件详解

条件 说明 阈值/规则
相似度匹配 文本或图片任一匹配即可 文本≥0.95 OR 图片哈希≥0.90
人数检测 需要多人发送相似内容 ≥3个不同用户
同一用户 用户自己重发不触发 自动跳过
冷却时间 与历史消息间隔 ≥60分钟
LLM确认 最终判断是否为旧闻(可选,包含最近讨论检测) 综合上下文判断

📦 安装

  1. 将插件文件夹放入 AstrBot 的 plugins 目录
  2. 安装依赖:
    pip install -r requirements.txt
  3. 在 AstrBot 中配置模型提供商(详见配置说明)

⚙️ 配置说明

模型提供商配置

配置项 说明 要求
embedding_provider_id Embedding 模型提供商 需要支持 embedding 的提供商
vision_provider_id 视觉模型提供商,用于识别图片内容 需要具备视觉能力的模型
judge_provider_id 判断模型提供商,用于最终决策是否提醒 纯文本能力即可(需启用LLM判断)

功能开关

配置项 说明 默认值
enable_llm_judge 🆕 启用LLM判断(关闭后匹配即提醒) true
auto_filter_commands 🆕 自动过滤插件命令 true

阈值与规则

配置项 说明 默认值
similarity_threshold 文本相似度阈值 (0.0-1.0) 0.95
image_hash_threshold 图片哈希相似度阈值 (0.0-1.0) 0.90
min_unique_senders 最少不同用户数,达到此人数才触发 3
cooldown_seconds 冷却时间(秒) 3600(60分钟)
data_retention_days 数据保留天数 7
min_text_length 最小文本长度(小于此长度的纯文本将被忽略) 3

过滤规则

配置项 说明 默认值
blocked_groups 黑名单群组列表 []
ignore_regex 忽略内容的关键词列表(如 ["^今日运势$", "^/.*"] []

提示词自定义

配置项 说明 默认值
vision_prompt 图片识别提示词(用于区分表情包/内容图) 默认内置Prompt
judge_prompt 最终判断提示词(用于决定是否提醒) 默认内置Prompt

🚀 使用方法

配置好后插件将自动运行,如需监测请查看日志。

指令列表

指令 功能 权限
记忆状态 查看当前群的统计数据和配置 管理员
查看过滤命令 查看检测到的所有插件命令 管理员
擦除记忆 清空当前群的所有记录(仅输出日志) 管理员

记忆状态示例输出

✅ Memory Reboot - 记忆状态

📌 群号: 123456789
📊 消息数: 1520
🧠 含embedding: 1480
🖼️ 含图片: 320 (含哈希: 315)

⚙️ 配置参数:
📏 文本相似度阈值: 0.95
🔍 图片哈希阈值: 0.9
👥 最少不同用户: 3人
⏰ 冷却时间: 3600秒
📅 数据保留: 7天

🛠️ 环境检查:
- Pillow库: ✅ 已安装 (dHash可用)
- 提醒图片: ✅ 存在
- 命令过滤: ✅ 已启用 (检测到15个命令)
- LLM判断: ✅ 已启用 (提供商: openai-gpt4)

表情包判断标准

仅过滤纯表情包,保留有信息内容的图片。

是表情包(跳过):

  • 完全无文字的表情图(熊猫头、滑稽、doge等)
  • 只有1-2个简短词语或句子的表情包(如"收到"、"好的"、"无语"、"笑死")
  • QQ/微信系统表情或商店贴纸

不是表情包(记录):

  • 任何包含较多文字的图片(两句话以上)
  • 梗图/六宫格等包含对话或情节的图
  • 新闻/文章/社交媒体截图
  • 聊天记录截图
  • 实拍照片
  • 任何有实际信息内容的图片

📁 数据存储

消息数据

采用按天分片压缩存储(Gzip优化IO与空间),保存在 data/memory_reboot/{群ID}/{YYYY-MM-DD}.json.gz

{
  "id": "消息UUID",
  "sender_id": "发送者ID",
  "sender_name": "发送者名称",
  "content": "消息内容或[图片内容: 描述]",
  "timestamp": 1738420000.123,
  "embedding": [0.1, 0.2, ...],
  "has_image": true,
  "cached_image": "image_cache/群ID/20260202_041900_123456.jpg",
  "image_hash": "a1b2c3d4e5f6g7h8..."
}

图片缓存

保存在 {插件目录}/image_cache/{群ID}/

  • 文件名格式:{年月日}_{时分秒}_{微秒}.jpg
  • 自动清理:与消息数据同步,超过保留天数自动删除

🎯 场景示例

场景 结果 原因
A发新闻 → B讨论 → 1小时后C重发 ✅ 提醒 3人发送,超过冷却,条件满足
A发新闻 → 30分钟后B重发 ❌ 不提醒 只有2人,未达到3人阈值
A发表情包 → 多人复读 ❌ 不提醒 表情包被过滤,不记录
A发图片 → 10分钟后B发相同图片 ❌ 不提醒 冷却时间内(< 60分钟)
A发图片 → A自己1小时后重发 ❌ 不提醒 同一用户重发
A发新闻 → 群里正在讨论相关话题 → B重发 ❌ 不提醒 LLM判断为讨论延续(需启用LLM判断)
A发新闻 → B引用讨论 → C重发表示认同 ❌ 不提醒 LLM判断为讨论延续(需启用LLM判断)
A发新闻 → 2天后D像第一次看到一样分享 ✅ 提醒 明显不知道之前讨论过
A发"?" → 跳过不记录 ❌ 不记录 少于2个字符
A发"签到" → 跳过不记录 ❌ 不记录 匹配过滤规则
A发"/帮助" → 跳过不记录 ❌ 不记录 🆕 插件命令自动过滤

📝 依赖

  • numpy>=1.21.0
  • aiohttp>=3.8.0
  • Pillow>=9.0.0 (用于图片哈希计算)

v3.5 新增功能 🆕

  • 正则匹配策略优化:关键词过滤逻辑由“部分匹配”改为“完全匹配”,解决误伤正常句子的问题(如配置“何意味”将只过滤单体词,不再误伤“你这是何意味啊”)
  • 黑名单状态显示/记忆状态 命令新增群组黑名单状态显示,明确区分正常工作与被拉黑状态

v3.3 功能

  • 内存缓存优化:消息数据缓存在内存中,避免每条消息都从磁盘加载
  • 批量写入优化:每10条消息才写入一次磁盘,大幅减少I/O操作

v3.2 功能

  • 引用回复提醒:提醒方式从@改为引用回复,更加直观清晰
  • 管理员权限控制记忆状态查看过滤命令命令仅管理员可用
  • 静默擦除擦除记忆命令执行后仅输出日志,不在群内发送消息

v3.0 功能

  • 插件命令自动过滤:自动检测并过滤其他AstrBot插件的命令(如 /签到/帮助/天气 等),避免误判
  • LLM判断开关:可选择关闭LLM二次判断,匹配即提醒(更激进但省token)
  • 状态显示增强记忆状态 命令显示更多信息,包括命令过滤状态和LLM判断状态

👤 作者

s11IM、idiotsj

About

Astrbot插件——当群聊中有人重复发送旧的新闻、话题或梗图时,自动识别并通过引用回复提醒。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages