Skip to content

Repository files navigation

🌟 表情包小偷

Moe Counter

让 Bot 自动偷走群友的表情包,分类入库,聊天时看心情自动发出来。

License: MIT Python Version AstrBot Platform Last Commit

Language / 语言

中文 English


📢 简介

灵感来自 maibot 的表情包偷取和 meme_manager 的标签注入思路。并加入了可能有用的 fc 工具,可以让 bot 自己发表情包。

表情包小偷是一款基于多模态 AI 的 AstrBot 娱乐插件——自动偷取聊天中的表情包,利用视觉模型进行情绪分类,对话时按概率发送一张情绪匹配的表情包,让 Bot 的回复更有人味。偷够了可以随时金盆洗手,偷取和自动发送可独立开关。

本插件完全开源免费,欢迎 Issue 和 PR。

✨ 核心功能

功能 说明
自动偷图 监听群聊图片,按概率或冷却模式自动收集,支持待审核池容量控制
待审核池 自动偷取的图片先进入审核区,人工通过后入库,杜绝低质量图片污染图库
智能分类 利用 VLM 识别图片内容与情绪预设分类
语义检索 图上文字 + 使用场景 + 远程文本嵌入匹配;分类只作加分,不硬过滤。嵌入不可用时降级 BM25。不跑本地 CLIP
情感共鸣 分析对话中回复的情绪,自动追加匹配的表情包
LLM 主动选图 对话中 LLM 可通过工具调用搜索并发送最合适的表情包
双模式情绪分析 智能提取检索词(轻量模型从回复中提取关键词和情绪先验,不决定是否发送)/ 原文检索模式(直接用回复原文检索,不注入标签)
角色库 WebUI 手工归档到角色(如 neurosama),与情绪分类独立;VLM 不猜角色
WebUI 双区管理 📋 审核区:人工审核待入库表情包 / 🗄️ 表情包库:分类浏览、排序、批量操作
排序与筛选 最常发送 / 最近发送 / 最新入库 / 最旧入库四种排序,全走 SQL ORDER BY
群聊过滤 黑白名单控制哪些群启用偷取/发送

🚀 快速开始

1. 安装

在 AstrBot 插件管理中搜索并安装 astrbot_plugin_stealer

2. 前置条件

必须配置视觉模型——插件依赖 VLM 对图片进行分类。可以在 AstrBot 中配置全局图片描述模型,也可以在插件配置中指定 vision_provider_id

3. 开始使用

/meme on        # 开启偷图
/meme auto_on   # 开启自动发送

偷够了?

/meme off       # 关闭偷图(已收集的表情包仍可使用)

4. WebUI 管理

在 AstrBot 插件面板中进入插件详情页,点击「表情管理」即可打开管理页面。

  • 表情包浏览:按分类筛选、搜索、排序查看已收集的表情包。
  • 表情包作用域管理public 为公共图库,local 仅允许在来源群发送。
  • 批量操作:支持批量移动分类、批量删除、批量设置作用域、批量修复来源作用域。
  • 单张上传:上传图片后可使用 AI 自动识别分类和场景标签。
  • 批量导入:支持批量上传表情包。分类选择自动分析互斥:
    • 选择分类:图片保存到指定分类,不调用 VLM
    • 自动分析:不选择分类,启用 VLM 自动识别每张图片的分类(会高并发调用 API)
  • 存储维护:支持扫描并清理失效索引、孤儿文件、缩略图缓存和临时文件。
  • 分类管理:新增、编辑、删除表情包分类。

⚠️ 高并发警告:启用自动分析时,会同时并发处理多张图片,可能造成 API 限流。请根据 API 服务限流情况分批次分析。

💡 推荐用法

全自动模式(适合 Token 充足)

开启自动偷图 + 自动发送

  1. 启用偷图:/meme on
  2. 开启自动发送:/meme auto_on
  3. Bot 会自动偷取群聊中的表情包并分类
  4. Bot 回复时会根据情绪自动追加匹配的表情包

LLM 模式:Bot 回复后由后置轻量模型分析情绪,不影响回复内容 被动检索模式:不注入标签,直接用回复原文检索表情包

LLM 主动选图:对话中 Bot 可通过工具调用搜索最合适的表情包

半自动模式(适合 Token 吃紧)

**手动管理表情包 **

  1. 手动放入表情包到 plugin_data/astrbot_plugin_stealer/categories/ 下对应的分类目录
  2. 或使用 WebUI 批量上传并指定分类
  3. Bot 回复时仍会自动发送匹配的表情包(仅使用已有分类,不调用 VLM 分析)

精准入库模式(适合不想乱偷)

精准收录 + WebUI 管理

  1. 使用指令精准入库:/meme 偷 进入强制收录模式,期间发送的图片直接入库
  2. 或 WebUI 批量导入 + 自动分析:勾选"自动识别"由 VLM 分析每张图并分类
  3. 通过 WebUI 查看、编辑、删除、设置作用域

⚙️ 配置说明

所有配置项均可在 AstrBot 管理面板中修改。

偷图设置

配置项 默认值 说明
开启表情包偷取功能 false 总开关
偷图模式 probability probability 概率模式 / cooldown 冷却模式
偷图概率 0.3 概率模式下每次收到图片尝试偷取的概率
内容审核 false 开启后会过滤不当图片,可能增加处理时间

发送设置

配置项 默认值 说明
自动随聊发送表情包 false 自动随聊发送表情包
新消息取消待发送表情 true 同一会话有新消息到达时,取消上一轮仍在延迟等待中的自动表情
表情包发送概率 0.2 自动发送表情包的概率(0.0 ~ 1.0)
真表情包样式(GIF发送) false 以 GIF 格式发送(更像真表情包,但内存占用略高)
表情包发送延迟/秒 5.0 发送延迟(秒),避免与分段插件冲突,设为 0 立即发送
智能表情包选择 true 智能综合评分选择表情包;关闭则完全随机选取

情绪识别

配置项 默认值 说明
情绪识别模式 true true = LLM 模式(推荐,不污染聊天) / false = 被动标签模式
情绪分析专用模型 "" LLM 模式使用的轻量模型,留空用当前会话默认模型
情绪分析提示词 "" 自定义轻量模型情绪分析提示词,留空使用内置模板

模型配置

配置项 默认值 说明
视觉模型 "" 用于图片分类,留空自动使用全局图片描述模型

群聊过滤

配置项 默认值 说明
发表情白名单 [] 发表情白名单。使用 group:群号user:QQ号
发表情黑名单 [] 发表情黑名单。可与白名单同时生效,冲突按优先级判定
发表情名单优先级 whitelist_first 白黑名单可同时设置;whitelist_first=白名单优先,blacklist_first=黑名单优先
偷表情白名单 [] 偷表情白名单。使用 group:群号user:QQ号
偷表情黑名单 [] 偷表情黑名单。可与白名单同时生效,冲突按优先级判定
偷表情名单优先级 whitelist_first 白黑名单可同时设置;whitelist_first=白名单优先,blacklist_first=黑名单优先

待审核池 & 嵌入检索

配置项 默认值 说明
待审核池容量上限 200 自动偷取的图片先进入待审核池,达到上限后暂停偷取,审核通过入库后自动恢复。可实时调整
启用嵌入向量检索 true 用 FaissVecDB 做语义相似度匹配;关闭或不可用时降级为 BM25 关键词检索
嵌入模型 ID "" 留空自动使用 AstrBot 首个 Embedding Provider。可在 AstrBot 后台「LLM 配置」中查看已有的嵌入模型 ID(如 openai_embedding

存储及进阶管理

配置项 默认值 说明
最大表情包数量 100 表情包存储上限,超出自动清理最旧的数据
VLM 分类提示词 "" 自定义 VLM 进行情绪分类的提示词,留空使用内置 prompts.json
VLM 分类提示词(带审核) "" 启用审核时的分类提示词,留空使用内置 prompts.json

WebUI

管理页面通过 AstrBot Dashboard 插件页面系统提供,在插件详情中点击「表情管理」即可访问,无需额外配置端口或密码。

开发中(随 2.9.0 发布):VLM 会抄录图上文字(overlay_text);无法判断时归入最接近的情绪类,不再使用 other。自动发送改为检索句 + 情绪先验,分类不再当硬门。VLM 分类提示词和 LLM 小模型情绪分析提示词都可在配置页自定义,留空使用内置模板。2C2G 环境不要上本地 CLIP。角色在 WebUI 手工归档,与情绪分类独立。

v2.8.2 起每张表情包记录图片元数据(尺寸/格式/字节数/来源 URL/原始文件名/入库方式/审核时间),WebUI 预览面板可直接查看;VLM 打标统一为 tags 03 个、scenes 12 个(自动去重截断),并在切换视觉模型后自动失效旧分类缓存。文字距离融合权重可在「智能选择」配置分组选择预设(均衡 / 关键词优先 / 语义优先 / 严格匹配),无需手动调 5 个小权重。

v2.8.4 WebUI 支持我的世界 / 辐射 4 背包主题,格子随窗口缩放;修复新图点开预览崩溃(PR #100)。

v2.8.5 辐射 4 主题改为 Pip-Boy 腕机 + RobCo 终端 + 避难所小子;WebUI 主题选择会记住为默认;详情弹窗才加载原图,修复大 GIF 把管理面板卡死(issue #101)。

🔄 情绪分析模式详解

LLM 模式(默认推荐) 被动检索模式
原理 Bot 回复后,轻量模型从回复中提取检索词和情绪先验;是否发送仍由概率/冷却等门控决定 不注入任何标签,直接用回复原文检索
对回复的影响 ✅ 不修改 LLM 原生回复内容 ✅ 不修改 LLM 原生回复内容
适用场景 希望增强表情匹配、愿意多一次轻量模型调用 Token 紧、不想多一次模型调用

角色归档在 WebUI 里手工完成,和情绪分类独立:VLM 只打语义,角色由你指定(例如 neurosama)。

🎮 指令列表

所有指令以 /meme 为前缀。

展示类指令(所有人可用)

指令 说明
status 查看运行状态和表情包统计
list [分类] [每页数量] [页码] 列出已收集的表情包(默认每页 10,页码从 1 开始)
emotion_stats 查看情绪分析统计和当前模式

管理类指令(仅管理员)

指令 说明
on / off 开启 / 关闭表情包收集
auto_on / auto_off 开启 / 关闭自动发送
clean [force] 清理未分类的原始暂存图文件
进入 30 秒强制收录模式,期间发送的图片直接入库
group show 查看当前偷表情/发表情名单配置
group <send|steal> priority <wl|bl> 设置白黑名单冲突时的优先级
group <send|steal> <wl|bl> <add|del|clear> [group:群号|user:QQ号] 管理目标黑白名单策略,支持群和用户同时生效
delete <序号|文件名> 删除指定表情包
blacklist <序号|文件名> 删除指定表情包并加入黑名单,禁止再次收录
scope <序号|文件名> <public|local> 设置表情包作用域,local 仅来源群可发送(用于作用域控制,可一定程度保护隐私)
capacity 立即执行容量控制判断
rebuild_index 重建索引(版本迁移或索引异常时使用)
natural_analysis <on|off> 一键切换两套情绪识别系统模式
clear_emotion_cache 清空情绪分析结果缓存
tag_stats [N] 标签/场景统计:高频标签、低频噪声标签、零标签条目(打标质量体检,N 为 Top 数量默认 15)

LLM 工具调用(对话中自动触发)

工具 说明
search_meme LLM 搜索匹配的表情包候选列表,返回分类、场景、作用域、使用次数等选择参考
send_meme LLM 从候选列表中选择并发送表情包,失败时返回明确 reason 便于重新选择
steal_meme LLM 在用户明确要求偷图或当前消息有合适图片时收录图片入库;image_ref 可留空自动取当前消息第一张图,VLM 自动完成分类、标签、描述和场景分析

⚠️ 注意事项

  • WebUI 删除分类会同时删除该分类下所有关联实体图片,操作务慎重。
  • 开启 send_meme_as_gif 时,超大图片强制转 GIF 会产生内存突刺!低内存环境建议关闭。
  • 插件底层 必须配置视觉模型(VLM),未配置视觉模型时判断功能均无法工作。

📝 提示词规范更新补丁

自最近版本(v2.4.5+)起: 核心识别提示词改用了严谨的 JSON 格式输出,结构更稳定,解析更准确。

v2.9.0 起 VLM 分类提示词和 LLM 小模型情绪分析提示词都恢复为可配置:配置项非空时使用自定义提示词,留空则使用内置模板。

旧格式(管道符分隔)仍兼容,但 JSON 格式更可靠。

📄 许可证

本项目基于 MIT 许可证开源。


好用的话给个 ⭐ Star 吧,谢谢大伙!

有问题欢迎提 Issue 或群里找我,一般很快会看到。

About

不可能没有问题,但是没有问题不大可能

Resources

Stars

68 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

Generated from Soulter/helloworld