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。

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

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

小夜