dsh-cat-diary:四欄日記與好感度,讓 DSH 新會話記得昨天

前言

在 DeepSeek Harness(DSH)裏做長期陪伴或角色扮演時,常見問題是:新開一輪對話後,模型對「昨天聊過什麼」只有模糊印象,好感、約定、小習慣也很難穩定延續。有人靠手動粘貼摘要,有人靠外部筆記,但和宿主會話、換日邊界、每輪狀態更新往往對不齊。

dsh-cat-diary(維護者 AsterLuo,社區分類:記憶)把「按自然日歸檔對話 → 寫成結構化日記 → 次日注入速讀卡」和「每輪自動判好感、賬本唯一寫入」放在同一套存儲裏,好感度子插件隨主包安裝,無需單獨裝包。下面介紹它做什麼、怎麼裝、怎麼用,以及無 Web 側邊欄時如何靠 CLI 替代。

這是什麼

一句話:爲 DSH 做的「貓娘日記 + 好感度」插件——每天把當天全部對話寫成一篇四欄日記,第二天新開對話時自動注入「昨日速讀卡」;好感度每輪由宿主在 agent/pre-step 首步判定,側邊欄(若宿主支持)可看分數走勢、加減原因和最近 7 天日記。

核心功能

日記主體

流程可以概括爲:採集會話 → 模型寫前三節(知識、感想、印象)→ 第四節由代碼生成(不是模型自由發揮)→ 寫入存儲目錄。換日由 cutoffHour 控制(默認凌晨 5 點前的對話算前一天)。

設計上是開機補寫而不是定時任務:日界在 05:00 之後日記才「該寫」,但那個時刻機器常關機,定時器不會響。因此每次 DSH 啓動時檢查「這一天已結束但 days/<day>.md 還不存在」就補寫一次;已有文件一律不覆蓋(含你手改過的)。補寫冪等,重啓多次也只寫欠下的那一天。

新會話側:昨日內容會以速讀卡形式注入上下文(briefBytes 等配置控制體積),核心價值被作者概括爲「新會話能自動記得昨天」——面板只是可視化,不是必需品。

好感度子插件

每輪判定一次,但有日額度與單步上限(見配置 maxStep、maxDaily)。十檔狀態,每 20 分一檔(例如 80~100「心之所向」,-100~-70「關上了門」,完整表見 README)。

五條結構約束裏和日常運維最相關的是:

  1. 好感度賬本是唯一寫入方——日記、速讀卡、長期記憶、UI 都是讀者,不會出現「日記寫 74、賬本寫 70」的分叉。
  2. 每輪必判,但不代表每輪必變;判定失敗會落盤 failed 記錄,不會僞裝成「不變」。
  3. 人格 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 爲準。

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

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

小夜