dsh-quote-archive:DSH 本地群聊语录库

前言

在 DSH 里跑智能体时,群聊里的梗、金句往往散在对话历史里,事后很难按群、按人、按关键词找回。把语录单独落库、用工具检索和随机抽取,比翻聊天记录或靠模型回忆更可控。dsh-quote-archive 是 DeepSeek Harness 的一类记忆向插件:用本机 SQLite 存语录,通过宿主 quote 工具完成收录与查询,侧栏提供从 AstrBot 版移植的「语录库」管理页;QQ 侧可选接入 SnowLuma 的 OneBot v11 HTTP 网关做采集与回发,但不强制安装 qq-bridge。

这是什么

维护者 EnderDAG,仓库 EnderDAG/dsh-quote-archive,社区目录页 SkillHub 插件条目,分类为记忆。它是 AstrBot 插件《语录收集器》的 DSH 姊妹项目,按「插件的插件」思路独立开发:本插件不自己登录 QQ,只负责语录域能力;当前版本 v0.4.0。

核心功能

下面按能力块说明,均对应 README 中已写明的行为。

宿主工具 quote

安装并在 DSH 中启用 tools 服务后,工具表会出现 quote。参数以 action 为必填,其余按需传入。离线动作(收录、检索、列表、统计等)不依赖 QQ;channel、sync、send 需在配置里打开 QQ 通道。

  • collect:收录一条语录;相同 messageId 只写一次;tag 支持逗号分隔多个标签。
  • recall:按群、发言人、标签过滤后随机抽一条。
  • search:按内容子串匹配,可叠加群、发言人、标签过滤。
  • list:按时间倒序分页,limit 1–50。
  • groups / stats:群列表与汇总统计(总数、群数、发言人数、标签数等)。
  • channel:探测 QQ 通道是否可用。
  • sync:从目标群拉取最近图片消息入库,可按 message_id 去重;可 download: false 只记文字。
  • send:按发言人或标签随机抽一条发到目标群;有图发图,可带 caption。

失败时返回 { "ok": false, "error": "..." },不抛异常。

本地存储

语录与元数据存在 SQLite(默认路径见配置节)。图片落在 <DSH_HOME>/storages/quote-archive/images/<群号>/ 下,库内只存相对路径。数据库默认 WAL、外键与 5 秒 busy timeout;旧库启动时会自动补列。宿主半仅使用 node:* 内置模块与全局 fetch,运行时依赖 Node 内置 node:sqlite,无需编译原生依赖。

Web GUI「语录库」

侧栏「语录库」加载 AstrBot 版管理页整页 iframe(web/manage/ 下原 index.html、script.js、style.css,新增 bridge.js 对接 DSH Node API)。已接通:语录浏览与检索、删除/移动、限制级与归属、群设置读写等。人物、统计、合集、可视化、回收站、协作等模块导航隐藏,直连接口返回 not ported。路由在 /quote-archive/ 命名空间下,仅回环访问;需 Web GUI 加载浏览器半(client.js)且 webServer 可用。

QQ 通道(可选)

复用 SnowLuma / qq-bridge 同层的 OneBot v11 HTTP 网关,不打包 qq-bridge 代码。推荐链路:

QQ → SnowLuma(OneBot v11 网关,默认 http://127.0.0.1:3000)
        ├─ qq-bridge(可选,把 QQ 消息接给 DSH agent 对话)
        └─ dsh-quote-archive(本插件,用同一 HTTP 网关采集图片语录 / 回发语录图)

仅需语录能力时,启动 SnowLuma 并配置 HTTP 地址与 access token 即可;若已用 qq-bridge,可将 channel.qqBridgeConfig 指向其 config.json 复用 SnowLuma 端点。

安装与启用

需要已安装 tools 服务的 DSH(README 写明本机 DSH NEXT 已验证)。package.json 要求 node >= 22.13,dsh >= 0.2.2-rc.1 < 0.3.0-0。

通过 DSH 插件管理器从本地包绝对路径安装:

# 通过 DSH 的插件管理器(本地包绝对路径)
plugin_manager install_bundle target=/absolute/path/to/dsh-quote-archive

安装后确认工具表有 quote,侧栏有「语录库」。若热重载出现 HMR 事务冲突,重启一次 DSH。无 webServer 的无头组合只加载工具半,不会出现管理页入口。

配置要点

默认项在 cordis.patch.yml。常用键如下(完整表格以仓库 README 为准):

键 默认值 说明
dbPath 空 SQLite 绝对路径;空则用 <DSH_HOME>/storages/quote-archive/quotes.db,未设置 DSH_HOME 时回退 ~/.dsh
channel.enabled false 关闭时 channel/sync/send 返回配置提示,其余动作离线可用
channel.httpUrl http://127.0.0.1:3000 SnowLuma OneBot v11 HTTP 网关
channel.accessToken 空 OneBot HTTP access token
channel.qqBridgeConfig 空 可选,指向 qq-bridge 的 config.json
channel.groups [] 目标群号;sync 默认同步这些群,send 默认发往第一个群
channel.autoCollect false 后台定时采集(需 enabled 与 groups)
channel.pollIntervalSec 300 采集间隔 60–86400 秒
channel.maxMessagesPerSync 50 每群每次扫描最近消息数 1–200

典型用法

下面示例与 README 工具用法一致,可在宿主工具调用里复现。

收录与检索:

{"action": "collect", "group": "1031430106", "speaker": "小明", "content": "这个需求我熟", "messageId": "123456", "tag": "搞笑,经典"}
{"action": "search", "query": "摆烂", "group": "1031430106", "limit": 10}
{"action": "recall", "group": "1031430106"}

列表与统计:

{"action": "list", "limit": 10, "offset": 0}
{"action": "stats"}

在已配置 QQ 通道时:

{"action": "channel"}
{"action": "sync", "group": "1031430106", "limit": 50, "download": true}
{"action": "send", "group": "1031430106", "tag": "经典", "caption": "今日份语录"}

日常可先离线 collect / search / recall,需要与群同步时再打开 channel.enabled 并填好 SnowLuma 地址与群列表。

适用场景与注意

适合需要在 DSH 智能体工作流里持久化群聊金句、按标签或关键词召回、偶尔从 QQ 群拉图片语录或回发抽到的语录的用户。管理页适合在本机 Web GUI 内浏览、删改、设限制级与群级设置。

安装前建议阅读仓库源码与许可证:主体代码 MIT;web/manage/ 下三份 UI 文件自 AstrBot 版复制,继续以 AGPL-3.0 分发(见 web/manage/NOTICE.md)。插件以当前 DSH 进程权限读写本机 SQLite 与图片目录,管理 API 设计了回环围栏,但仍应在可信环境部署。qq-bridge 为 PolyForm-Noncommercial,本插件仅调用与其相同的 OneBot HTTP 接口,不包含 qq-bridge 代码。

社区目录 SkillHub 与 GitHub 为独立信息源,与 DeepSeek / 幻方无官方从属关系;路线图 v0.5 计划补齐未移植管理模块等能力,以仓库 Issue 与 README 为准。

结尾

dsh-quote-archive 把语录从「聊天记录里的噪声」收成可检索、可统计、可随机抽取的本地库,并用 AstrBot 同源管理页降低迁移成本。目录页:https://www.skillhub.cn/plugins/EnderDAG/dsh-quote-archive;源码与完整配置:https://github.com/EnderDAG/dsh-quote-archive。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye