前言¶
在 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。
本地 link 或 setup 腳本¶
已有源碼目錄時,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「零配置文件模板」)。
典型用法流程¶
- 用獨立 profile 安裝
dsh-flavor-memory並npm run doctor自檢。 - 在
cordis.patch.yml寫好characterId、soul、voice、relationship與dataFile等完整 config。 - 正常與 DSH 對話;模型需要細節時先
flavor_memory_search,再flavor_memory_read;重要原話用flavor_memory_pin保護。 - 需要可視化調角色、世界書、演化審批時,打開 DSH Web 角色記憶 或
npm run studio。 - 若不想改 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