前言¶
在 DeepSeek Harness(DSH)裏做長期陪伴或角色扮演時,常見問題是:新開一輪對話後,模型對「昨天聊過什麼」只有模糊印象,好感、約定、小習慣也很難穩定延續。有人靠手動粘貼摘要,有人靠外部筆記,但和宿主會話、換日邊界、每輪狀態更新往往對不齊。
dsh-cat-diary(維護者 AsterLuo,社區分類:記憶)把「按自然日歸檔對話 → 寫成結構化日記 → 次日注入速讀卡」和「每輪自動判好感、賬本唯一寫入」放在同一套存儲裏,好感度子插件隨主包安裝,無需單獨裝包。下面介紹它做什麼、怎麼裝、怎麼用,以及無 Web 側邊欄時如何靠 CLI 替代。
這是什麼¶
一句話:爲 DSH 做的「貓娘日記 + 好感度」插件——每天把當天全部對話寫成一篇四欄日記,第二天新開對話時自動注入「昨日速讀卡」;好感度每輪由宿主在 agent/pre-step 首步判定,側邊欄(若宿主支持)可看分數走勢、加減原因和最近 7 天日記。
- 目錄頁:https://www.skillhub.cn/plugins/AsterLuo/dsh-cat-diary
- 源碼與文檔:https://github.com/AsterLuo/dsh-cat-diary
- 許可證:MIT(README 與 package.json 一致)
- 當前 package 版本:1.1.0
核心功能¶
日記主體¶
流程可以概括爲:採集會話 → 模型寫前三節(知識、感想、印象)→ 第四節由代碼生成(不是模型自由發揮)→ 寫入存儲目錄。換日由 cutoffHour 控制(默認凌晨 5 點前的對話算前一天)。
設計上是開機補寫而不是定時任務:日界在 05:00 之後日記才「該寫」,但那個時刻機器常關機,定時器不會響。因此每次 DSH 啓動時檢查「這一天已結束但 days/<day>.md 還不存在」就補寫一次;已有文件一律不覆蓋(含你手改過的)。補寫冪等,重啓多次也只寫欠下的那一天。
新會話側:昨日內容會以速讀卡形式注入上下文(briefBytes 等配置控制體積),核心價值被作者概括爲「新會話能自動記得昨天」——面板只是可視化,不是必需品。
好感度子插件¶
每輪判定一次,但有日額度與單步上限(見配置 maxStep、maxDaily)。十檔狀態,每 20 分一檔(例如 80~100「心之所向」,-100~-70「關上了門」,完整表見 README)。
五條結構約束裏和日常運維最相關的是:
- 好感度賬本是唯一寫入方——日記、速讀卡、長期記憶、UI 都是讀者,不會出現「日記寫 74、賬本寫 70」的分叉。
- 每輪必判,但不代表每輪必變;判定失敗會落盤
failed記錄,不會僞裝成「不變」。 - 人格 id 只解析一次(
resolvePaths().person),日記與好感度必須用同一個person(或成對的環境變量)。
側邊欄與模型選擇器(可選)¶
宿主具備 sidebarRightTabs / sidebarRight 時,可掛只讀面板:分數、狀態、走勢、加減原因、最近 7 天日記,頂欄左側爲模型設置、右側爲刷新。沒有側邊欄時,日記補寫、每輪判分、速讀卡注入、CLI 仍照常;模型選擇可改配置裏的 autoWriteRoute 等價替代。
補寫日記與判好感對模型要求不同:前者宜長文與理解力,後者要快、穩、便宜(判分約 12 秒超時)。面板保存的路徑爲:
<DSH_HOME>/storages/dsh-cat-diary/<人格>/autoWriteRoute.json
優先級:面板保存值 > cordis 裏的 autoWriteRoute > 宿主默認模型。判分側通過跨包只讀約定讀同一文件(plugins/dsh-affinity/lib/judge-route.js),不寫分數。
安裝與啓用¶
推薦從 GitHub 安裝(命令來自 README,請將 <你的profile> 換成實際 profile 名):
dsh plugin --profile <你的profile> add github:AsterLuo/dsh-cat-diary
指定版本示例:
dsh plugin --profile <你的profile> add github:AsterLuo/dsh-cat-diary#v1.1.0
也可在 Releases 下載 dsh-cat-diary-v1.1.0.zip,解壓到 <DSH_HOME>/profiles/<profile>/node_modules/dsh-cat-diary/,再在 profile 的 package.json 與 dsh.profile.bundles 中登記依賴。
Node 引擎要求(package.json):^22.19.0 || >=24.0.0。
在 profile 的 cordis.patch.yml 裏只覆蓋、不要重複 insert 兩個插件塊(節選):
- id: cat-diary
disabled: false
config:
person: default
cutoffHour: 5
briefBytes: 6000
autoWrite: true
autoWriteDelayMs: 8000
autoWriteMaxDays: 7
autoWriteMaxTokens: 3200
autoWriteRawChars: 24000
- id: affinity
disabled: false
config:
maxStep: 4
maxDaily: 16
stepJudge: true
person: default
cat-diary 與 affinity 的 person 必須一致;也可用環境變量 DSH_CAT_DIARY_PERSONA 與 DSH_AFFINITY_PERSONA,但兩者仍須相同,否則會寫到不同目錄(README 曾記錄第四節顯示「賬本爲空」的真實故障案例)。
典型用法¶
CLI(無面板或腳本運維)¶
在插件目錄或通過 node bin/diary.mjs:
node bin/diary.mjs status # 當前分數、日記數、今日狀態
node bin/diary.mjs open # 昨日速讀卡
node bin/diary.mjs show --date D # 某天的完整日記
node bin/diary.mjs list # 列出所有日記
node bin/diary.mjs affinity show # 好感度賬本(只讀)
補歷史與成本預估:
node bin/diary.mjs backfill --days 7 --dry-run
知識檢索:node bin/diary.mjs knowledge [關鍵詞]。
數據落盤位置¶
日記與人格相關:
<DSH_HOME>/storages/dsh-cat-diary/<人格>/
days/2026-11-01.md
days/2026-11-01.meta.json
raw/2026-11-01.md
autoWriteRoute.json
好感度權威賬本:
<DSH_HOME>/storages/dsh-affinity/<人格>/
affinity/events.jsonl
affinity/state.json # 派生緩存,手改無效
卸載插件不會刪除上述數據。
適用場景與注意¶
適合誰:需要在 DSH 裏做按日記憶、次日自動續上下文、並希望在對話節奏上疊加可審計好感變化的場景(角色扮演、長期協作 persona 等)。TUI 或純命令行宿主沒有 Web 渲染層時,客戶端面板不會加載,後端日記與判分仍可用 CLI 查看。
安全與權限:插件以當前 DSH 進程權限讀寫 <DSH_HOME>/storages 與會話採集路徑;安裝前請自行審閱源碼與 MIT 許可證,社區目錄 SkillHub 與 DeepSeek / 幻方無官方從屬關係,並非官方應用商店。
運維提示:默認模型若指向未註冊的 provider,補寫與判分可能一起失敗,外部表現可能只是「今天沒有日記」;可爲 diary / judge 分別釘模型。判分失敗請查賬本中的 failed 記錄,不要假設「本輪沒變化」。
開發者自測:npm test(README 寫明 143 項測試);隔離驗證可用 node scripts/prove-isolation.mjs,避免測試誤寫真實 sessions。
結尾¶
dsh-cat-diary 把「日歸檔 + 速讀注入」和「每輪好感判定 + 唯一賬本」綁在同一套人格路徑與約束裏,減少記憶與分數兩套敘事。若要進一步瞭解參數與模型選擇器細節,以 GitHub README 爲準。