前言¶
在 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:按时间倒序分页,
limit1–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。