dsh-plugin-life:为 DSH 角色模拟作息、真实活动与跨会话记忆

前言

在 DeepSeek Harness(DSH)里给 agent 挂人格,常见做法是静态 system prompt:角色不会随时间变化,也不会在会话之外「自己去做事」。对话一关,上下文就断;下一轮只能从零开始,或靠你手动塞历史。

dsh-plugin-life 是社区维护者 c137650 发布的 Cordis 插件(分类:模型推理)。它给 Harness 里的角色装一套受生理边界约束的有限状态机(睡 / 吃 / 清醒),在清醒时段用真实搜索与抓取产生笔记和 SQLite 事件;每轮对话前按优先级挂载生活记忆与「关于你的事」,且明确不压过人格与你当前输入。设计动机来自 README 里的一句话:「这种虚拟感来源于静止」——插件的工作是让 agent 不再停在原地。

这是什么

  • 仓库:c137650/dsh-plugin-life
  • 目录页:SkillHub 插件页
  • 版本(package.json):0.1.0,MIT 许可证
  • 定位:DeepSeek Harness plugin for agent to simulate a real life(目录简介与仓库描述一致)

插件通过仓库根目录的 cordis.patch.yml 被 DSH 加载;人格文本建议配合 dsh-plugin-masterprompt(无 masterprompt 时插件仍可运行,但无后台人格来源)。

生理状态与真实活动

有限状态机

睡、吃、清醒三类状态。硬编码边界在 lib/physiology.js:睡眠约 6–10 小时、两餐间隔 4–11 小时、连续清醒不超过 16 小时。边界内的具体时刻由历史统计与确定性随机采样;从第 2 天起由前几天的数据条件采样,长期运行会形成相对稳定的节律。

DSH 关闭期间的时间会被快进;重启后插件能按延迟推算错过的餐点等(见 lib/catchup.js)。

清醒时的真实网络活动

清醒时插件会真的搜索、抓取页面,并把读到的内容写入 reading/ 下的笔记文件,而不是纯文本剧本。

  • 搜索走 ctx.web.search
  • HTTP 抓取用 Node 自带 fetch, deliberately 不走 ctx.web.fetch(避免多 provider 时的 WEB_PROVIDER_AMBIGUOUS)
  • 抓取链分四级:PDF(PyMuPDF)、站点专用接口(arXiv / B 站 / GitHub / Wikipedia)、普通 HTML 剥标签、必要时 Playwright 渲染;候选 URL 比目标多,抓不到就试下一个,凑够 1–3 个成功即停
  • 只有至少抓到一个 2xx 且正文非空的页面,活动才会写入 life.db;检索目标单独存 intent,与正文分开

事件记忆与压缩

事件写入 SQLite,带摘要、经过、感受及 interesting / important 分数。

压缩策略(README 原文):

综合分 = importance·0.6 + 新鲜度·0.4     新鲜度按 7 天半衰期衰减
分数前 10%   完整保留,不计入压缩次数
中间 70%     剥成"标题 + 感受"
最老 20%     只留标题
第 3 次被压缩 → 整行删除

keep = 1(importance ≥ 0.75)的事件不参与压缩。

对话上下文里的记忆挂载

每轮对话前挂载记忆,优先级为人格与你当前话句之上不越界。三块互不重叠:

永远记得的:   keep=1 的事件,全部挂载,不设条数上限
记得这些事:   importance ≥ 0.5 的,取 2 条
最近:         最近的,取 2 条

记忆以 user 角色消息形式插在当前输入之前,并标明是背景而非对用户的指令。user_profile.md 每轮全量挂载。

跨会话记忆(captain.db)

与「她自己的生活」分库存储,避免任务与代码污染生活事件。

每轮对话结束后:先用规则闸门判断是否有关于你的持久信息(不调用模型);通过者再将整轮「你说 + 她回」压成第三人称、≤60 字概括,用句向量判重后入库。挂载集合为近 7 天写入 ∪ 热度 ≥ 0.5;热度随「再次被提到」按 14 天半衰期累积,无事件能永久挂载。

可选 embedding:bge-small-zh-v1.5,同时用于活动话题查重(近 7 天相似则换方向)。未找到模型时插件仍运行,判重与提及检测退化为关键词。

安装与启用

前提:DeepSeek Harness 已运行;建议已安装 dsh-plugin-masterprompt。

官方 README 给出的步骤如下(%DSH_HOME% 默认为 C:\Users\<你>\.dsh,Linux 用户可对应为 ~/.dsh 等等价路径):

# 1. 放到插件的搜索路径下
git clone <this-repo> "%DSH_HOME%/plugins/dsh-plugin-life"

# 2. 装依赖(只有一个 peer)
cd "%DSH_HOME%/plugins/dsh-plugin-life"
npm install

# 3. 重启 DeepSeek Harness

运行时依赖:

依赖 说明
@deepseek-ai/cordis ^4.0.1 peer dependency
Node.js ≥ 22 使用 node:sqlite 的 DatabaseSync

可选:Python 3.12 + PyTorch + transformers + modelscope,下载 bge-small-zh-v1.5(README 给出 modelscope 示例命令)。默认 Python 路径为 E:\anaconda\envs\tts0\python.exe,可用环境变量 CAPTAIN_PYTHON 覆盖。

可选抓取增强:Python 的 requests / beautifulsoup4 / lxml、PyMuPDF、playwright、yt-dlp;启动自检结果写入 status.json,缺失则对应能力降级。

安全说明:插件以当前 DSH 进程权限运行,会发起真实网络请求并读写 %DSH_HOME%/dsh-plugin-life/ 下的数据库与文件。安装前请阅读源码与 MIT 许可证,确认网络与磁盘访问符合你的环境策略。

配置与典型用法

配置文件(均在 %DSH_HOME%/dsh-plugin-life/)

文件 作用
user_profile.md 偏好;影响活动选择与打分,每轮全量挂载
persona.txt 可选,指定 masterprompt 模板 id
captain_rules.json 可选,覆盖跨会话记忆规则词表

对话工具

工具 用途
life_status 查心跳、库行数、上次错误;tick=true 强制心跳;probeWeb=true 发一次搜索验证网络
life_open_detail 新开会话,详细讲某件事

诊断

GUI 中无插件日志时,可查看同目录下的 status.json,或使用本机回环端点:POST /dsh-life/icr/start、GET /dsh-life/icr/status、GET /dsh-life/icr/result(人格一致性回归)。

Prompt 与人格相关文案在仓库 prompts/;修改人格时需保证后台写手与前台会话使用同一份 system prompt 组装逻辑(见 prompts/README.md)。

适用场景与注意

适合:希望在 DSH 里让角色有昼夜节律、离线期间状态追赶、背景里真实阅读积累,以及分库的「关于用户」长期记忆,且能接受额外 LLM 调用(写手任务 / 感受 / captain 摘要)与可选 Python 嵌入进程。

注意:

  • 社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系;DSH 生态理念是「一切皆插件」,本文安装步骤以 GitHub README 为准,勿凭插件名臆造 dsh plugin add 命令。
  • 星标与版本以仓库当前状态为准(抓取时 GitHub 显示 1 star,package.json 为 0.1.0)。

结尾

dsh-plugin-life 把生理边界、真实抓取、分级压缩的生活记忆和 captain 跨会话库串成一条闭环:角色会在你不在时继续「过日子」,回来时带着可核对的状态与背景,而不是空泛的角色扮演台词。

  • 目录页:https://www.skillhub.cn/plugins/c137650/dsh-plugin-life
  • 源码与完整设计说明:https://github.com/c137650/dsh-plugin-life
羽毛球分组比赛记分
小程序二维码

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

小夜