前言¶
在 DeepSeek Harness(DSH)裏給陪伴型智能體加記憶,常見兩難是:忘得太多會丟掉用戶認真說過、希望被記住的細節;把每次閒聊都塞進下一輪,上下文遲早裝不下。壓縮、檢索、分層能緩解容量問題,但對情感陪伴還要再問一層:存下來的,是不是這個人真正在意的?
通用記憶插件往往按內容類型、關鍵詞或固定規則取捨。下面介紹社區插件 dsh-plugin-companion-memory(維護者 123zxs345),它把問題從「怎樣少忘一點」推進到「怎樣提煉重要信息」:主動維護用戶畫像,用三層結構存原始經歷與提煉後的意義,相關才入選候選,並複用原生會話前綴與已有總結,減輕重複整理的開銷。
這是什麼¶
dsh-plugin-companion-memory 是面向 DeepSeek Harness 的選擇性記憶插件,分類爲「記憶」。項目描述爲:主動用戶畫像、三層漸進披露、會話緩存與總結複用(Selective companion memory for DeepSeek Harness)。
插件不把用戶定型:畫像幫助理解「你看重什麼、希望怎樣被對待」,用戶當下的表達優先;重要性由後臺模型結合畫像與情境判斷,而不是按情緒分數或固定遺忘天數硬篩。
核心機制¶
README 用一張表概括設計,要點如下。
| 機制 | 作用 |
|---|---|
| 主動維護用戶畫像 | 新經歷補充或修正理解;完整畫像始終參與後臺取捨,不依賴本輪檢索碰運氣。 |
| 原始記憶 → 提煉記憶 → 簡短總結 | 保留原話與來源;提煉意義和適用情境;短總結作爲檢索入口。 |
| 相關才入選 | 只比較簡短總結的語義相似度,達標才進入候選,最多 24 條,可以是 0 條。 |
| 漸進披露 | 模型自行決定先看提煉內容,還是進一步覈對原始來源。 |
| 緩存與總結複用 | 複用剛完成的原生會話前綴、已有總結與階段結果,減少重複整理。 |
聊天時,插件向宿主模型提供 recall_memory 與 read_memory:先看到摘要,需要時再展開意義或原話。後臺模型決定記憶的保留、提煉、合併與修正;執行層檢查來源、容量、依賴與事務一致性。記憶落在本地 SQLite;啓用 Hindsight 時,短總結也會送到你配置的檢索服務。插件不額外保存宿主 API 密鑰,也不自動下載嵌入模型。
默認在安靜約 15 秒後嘗試整理;持續聊天時,從首個完整待整理交互起最多等待 60 秒,生成回覆期間會等待其結束。普通閒聊可以不形成長期記憶。未配置檢索服務時,本地 SQLite 與後臺畫像維護仍保留,經歷候選爲空,不用無關內容補位。
安裝與啓用¶
已驗證環境:Node.js 24+、DeepSeek Harness 0.2.1-rc.2、Cordis 4.0.5。先在宿主中配置好模型與憑據,插件複用宿主,不需要再填寫模型 API Key。
在常用的 web profile 中安裝發佈包(當前資料中的版本爲 v0.3.2):
dsh plugin --profile web add https://github.com/123zxs345/dsh-plugin-companion-memory/releases/download/v0.3.2/dsh-plugin-companion-memory-0.3.2.tgz
也可以從固定版本的 Git 倉庫安裝:
dsh plugin --profile web add "git+https://github.com/123zxs345/dsh-plugin-companion-memory.git#v0.3.2"
安裝後重啓 dsh web。組合包會在當前 profile 下加載 companion-memory,數據保存在該 profile 的 companion-memory/ 目錄。倉庫內包含可安裝的編譯結果,使用者無需先構建源碼。
使用 DSH「自定義插件索引」時,可在「發現 → 添加索引源」填入:
https://raw.githubusercontent.com/123zxs345/dsh-plugin-companion-memory/main/market/index.json
語義召回依賴宿主已有的 Hindsight chunks 服務。在當前 profile 的 cordis.patch.yml 中配置地址(資料原文示例;補丁會替換整個 config,請保留數據目錄及已有自定義項):
- id: companion-memory
config:
dataDir: !!js "ctx.get('profileContext').dir + '/companion-memory'"
companionId: default
idleReviewSeconds: 15
reviewMaxDelaySeconds: 60
candidateBudget: 24
minimumSimilarity: 0.55
contextTokens: 800
hindsightUrl: http://127.0.0.1:8888
將 hindsightUrl 換成你的實際服務地址。默認面向單一主人的 profile;多用戶部署應使用隔離作用域、獨立 companionId 和數據目錄。
典型用法示意¶
README 中的虛構示例(說明提煉與「當前表達優先」):
用戶:以後我說累了,先聽我吐槽兩句,別急着給建議。
模型可將其提煉爲:疲憊時希望先被傾聽,並保留適用情境與原話依據。另一天用戶說「今天我想聽聽你的辦法」時,按當天需要回應,也可修正已有理解。
卸載插件(數據目錄默認保留,是否刪除由你決定):
dsh plugin --profile web remove dsh-plugin-companion-memory
卸載後需重啓宿主。
程序化接入(可選)¶
在創建或恢復宿主 Agent 之前加載插件(摘自 README):
import { resolve } from 'node:path';
import CompanionMemory from 'dsh-plugin-companion-memory';
await root.plugin(CompanionMemory, {
dataDir: resolve('.dsh-companion-memory'),
companionId: 'my-companion',
hindsightUrl: 'http://127.0.0.1:8888',
candidateBudget: 24,
minimumSimilarity: 0.55,
});
root 爲已有 Cordis Context,需提供 agents、systemPrompt、tools、llm 等服務。插件不替換宿主人設。可通過 root.companionMemory.reviewNow('preview') 預覽整理計劃,applyPreview() 應用,userProfile() 讀取畫像。設置 idleReviewSeconds: 0 可關閉自動調度,保留手動整理。更完整的架構說明見倉庫 docs/architecture.md。
適用場景與注意¶
適合誰: 在 DSH 上做長期情感陪伴、希望關係能「接着上一次相處」、又需要控制上下文體積的開發者。插件理念是理解這個人、提煉在意的事,用 evolving user profile 與分層召回保持連續性,而不是堆滿無關歷史。
生態說明: DSH 主張「一切皆插件」;社區目錄 SkillHub 插件頁 爲獨立站點,與 DeepSeek / 幻方無官方從屬關係,不要當作官方應用商店。
安裝前請知悉: 插件以當前 DSH 進程權限運行,會讀寫 profile 下數據目錄並調用你配置的模型與 Hindsight 服務。安裝前應自行查看 GitHub 源碼 與 MIT 許可證。刪除插件記憶不等於刪除宿主原始聊天或微信、QQ 等平臺記錄。緩存是否實際命中由模型提供商決定,插件不承諾固定命中率。
結尾¶
經過上面的步驟,你可以在 web profile 里加載 dsh-plugin-companion-memory,用畫像與三層選擇性記憶讓陪伴對話更連貫,同時把無關閒聊擋在候選之外。介紹視頻見 B 站 BV1G1436xEp4;索引與詳情見 SkillHub 目錄頁 與 GitHub 倉庫。