dsh-somni:DSH agent 的睡眠整理式長期記憶

前言

在 DeepSeek Harness(DSH)裏做長期運行的 agent,常見做法是每次對話從零開始,或把整段歷史塞進上下文。前者丟事實與偏好,後者成本高、也難區分「當前任務」和「該長期保留什麼」。社區插件 dsh-somni(維護者 liuqingman)走另一條路:醒時寫入與按需聯想,空閒時由 sidecar 做類似睡眠整理的蒸餾,把會話沉澱爲可 grep 的 Markdown 記憶。分類上它屬於 DSH 生態「記憶」類插件;目錄頁見 SkillHub,源碼與說明在 GitHub(MIT,當前 package 版本 0.1.0)。DSH 本身是「一切皆插件」的 agent 宿主;SkillHub 爲社區目錄,與 DeepSeek / 幻方無官方從屬關係。

這是什麼

dsh-somni 給 DSH agent 提供睡眠整理式長期記憶:醒着時身份與未竟意向常駐 system prompt,相關記憶在行動前/工具後自動聯想注入,模型也可用工具主動檢索;空閒一段時間後「做夢者」把當天 session 日誌整理成情景、語義、前瞻、程序四類記憶。持久化全部是磁盤上的 Markdown + YAML front-matter,不依賴專有數據庫(向量索引 SQLite 爲可刪可重建的派生物)。

架構上分爲兩半:TypeScript Cordis 插件(capture、inject、associate、9 個記憶工具、dream 調度)與 Python sidecar somni_memory(記憶管理、可選向量索引、ReAct 整理循環),經單條 stdio ndjson JSON-RPC(rpc.py)通信;做夢時 Python 反向 RPC 調用宿主 llm.chat,默認複用 harness 模型,無需額外 API key。

核心功能

記憶類型與到達模型的方式

類型 目錄 模型如何用到
身份 memory/(如 about_me.md、about_user_*.md) system prompt 常駐區段
前瞻(意向) memory/intentions/ 常駐區段 + 意向相關工具
情景 memory/episodes/ search_episodes、recall_memories、聯想提示
語義 memory/knowledge/ search_knowledge、recall_memories、聯想提示
程序(技能) skills/agent_learned_skills/*/SKILL.md 可配合 dsh-skill-filesystem;聯想提示
工作記憶 memory/session-log/ search_recent_conversation

醒時:捕獲、注入、聯想

  1. Capture:訂閱 DSH session/event,在 session/flush / turn/end 寫入 memory/session-log/;子 agent 會話跳過。
  2. Inject:向 system prompt 注入身份、意向、紀律三個區段(可在 cordis.yml 中開關)。
  3. Associate:在 agent/pre-step(最新用戶消息)與 tools/post-execute(工具名與參數)上對 knowledge / skills / episodes 混合打分;僅當最高分 ≥ 0.52 且領先第二名 ≥ 0.04 時注入提示,同一會話內同一條記憶不重複。未啓用向量層時聯想鉤子保持靜默,仍可關鍵詞檢索。

記憶工具(掛到 ctx.tools)

插件註冊 9 個工具,返回均爲 Markdown:recall_memories、search_episodes、search_recent_conversation、search_knowledge、add_intention、complete_intention、cancel_intention、list_intentions、dream_now。會話中可調用 dream_now 強制觸發一次整理;任意新回合開始時會搶佔正在進行的 dream,用戶不必等待整理結束。

睡時:dream 整理

空閒計時滿足配置(默認如 dream.idleMs 15 分鐘、dream.maxIntervalMs 6 小時等)且有待處理 session 日誌時,sidecar 執行 sleep.run ReAct 循環,產出 episodes、knowledge、intentions、skills 條目及 memory/dreams/ 運行日誌,並做衰減與歸檔(低分條目移入 archived/,不物理刪除)。

可選能力

  • 向量層:安裝 somni-memory[embed] 並放置 bge-small-zh-v1.5 等 ONNX 模型後,啓用語義召回與聯想提示;否則僅關鍵詞模式。
  • 工具面總閘:配置 tools.gate.stateFile 等,可通過外部 JSON 狀態文件熱切換是否向模型暴露 somni 工具 schema。

環境與依賴

運行 DSH 側需 Node >= 22(見 package.json engines),DeepSeek Harness >= 0.2.0-rc.1 及 README 列出的 peer 包(dsh-agent、dsh-session、dsh-llm 等)。Sidecar 需要 Python >= 3.9 且在 PATH 上(可用配置項 python 指定);核心 sidecar 僅依賴 Python 標準庫。Python 缺失時插件優雅降級:capture 與 dream 停止,宿主不崩潰。

安裝與啓用

官方 README 給出的安裝方式如下(需已安裝 DSH;README 中文安裝段另寫 node >= 18,與 package 聲明的 Node >= 22 並存時,建議以宿主與 engines 爲準使用 Node 22+):

git clone https://github.com/liuqingman/dsh-somni.git
cd dsh-somni
./install.sh                  # 裝進 default profile
./install.sh --profile mybot  # 或 $DSH_HOME/profiles 下任意 profile

install.sh 會 pip 安裝 sidecar、把插件鏈入 profile 的 node_modules、將示例配置合併進 profile 的 cordis.patch.yml,並用 stdio ping 校驗 sidecar;腳本冪等,可重複執行。

若需要語義召回與聯想提示,可安裝可選向量依賴並按文檔放置模型:

python3 -m pip install "somni-memory[embed]"
# 將 BAAI/bge-small-zh-v1.5 的 ONNX 文件放入 ~/.dsh/somni/models/ 並配置 embed.provider: local

在 profile 的 cordis.patch.yml 中,插件條目需掛在頂層 - insert: 之下(install.sh 會自動寫對)。常見片段包括啓用 somni 與指向蒸餾技能目錄,例如:

- insert:
    - name: dsh-somni
    - name: '@deepseek-ai/dsh-skill-filesystem'
      config:
        customSkillDirs: [~/.dsh/somni/skills/agent_learned_skills]

默認數據目錄爲 <DSH_HOME>/somni(配置鍵 dataDir)。完整可選配置見倉庫 examples/cordis.patch.yml。

典型用法

  1. 日常對話:無需額外操作;插件自動寫 session 日誌、刷新身份/意向區段,並在合適時機注入聯想提示。
  2. 主動回憶:讓 agent 調用 recall_memories 或 search_knowledge / search_episodes 檢索磁盤記憶。
  3. 待辦與意向:通過 add_intention、complete_intention、cancel_intention、list_intentions 管理前瞻記憶;未完成意向在模型側保持高激活(不做衰減)。
  4. 立即整理:調用 dream_now,或在空閒後等待調度器自動 dream。
  5. 人工維護:直接編輯 dataDir/memory/ 與 skills/ 下 Markdown;用 grep 與版本管理工具審計 agent 記憶。

磁盤佈局概要(見 README):

dataDir/
├── memory/
│   ├── about_me.md
│   ├── intentions/
│   ├── episodes/
│   ├── knowledge/
│   ├── session-log/
│   └── dreams/
├── skills/agent_learned_skills/
├── models/          # 可選 embedding
└── index.sqlite     # 派生索引,可刪後重建

適用場景與注意

適合:需要跨會話保留身份、事實、決策與技能沉澱的 DSH agent;希望記憶可讀可改、可備份;願意接受「空閒時異步整理」而非實時全量寫庫的場景。

注意:

  • 插件與 Python sidecar 以當前 DSH 進程權限運行,可讀寫 dataDir 並調用宿主 LLM;安裝前請閱讀源碼與 MIT 許可證,確認數據目錄與模型調用策略符合你的環境。
  • JSON-RPC 走 stdio,sidecar 不得向 stdout 打印調試信息,否則會破壞協議(設計見 docs/HANDOFF.md)。
  • 未配置 embedding 時聯想提示關閉,但關鍵詞檢索與 dream 整理仍可用(視 Python sidecar 是否正常)。
  • 與飛書 agent「somni」同源的記憶核心爲解耦 fork,磁盤格式與整理策略一脈相承,但本倉庫面向 DSH Cordis 插件形態。

結尾

dsh-somni 把「醒時回憶 + 睡時整理」落到 DSH 插件與 Python sidecar 的組合裏,用 Markdown 長期記憶補齊 agent 的連續性與可運維性。進一步的設計細節見倉庫 docs/design.md 與 README.zh.md。

  • 目錄頁:https://www.skillhub.cn/plugins/liuqingman/dsh-somni
  • GitHub:https://github.com/liuqingman/dsh-somni
羽毛球分组比赛记分
小程序二维码

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

小夜