前言¶
在 DeepSeek Harness(DSH)裏開新會話,上下文往往從零開始:昨天定過的約定、項目路徑、你糾正過一次的偏好,都要靠人再講一遍,或靠模型「記得去翻文件」——後者在忙起來時很容易漏。社區裏也有把記憶塞進向量庫或外部服務的做法;拾光走的是另一條路:指定工作區裏的一個筆記文件夾,每會話開頭注入其中幾段 Markdown,清單、日記摘要、待辦狀態由插件按規則維護,寫進文件的纔算數。
下面介紹 IcyDate 維護的 DSH 插件 ofttold-memory(中文名「拾光」),分類爲「記憶」,當前在 GitHub 上約 2 stars。本文事實來自倉庫 README 與 npm 包元數據;安裝與配置以原文爲準。
這是什麼¶
拾光是給 AI 用的「小本子」:模型可以往裏面寫當天做了什麼、自己的判斷、常拐錯的步驟;下次開口前插件先把本子 relevant 部分擺進上下文。README 強調:它記得的不只是用戶說過什麼,還有模型自己寫進日記的內容。你也可以把「希望 AI 是什麼樣的人」寫進 relationship.md,不必每會話重複囑咐。
插件面向 DSH web profile,依賴 Node.js 22+ 與 DSH 0.2.x 系列(見包內 engines 與 peerDependencies)。許可證爲 MIT。其他 harness 支持在 README 中標註爲「規劃中」。
核心功能¶
會話注入與文件骨架¶
安裝後首次運行會在當前工作區創建 .ofttold/,並鋪五文件骨架(空殼加註釋,不預填記憶):
memory.md:注入源(如「常被提起」「待辦」)index.md:日記索引relationship.md:身份描述與情緒詞表、緩存區detours.md:常出錯步驟diary/:按天一文件的日記
若把配置裏的 memoryDir 指向已有文件夾,插件只補缺文件,已有內容不動;但需補齊 relationship.md 與 diary/,否則「寫的一半」會缺塊。
清單與沉底¶
memory.md 裏「常被提起」建議上限約 8 條。寫滿後插件按權重決定誰沉底(公式爲 exp(-t / 2^n),詳見倉庫 docs/design.md),沉底不是刪除,日記裏再提起可浮回。設計目標是:不看見就會幹錯活的信息才進清單,而不是把一切「重要」都堆進上下文。
日記、摘要與體檢¶
每天一個 diary/YYYY-MM-DD.md。文件頂部的 ## 今天(HH:mm 更新) 是隨寫隨新的摘要;插件會比對摘要時間與正文最後一節時間,落後則點名。summaryFrom(默認 17:30)之前不催摘要。
同一套邏輯做「日記體檢」,只報不改:缺 情緒: 行、標籤不在詞表、節數超過你設的 diarySections、過了點仍無摘要等,會在塊尾合併成一行 Diary check — …。
工具:落盤纔算記住¶
README 明確:口頭「記下了」若沒有調用工具寫到文件,與沒記一樣。
| 工具 | 作用 |
|---|---|
remember_note |
寫入 memory.md:kind: anchor(默認)進「常被提起」,kind: task 進「待辦」 |
complete_task |
勾選待辦並補完成日,不刪除記錄 |
remember_emotion |
改 relationship.md 裏 **現在** 一行;詞必須在同文件 ## 情緒詞表 中,否則拒絕 |
情緒值由人定,插件校驗詞表並打時間戳;不自動寫日記,沒寫只在塊尾給一行狀態(不寫成催寫指令)。
塊尾狀態行¶
注入末尾可能附帶:今日日記是否存在、待辦條數與最久未動天數、到期/逾期任務、relationship.md 當天是否被文件工具打開過、第二會話與「今日日記寫入時間」的關係等。這些是狀態事實,便於模型決定是否補寫,而不是替用戶做內容判斷。
生效節奏¶
README 用表格說明預期:第 1 天本子仍空、模型開始往裏寫;約第 3 天能接上上次事;約第 10 天日記與自我描述更穩定;約一個月後本子行數變多但注入仍只挑少量條目——延遲是設計的一部分,不是裝完立刻滿配記憶。
安裝與啓用¶
官方安裝命令(npm 預構建包,無需本地構建):
dsh plugin --profile web add ofttold-memory@latest
跟倉庫最新源碼安裝時,README 說明可將包名換爲 github:IcyDate/ofttold-memory(與 @latest 二選一,按你的更新策略來)。
裝好後可在 設置 → 拾光 調整,或直接改 profile 的 cordis.patch.yml(例如 memoryDir)。
Windows 注意(來自 README 實測說明):dsh plugin 會轉發到 pnpm,需先 npm install -g pnpm;PowerShell 執行策略可能攔 .ps1,可用 cmd /c "dsh plugin --profile web add ofttold-memory" 或在 cmd 中執行;國內鏡像未同步時可加 --registry=https://registry.npmjs.org/。插件需寫入 ~/.dsh/profiles/,若由沙箱內的 agent 代裝可能 EPERM,安裝命令宜在本機終端自行執行。
典型用法¶
1、安裝並確認工作區出現 .ofttold/¶
執行上面的 dsh plugin 命令,打開 DSH web profile,在新工作區發起會話,確認骨架文件已創建。
2、編輯 memory.md 的「常被提起」¶
按 README 示例格式寫硬約定與高頻路徑,例如:
## 常被提起
- **項目在哪** → `~/work/my-project`|省掉每次都要問
- **什麼不能動** → 不要改 `config/prod.yml`
3、通過工具追加錨點或待辦¶
模型側應調用(示意來自 README):
remember_note(text: "主人喜歡一條溪穿街的古鎮,黃龍溪那種", title: "主人喜歡古鎮")
待辦示例格式:
- [ ] 2026-11-02 起 | 2026-11-05 到期 | 修上游白名單
4、維護情緒詞表與當前狀態¶
在 relationship.md 維護 ## 情緒詞表,用 remember_emotion(word: "定") 更新 **現在** 行;日記裏 情緒: 標籤需用詞表內的詞,否則體檢會提示且情緒檢索對不上。
適用場景與注意¶
適合:希望記憶留在工作區 Git 可管的 Markdown 裏、接受「養幾天才順」、需要待辦/日記/清單分工且願意自己寫內容的人;不想把會話記憶默認交給外部 SaaS 的 DSH 用戶。
邊界(README「它做什麼,不做什麼」):插件不替你決定記什麼、不判斷情緒含義、不自動補日記;上限、沉底、詞表等「看不見就會錯」的部分交給代碼,內容取捨留給寫文件的人。
安全與信任:插件以當前 DSH 進程權限讀寫工作區與 profile;安裝前請查看 GitHub 倉庫 源碼與 MIT 許可證,再決定是否用於含敏感信息的項目。
結尾¶
拾光把「每會話先看一眼筆記」做成 DSH 插件:文件夾在你手裏,注入一次,工具和塊尾把「寫沒寫、過沒過期、今天翻沒翻 relationship」說清楚。社區插件目錄見 SkillHub 上的 ofttold-memory 頁;源碼、設計說明與變更記錄在 IcyDate/ofttold-memory。DSH 生態強調「一切皆插件」,SkillHub 爲社區站點,與 DeepSeek / 幻方無官方從屬關係。