dsh-flavor-memory:角色聊天裏「保留味道」的長期記憶

前言

在 DeepSeek Harness(DSH)裏做角色向對話時,上下文一拉長,常見做法是整段歷史壓成摘要再塞進 system。事實往往還在,稱呼、口癖、關係張力、某句原話的語氣會被改寫成第三人稱概述,模型之後「知道設定」,但不像那個角色。

下面介紹社區插件 dsh-flavor-memory(維護者 lishicheng2054),它在 DSH 裏提供一層面向角色聊天的長期記憶:本地 JSON 持久化,不依賴向量庫,檢索優先;壓縮只負責「想起來」,原文永久保留作事實源。

這是什麼

插件 npm 包名爲 dsh-flavor-memory,當前版本 0.4.3(見 npm 與倉庫 package.json)。簡介可概括爲:DSH plugin: flavor-preserving long-term memory for character chat. Local JSON, no vector DB, retrieval-first.

同一套引擎還可作爲 OpenAI 兼容本地網關運行,適合不改前端、只改 base URL 的接入方式;本文以 DSH 插件用法爲主。

和普通摘要差在哪裏

項目 README 把「味道」拆成多層保存,而不是揉成一份總摘要:

層級 作用
靈魂層 身份、價值觀、底線;默認建議模式,壓縮時不被摘要改寫
聲音層 稱呼、口癖、句長、禁用表達、原話樣本;可鎖定、審批或按上限演化
關係層 關係階段、信任、承諾、祕密、未解衝突,結構化單獨存
場景層 增量場景卡,只記「這段時間發生了什麼變化」,並帶原文引用 ID
近場層 最近幾輪原文(DSH 側由宿主負責上下文)
深檔案 全部原文永久保留,按需檢索,不刪除

核心原則:摘要只負責「想起來」,原文才是事實源。 壓縮後仍會重新注入 240 字以內的人格回執;場景卡必須引用原始消息 ID 並保留逐字原話;檢索先返回元數據(時間、標籤、命中原因、約 80 字片段),模型確認後再讀全文。

核心功能(已文檔說明的部分)

記憶引擎與歸檔

  • 監聽 user/message 與 assistant/message,歸檔真人消息與模型回覆,優先用 DSH 消息 ID 去重。
  • autoCompactEvery 對尚未歸檔的增量消息自動生成帶引用 ID 的場景卡(設爲 0 可關閉)。
  • 控制台可列出角色實際有歸檔的會話 scope,切換查看、搜索原文;「壓縮率」只統計已生成場景卡的消息,無卡片時顯示 0%。

模型可調用的工具

  • flavor_memory_pin:保護/取消保護一條原文。
  • flavor_memory_search:只返回命中元數據與片段。
  • flavor_memory_read:按 ID 讀原文。
  • flavor_memory_remember:追加一條原文。
  • flavor_memory_compact:創建帶引用 ID 的增量場景卡。
  • flavor_memory_anchor:讀取當前人格回執和關係狀態。
  • flavor_memory_fact:登記、更新或列出當前事實;更新時舊值進歷史,不刪原文。

角色卡、世界書與 Studio

  • 支持 SillyTavern V2 角色卡導入/導出;擴展字段 extensions["dsh-flavor-memory"] 保留靈魂、聲音、關係、觸發規則、演化歷史等。
  • DSH Web 設置頁可打開 角色記憶 管理角色;也可獨立啓動 Studio:
npm run studio
# http://127.0.0.1:8790/flavor-memory/studio

靈魂、聲音、關係支持 locked / suggest / bounded / free 四種演化模式;默認 soul=suggest、voice=bounded、relationship=bounded。

運行環境

package.json 要求 Node >= 22,DSH >= 0.2.0-rc.2 且 < 0.3.0(0.2.0-rc.2 標註爲 compatible)。

安裝與啓用

建議先在獨立 profile 驗證,不要直接改日常 profile。插件以當前 DSH 進程權限讀寫本地文件;安裝前請自行查看 GitHub 源碼 與倉庫內 LICENSE,確認可接受後再裝。

從 npm 安裝(README 推薦的最簡方式)

插件頁「添加插件」填包名 dsh-flavor-memory,或命令行:

dsh plugin --profile flavor-test add dsh-flavor-memory

裝完後可用倉庫提供的自檢(在插件目錄或解壓後的包內):

npm run doctor -- --profile flavor-test

看到 flavor-memory 自檢:通過,且 dsh-load 通過,表示 DSH 已識別插件。README 稱 0.4.3 在全新 profile 下 npm run doctor 13 項全通過。

從 GitHub Release 安裝

插件頁可填 Release 直鏈(v0.4.3 示例):

https://github.com/lishicheng2054/dsh-flavor-memory/releases/download/v0.4.3/dsh-flavor-memory-0.4.3.tgz

也可填 git+https://github.com/lishicheng2054/dsh-flavor-memory.git 或本地 tgz 絕對路徑。SHA-256(v0.4.3):FA3BA5F429E75B46C97A50E9A7DEF26595FAD022C0C8E31754A4009252965E9F。

已有源碼目錄時,README 示例:

dsh plugin --profile flavor-test add link:C:\Users\lsc15\Desktop\個人嘗試與研究\工具與測試\flavor-memory

或使用包內 setup(需替換爲你的路徑與 profile):

npx dsh-flavor-memory-setup setup --profile flavor-test --character-file examples/ayu.character.json --force

npm run setup 會自動寫 profile 依賴、把 dsh-flavor-memory 加入 bundles、生成人格配置並調用 DSH 組合配置自檢。安裝後 cordis.patch.yml 會插入 flavor-memory 條目。

配置角色

DSH 的 config 是整塊替換,不是深合併;在 profile 的 cordis.patch.yml 裏覆蓋同 id 配置時需寫全字段。示例:

- id: flavor-memory
  config:
    characterId: ayu
    characterName: 阿魚
    dataFile: ~/.dsh/flavor-memory/memory.json
    maxCards: 6
    voiceSamples: 3
    maxPromptChars: 4000
    autoCompactEvery: 20
    baseStabilityDays: 30
    soul: "阿魚:嘴硬心軟,先損後哄,不主動說教。"
    voice:
      - 叫她老闆
      - 短句
      - 被關心時先嘴硬
    relationship: 剛開始互相試探

常用字段含義(摘自 README):

  • characterId:記憶庫角色 ID,穩定不要改。
  • dataFile:本地 JSON 記憶數據;默認角色資料庫爲 ~/.dsh/flavor-memory/characters.json(profilesFile)。
  • maxCards / voiceSamples / maxPromptChars:場景卡數量、語氣樣例條數、注入字符硬上限。
  • autoCompactEvery:每多少條未歸檔新消息自動生成一張場景卡。
  • baseStabilityDays:未強化記憶的基礎穩定期。
  • saveDelayMs:防抖保存間隔,默認 40ms。

首次啓動會創建數據文件並寫入角色;重啓不會用配置覆蓋已有靈魂和檔案。

無獨立角色文件時,可用最小 JSON 或 CLI 參數,再跑 npm run setup(見 README「零配置文件模板」)。

典型用法流程

  1. 用獨立 profile 安裝 dsh-flavor-memory 並 npm run doctor 自檢。
  2. 在 cordis.patch.yml 寫好 characterId、soul、voice、relationship 與 dataFile 等完整 config。
  3. 正常與 DSH 對話;模型需要細節時先 flavor_memory_search,再 flavor_memory_read;重要原話用 flavor_memory_pin 保護。
  4. 需要可視化調角色、世界書、演化審批時,打開 DSH Web 角色記憶 或 npm run studio。
  5. 若不想改 DSH 前端,可另啓 OpenAI 兼容網關(npm run gateway,默認 http://127.0.0.1:8787/v1),客戶端只改 Base URL 與本地 GATEWAY_TOKEN(環境變量見 README)。

適用場景與注意

適合: 長期角色扮演、需要保留口癖與關係演進、希望本地 JSON 可控、檢索先於全文注入的場景;與 SillyTavern 角色卡工作流銜接時也可利用導入導出。

注意:

  • 無向量庫,召回邏輯以項目實現的檢索與場景卡/事實層爲準,不要按 RAG 插件預期去配 embedding。
  • 插件與數據文件權限等同 DSH 進程;dataFile 路徑請放在你信任的位置並備份。
  • 社區目錄 SkillHub 插件頁 與 GitHub 爲獨立生態信息源,與 DeepSeek / 幻方無官方從屬關係。
  • 網關模式下會話 scope、重複消息去重等需適配層配合(README 對 QQ / NoneBot 等有說明)。

結尾

dsh-flavor-memory 把角色聊天的記憶從「一份越寫越平的摘要」改成「分層錨點 + 可檢索原文 + 帶引用的場景卡」,在 DSH 裏以插件和工具形式接入,也可選本地 OpenAI 兼容網關。進一步細節以倉庫 README 與 CHANGELOG 爲準。

  • 目錄頁:https://www.skillhub.cn/plugins/lishicheng2054/dsh-flavor-memory
  • GitHub:https://github.com/lishicheng2054/dsh-flavor-memory
羽毛球分组比赛记分
小程序二维码

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

小夜