Skip to main content

支持群聊/私聊消息归档、检索和 AI 图片理解总结的 NoneBot2 插件。

Project description

nonebot-plugin-smart-message-storage

支持群聊/私聊消息归档、搜索和 AI 图片理解总结的 NoneBot2 插件。

功能

  • 记录群聊和私聊消息,私聊使用 group_id=-1 存入同一张消息表。
  • 支持 /查消息 搜索历史消息。
  • 记录戳一戳、加群、退群、撤回等 notice 事件。
  • 支持 AI 识图,将图片 CQ 码回写为 [image:{summary:"",tip:""}],方便后续搜索。
  • 识图时会携带图片前后的聊天上下文。
  • 待识别图片会先写入 pending_images.json,达到批量数量、超时或收到命令时提交。
  • 使用 SQLAlchemy 异步引擎和 aiosqlite 访问 SQLite,避免在 NoneBot 异步事件循环里直接阻塞数据库 IO。

安装

nb plugin install nonebot-plugin-smart-message-storage

也可以使用包管理器安装:

pdm add nonebot-plugin-smart-message-storage

或:

poetry add nonebot-plugin-smart-message-storage

然后在 NoneBot 项目的 pyproject.toml 中启用插件:

[tool.nonebot]
plugins = ["nonebot_plugin_smart_message_storage"]

配置

在 NoneBot 项目的 .env.env.prod 中配置。所有配置项都使用 MESSAGE_ 前缀,避免和其他插件冲突。

基础配置

配置项 必填 默认值 说明
MESSAGE_DB_URL sqlite:///qq_messages.db SQLAlchemy 数据库连接地址。默认数据库仍在 bot.py 同目录的 qq_messages.db
MESSAGE_IMAGE_BATCH_SIZE 5 待识别图片累计达到该数量后自动提交 AI。
MESSAGE_IMAGE_FLUSH_SECONDS 1800 待识别图片最久等待时间,单位秒。
MESSAGE_IMAGE_CONTEXT_BEFORE_CHARS 100 每张图片前方上下文的目标字数。
MESSAGE_IMAGE_CONTEXT_AFTER_CHARS 100 每张图片后方上下文的目标字数。

AI 识图配置

配置项 必填 默认值 说明
MESSAGE_AI_API_KEY 空字符串 AI 接口密钥。为空时不启用 AI 识图,只保存原始消息内容。
MESSAGE_AI_BASE_URL https://api.exesim.com/v1 OpenAI 兼容接口地址。
MESSAGE_AI_MODEL gemini-3.5-flash 用于识图总结的模型名称。

配置示例

MESSAGE_AI_API_KEY="sk-xxxxxxxxxxxxxxxx"
MESSAGE_AI_BASE_URL="https://api.exesim.com/v1"
MESSAGE_AI_MODEL="gemini-3.5-flash"
MESSAGE_IMAGE_BATCH_SIZE=5
MESSAGE_IMAGE_FLUSH_SECONDS=1800
MESSAGE_IMAGE_CONTEXT_BEFORE_CHARS=100
MESSAGE_IMAGE_CONTEXT_AFTER_CHARS=100
# MESSAGE_DB_URL="sqlite:///qq_messages.db"

未配置 MESSAGE_AI_API_KEY 时,插件会跳过 AI 识图逻辑;图片消息仍会按原始 CQ 码存入数据库。

旧配置迁移

旧版本使用了没有前缀的配置名。升级后请按下表修改 .env.env.prod

旧配置 新配置
AI_API_KEY MESSAGE_AI_API_KEY
AI_BASE_URL MESSAGE_AI_BASE_URL
AI_MODEL MESSAGE_AI_MODEL
DB_URL MESSAGE_DB_URL
IMAGE_BATCH_SIZE MESSAGE_IMAGE_BATCH_SIZE
IMAGE_FLUSH_SECONDS MESSAGE_IMAGE_FLUSH_SECONDS
IMAGE_CONTEXT_BEFORE_CHARS MESSAGE_IMAGE_CONTEXT_BEFORE_CHARS
IMAGE_CONTEXT_AFTER_CHARS MESSAGE_IMAGE_CONTEXT_AFTER_CHARS

数据库位置不需要改。默认值仍是:

MESSAGE_DB_URL="sqlite:///qq_messages.db"

插件内部会把 SQLite URL 转为 sqlite+aiosqlite:///qq_messages.db 来使用异步驱动,但连接的是同一个 qq_messages.db 文件,不会迁移、不清空、不改变位置。

命令

命令 权限 说明
/查消息 <关键词> 所有人 在当前群聊或当前私聊中搜索消息。
/查消息 <群号> <关键词> 所有人 搜索指定群号中的消息。
/识别 所有人 回复一条图片消息使用。已识别则返回数据库中的总结,未识别则立即提交识别。
/立即识别 所有人 提交当前群聊或当前私聊中的待识别图片。
/立即识别 全部 超级用户 提交所有会话中的待识别图片。

存储说明

  • 群聊消息按真实 group_id 存储。
  • 私聊消息也写入 group_messages 表,其中 group_id=-1,使用 user_id 区分私聊会话。
  • 图片未识别或识别失败时,数据库中保留原始 CQ 码。
  • 图片识别成功后,会回写当前消息的 raw_message,将图片段替换为:
[image:{summary:"图片总结",tip:"不确定性提示"}]

AI 识图触发规则

  • 收到图片消息后,先下载并压缩到本地缓存,再写入 pending_images.json
  • 待识别图片累计达到 MESSAGE_IMAGE_BATCH_SIZE,且这些图片都已经积攒到 MESSAGE_IMAGE_CONTEXT_AFTER_CHARS 的后文时自动提交。
  • 如果达到批量数量时又出现新图片,新图片会继续等待自己的后文,不会被提前并入上一批。
  • 最早一张待识别图片等待超过 MESSAGE_IMAGE_FLUSH_SECONDS 时自动提交。
  • 用户发送 /识别/立即识别 时会立即提交对应待识别图片,不等待后文继续积累。
  • 超级用户发送 /立即识别 全部 时提交全局待识别图片。

识图上下文规则

  • 每张图片会分别向前、向后读取上下文,默认目标字数分别是 MESSAGE_IMAGE_CONTEXT_BEFORE_CHARS=100MESSAGE_IMAGE_CONTEXT_AFTER_CHARS=100
  • 图片后的发言会保留给这张图片作为后文上下文,直到批量提交、超时提交或命令立即提交。
  • 上下文窗口会按真实聊天顺序合并去重,多张图片上下文重叠时不会重复塞给 AI。
  • 单条消息不会截断;如果加入某条消息会让单侧上下文超过 600 字,则不加入该条。
  • 如果上下文中已有 AI 图片总结,会使用数据库内的总结版本。

数据与缓存

插件使用 nonebot-plugin-localstore 管理图片识别相关缓存:

  • pending_images.json:待识别图片任务账本。
  • image_cache/:待识别图片缓存目录。

图片识别成功或失败后,任务会从 pending_images.json 中移除,对应缓存图片也会删除。

消息数据库默认不放在 localstore,而是放在 bot.py 同目录:

qq_messages.db

如需自定义数据库位置,可以配置 MESSAGE_DB_URL

兼容性

  • Python 3.10+
  • NoneBot2 2.3.0+
  • OneBot v11 适配器
  • SQLAlchemy 2.x
  • aiosqlite
  • nonebot-plugin-localstore

License

本项目遵循仓库中的 LICENSE 文件。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file nonebot_plugin_smart_message_storage-1.1.5.tar.gz.

File metadata

File hashes

Hashes for nonebot_plugin_smart_message_storage-1.1.5.tar.gz
Algorithm Hash digest
SHA256 123d68faddc1b4e88da669939544083f2dab3bcc5d20f85c6800151f2c34d6db
MD5 a25bb77b723f2a9cc7ffe43c64ef23f4
BLAKE2b-256 ca9cc51b402435a384e133e10942fb02518a10238ebcd69339fa629cbe5b9a9e

See more details on using hashes here.

File details

Details for the file nonebot_plugin_smart_message_storage-1.1.5-py3-none-any.whl.

File metadata

File hashes

Hashes for nonebot_plugin_smart_message_storage-1.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 fac625a6308150db1bbfcfaf14c94ce1c363ec0904efec6ad53709af43dd3fa7
MD5 a171e94133d7a2256610c7bc03627fb0
BLAKE2b-256 462402d47db00479c6413f51aed118b0137c546029724e8ce8d317232b311476

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page