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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye