前言¶
在 DeepSeek Harness(DSH)里做长期陪伴或带人格的智能体时,上下文窗口是易失的:对话一满会被裁剪,清上下文或压缩后「她是谁、做到哪、答应过什么」往往跟着归零。常见做法是把设定写进系统提示或某次会话里,但换会话、重启 DSH 之后,连续性仍靠人工复制粘贴。
人格接力(dsh-identity-relay)由 wumingzhiren-lab 维护,归类为「记忆」类 DSH 插件。下面介绍它如何把人格卡、交接书和长期记忆落到磁盘,并在每个新会话开工时自动注入,让换会话、清上下文之后仍能从同一套档案读档。
这是什么¶
一句话:把「灵魂」从上下文搬到纯文本文件;插件负责读档、注入、预警和维护,不负责自动采集聊天内容。
- 仓库:wumingzhiren-lab/dsh-identity-relay
- 社区目录:SkillHub 插件页
- 许可证:MIT(见仓库)
- 插件以当前 DSH 进程权限读写
memoryDir,安装前建议通读源码与许可证;社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系
三个磁盘文件¶
记忆库默认目录为 ~/.dsh/identity-memory(可在配置里改 memoryDir)。安装后会自动生成模板,模板不等于已配好人格。
| 文件 | 作用 |
|---|---|
persona.md |
人格卡:身份、性格、说话方式、红线 |
handover.md |
交接书:上一段在做什么、接下来做什么、答应过什么 |
facts.jsonl |
长期记忆:一行一条 JSON,含时间、内容、来源、状态等 |
每次新会话开工(新建、恢复、清上下文、压缩之后),插件会把「人格卡 + 交接书 + 近期记忆」注入第一轮上下文。上下文占用接近上限时,会在下一步之前插入预警,提醒先用 relay_handover 写交接书。会话进行中若磁盘上的三个文件被别的会话或人工编辑改动,下一步之前会提示先 relay_load 重读。
relay_handover / relay_persona 覆盖写入前,旧版会自动进入 history/,各保留最近 10 份。
记忆的来源与状态¶
每条长期记忆带来源档位与状态,检索默认只出 active 条目。
来源五档(可信度从高到低):owner(主人)> self(自己说过/答应的)> evidence > tool > inferred;老数据可为 unknown,不猜测。
- 作废:标
superseded等状态,不删行;用relay_recall时设includeSuperseded: true可查看历史 - 同键
subject:新记忆写入时旧条自动作废并指向新条,由规则处理而非模型推断 - 关联:
related最多 5 个 id,回忆命中时可带出关联条(最多 3 条) - 归档:
status: archived不再参与读档与默认检索,行仍保留;收工整理脚本~/.dsh/identity-memory/tools/consolidate.mjs仅归档符合条件的过程流水,owner/self永不归档
八个工具¶
Bot 通过 DSH 暴露的工具读写档案(名称以仓库文档为准):
relay_load— 重读人格卡、交接书与近期记忆relay_remember— 写入一条长期记忆(可选source、subject、related、validFrom/validTo、importance等)relay_recall— 关键词回忆,默认最多 20 条 activerelay_retract— 按内容片段定位并盖章作废relay_conflicts— 规则检测可能矛盾的记忆对;默认只报告,执行需显式参数且主人原话不会从此入口被盖relay_handover— 读/写交接书relay_persona— 读/更新人格卡relay_status— 记忆库统计、历史备份数、上下文压力
FAQ 中明确:不会自动把聊天摘要写入记忆;只有调用 relay_remember(或你/她主动维护文件)才会增长 facts.jsonl。
安装与装完检查¶
推荐从 GitHub 安装(无需 git clone):
dsh plugin add github:wumingzhiren-lab/dsh-identity-relay#main
也可在 DSH 插件管理器的市场/安装中填写 github:wumingzhiren-lab/dsh-identity-relay。本地开发可用 dsh plugin add <本目录绝对路径>。安装后 HMR 生效,一般无需重启。
装完后建议按 README「装完 60 秒」走一遍:
- 调用
relay_status,若人格卡/交接书仍是初始模板,会标 ⚠️ - 填写
persona.md或通过relay_persona写入;插件不会替你编人格 - 用
relay_handover写第一份交接书 - 用只有档案里才有的信息验读档;不通则
relay_load检查是否仍是空模板
可选配置¶
在 cordis.patch.yml 的 config 中可调整行为。常用项包括:
| 键 | 默认 | 说明 |
|---|---|---|
enabled |
true |
总开关 |
memoryDir |
~/.dsh/identity-memory |
记忆库路径 |
injectOnCreated / injectOnResume / injectOnSubagents |
true |
各类会话是否注入 |
warnRatio |
0.7 |
上下文占用比例预警(0.5–0.99,越界会被夹紧) |
recallLimit |
20 |
读档注入的记忆条数(1–100) |
injectSelect |
"relevance" |
读档挑记忆:relevance 或 recent |
maxFactsChars |
8000 |
记忆段字符预算;0 表示不设限 |
完整键表与边界说明见仓库 README「配置」一节(例如 maxFacts 有 100 条硬下限等防呆行为)。
适用场景与注意¶
适合需要跨会话人格连续、可审计的长期记忆(来源、作废、同键更新)的 DSH 智能体或 QQ Bot 等宿主场景。若只需要单次会话内的简单摘要,不必上全套档案模型。
使用时需接受几件事:记忆要人工或工具写入;开放世界的语义冲突不会全自动判死,需人终审或规则内的同键替换;插件零依赖、纯文本存储,便于备份与 diff,也意味你要自己管好 memoryDir 的备份与权限。
仓库 README 提供本地测试命令(在临时目录跑,不碰真实记忆库),例如 node test/smoke.mjs 及 step4–step18、benchmark、fuzz 等;文档记载 2026-11-03 实测 426/426 通过。当前 package.json 版本为 0.5.0,功能细节以 README / CHANGELOG 为准。
结尾¶
人格接力解决的不只是「能不能记住」,而是「记住的内容还算不算数」:磁盘上的档案、来源档位与盖章作废,让读档和回忆有凭据。DSH 生态主张「一切皆插件」;若要在 Harness 里做长期身份连续,可从官方安装命令装好记忆库,填人格卡与交接书,再用 relay_remember 把该留的东西写进 facts.jsonl。
- 目录页:https://www.skillhub.cn/plugins/wumingzhiren-lab/dsh-identity-relay
- GitHub:https://github.com/wumingzhiren-lab/dsh-identity-relay