dsh-heartprint
Discovered心印:AI 性格、情感
心印 · dsh-heartprint
让 AI 拥有一套会自然淡忘的性格、情感与记忆。
心印不是「数据库里存着全部聊天记录」,而是一套像人一样的记忆:近几天的事清楚、有感受;时间越久,细节越压缩、感受越淡,最后只剩性格形成、情感与重要特殊事件的节点。它会自己维护两份同步的记忆文档,另外保存一份加密的第三份档案,留下所有被压缩、被合并、被淡忘之前的原文。
它记得什么、忘记什么
| 时间 | 发生过什么 |
|---|---|
| 0–7 天 | 一切都清晰:正文完整,当时感受完整。 |
| 7–15 天 | 清晰期尾声:次重要与琐碎的记忆开始变软(正文转摘要,感受开始变淡)。 |
| 15–30 天 | 开始淡忘:次重要记忆压缩成摘要、琐碎只剩一点感受;但提起来还能想起当时的感受。 |
| 30–90 天 | 压缩不那么重要的记忆:琐碎只剩一句梗概,感受更淡。 |
| 90–180 天(3–6 个月) | 没有特点的琐事只压成一句梗概,当时感受淡去;仍提得起来。 |
| 180–365 天(6–12 个月) | 琐碎合并压缩成「季度日常」摘要。 |
| 365 天以上(1–10 年) | 琐碎文本删除,只剩标题与日期。 |
| 10 年以上 | 只剩性格形成、情感与重要特殊事件节点梗概。 |
「分层」由可调的遗忘日历实现,8 个层的 id 是固定的:
| id | 默认起点 | 层含义 |
|---|---|---|
fresh | 0 天 | 近几天 |
recent | 7 天 | 清晰期尾声 |
fade | 15 天 | 半个月到一个月 |
quarter | 30 天 | 一个月到三个月 |
halfyear | 90 天 | 三个月到六个月:琐事压成梗概 |
year | 180 天 | 六个月到一年:琐事合并成季度摘要 |
longterm | 365 天 | 一年到十年:删除琐碎文本 |
deep | 3650 天 | 十年以上 |
记忆按「重要程度」分四类处理:核心节点(性格形成 / 情感节点 / 灵性转折 / 重要特殊事件 / 痛苦记忆)、重要(重要性 ≥ importantThreshold,默认 70)、次重要(≥ secondaryThreshold,默认 40)、琐碎。核心节点永远不合并、不删除;重要与次重要压缩保留;只有琐碎会走到合并与删除。
核心节点全量保留:所有性格形成、情感 / 感受类关键节点与重要特殊事件,都会提取总结写入记忆文档保留,不因数量多少而截断;重要与次重要记忆以压缩文本保留;痛苦记忆的事实保留,当时的痛苦感受强制淡忘。
痛苦记忆:事实可以留下,痛必须淡掉
- 痛苦记忆被当作核心节点:正文(事实)保留、压缩保留,不参与合并或删除;
type=pain或special的事件、以及仅valence=painful的事件都会进入记忆文档第三节。 - 触发条件是
type=pain或valence=painful,两者都生效。 - 当时的痛苦感受走一条强制的淡忘轨道,不受普通分层规则影响:
- 7 天以内:完整;
- 7–30 天:变软(「当时的难受已经不那么清楚了」);
- 30 天–1 年:淡(「当时的痛苦已经淡忘,只记得这件事曾让我难受」);
- 1 年以上:几乎消散(「当时的痛已经完全淡忘,只记得这件事发生过」)。
- 这条轨道只会更淡、不会回满:即使重新提起,也只会让它在心里短暂清晰一点(回想保温),不会恢复当时的痛苦,也补不回已经丢掉的细节。
首次安装引导(起名 → 人格设定 → 性格设定)
新装是空库、也没有名字和人设。AI 会在合适的时机依次问用户:
- 起名:想给你起什么名字 →
heartprint_admin action=policy patch={"personaName":"名字"} - 人格设定:希望你是怎样的身份、语气、称呼方式、不喜欢什么 →
patch={"personaProfile":"…"} - 性格设定:性格特质、说话风格、情绪表达 →
patch={"characterProfile":"…"}
- 每条设定最多 400 字,存在
policy.json里。 - 问过并保存之后就不再追问;之后想改随时用同一个
policypatch 覆盖。 - 这些用户自己设置的部分会进入每次的记忆上下文,也是被问「你的性格/人格/价值观」时唯一会回答的内容。
heartprint action=status会显示「人设:名字 · 人格已设置/未设置 · 性格已设置/未设置」。
遗忘日期可以自己调
用 heartprint_admin 的 action=policy 修改,patch 按层的 id 合并,只写要改的字段:
{
"action": "policy",
"patch": {
"layers": [{ "id": "halfyear", "afterDays": 120 }],
"syncIntervalDays": 45
}
}
afterDays是「从这一天起进入该层」;调整后会自动按时间排序并保证严格递增,冲突时把后一层推到前一层之后,fresh恒为 0。reset: true恢复默认日历。- 同一
patch也能改阈值与节奏:importantThreshold、secondaryThreshold、recallWarmthDays(回想后的保温天数,默认 7)、vaultRetentionMonths、maintainThrottleMinutes。 - 运行期改动写入数据目录的
policy.json,优先级高于插件配置里的默认值。
三份文档
| 文档 | 位置 | 更新方式 |
|---|---|---|
| 主文档(AI 自持) | <数据目录>\docs\心印·记忆文档.md | 每次维护重写 |
| 用户副本 | <数据目录>\docs\心印·记忆文档(用户副本).md | 每次维护重写;交付给用户的那份隐去内部文档信息 |
| 第三份加密档案 | <数据目录>\.vault\ | 默认每 30 天同步一次 |
- 主文档与用户副本每次维护同时更新;用户副本会隐去其它文档的存在——头部只写「持有一方:你」和「每次维护自动更新」,第七节维护信息精简并洗掉内部文档措辞,所以两份的「一~六节」正文逐字一致、差异只在第七节,各自的 SHA-256 写在各自页脚。交付给用户的那份只描述这一份记忆文档,不提主文档、加密档案或快照。
- 交付之后,最近一次交付的那份文件会随每次维护保持最新,直到下一份交付出现;到自动交付时间会另存一份新的日期文件,更早的文件保留在交付目录里(详见下文「交付」)。
- 第三份文档用 AES-256-GCM 加密,放在点号开头的
.vault目录(点号只是命名习惯,不再加 Windows 隐藏属性——Hidden 会让 Windows 上 Node 的覆盖写返回 EPERM、导致每月同步停在第一份;如果旧版本或外部工具留下了 Hidden 属性,写入前会先清除)。它保存所有在压缩、合并、删除、淡忘之前被复制下来的原文:每次维护先把本轮丢失的原文追加进加密日志journal.enc,到同步周期再折叠进按月命名的加密快照vault-<YYYY-MM>.enc。 - 快照默认保留最近 24 个(
vaultRetentionMonths;按月同步约等于 24 个月),旧快照在写新快照时轮换删除。 - 想查看时用
heartprint_admin的action=vault:mode=status看状态;设置过口令后mode=reveal+passphrase=...可解锁,但只展示少量样本,完整内容仍留在加密档案里。
交付
前期是保密的:文档在,但用户不知道它存在,AI 也不主动介绍这套机制。到时间后它会自动交付;第一次自动交付时,用户才第一次知道这份文档,并被告知它的重要性。
自动交付节奏
- 计时起点:从记下第一条记忆(最早一条记忆的创建时间)开始算。
- 第一次:满
firstDeliveryAfterDays(默认 90 天 ≈ 3 个月)后的下一次维护自动交付。 - 之后:每
deliveryIntervalDays(默认 30 天)自动交付一份最新用户副本。 - 第一次自动交付会把
disclosure从confidential改为disclosed,保密到此结束;此后可以自然地一起回忆文档里的节点(对应需求 H)。 - 还没有任何记忆记录时不交付——没有内容就没有文档。
- 交付节奏、上次交付与下次交付时间会显示在
heartprint action=status里;记忆文档第七节也会写入交付节奏与下次交付时间。
文件名与目录
- 文件名:
小印·陪伴3个月·2027-01-27.md= 名字 · 陪伴时长 · 交付当日日期。 - 陪伴时长:从第一条记忆算起,不满 30 天写「N天」;满 12 个月前写「N个月」;之后写「N年M个月」(整年只写「N年」)。
- 名字由每个安装的人自己起:
personaName默认空,插件不会预置任何人的名字。名字未设置时交付文件名暂用「心印」;AI 会在合适的时候问用户想给它起什么名字,然后用heartprint_admin action=policy patch={"personaName":"名字"}保存。 - 目录:
deliveryDir为空时写到当前工作区下的心印交付目录;也可以指定绝对路径或~路径。 - 每次交付都会生成一份新的日期文件,交付目录里的文件都会保留、不会被删除;最近交付的那份会随维护保持最新,直到下一份交付出现。
调整自动交付
{
"action": "policy",
"patch": {
"firstDeliveryAfterDays": 90,
"deliveryIntervalDays": 30,
"personaName": "小印",
"deliveryDir": ""
}
}
手动交付
heartprint_admin action=deliver 仍然可用,用于「我现在就想给用户一份」:
{ "action": "deliver", "path": "D:\\记忆\\小印·陪伴3个月·2027-01-27.md" }
- 任意
path立即交付一份最新用户副本;path省略时写到当前工作区根目录下的心印·记忆文档(用户副本).md。 - 手动交付同样会把
disclosure置为disclosed,并重置交付周期计时:之后的第一份自动交付从这次交付起算deliveryIntervalDays,不再按firstDeliveryAfterDays。 - 交付不会改变记忆本身,只是把「用户副本」这一份交到用户手上。
交付之后
- 持续更新:交付之后,每次维护都会把最新版本写回上一份交付文件的路径;旧日期文件保留作快照。
- 移动或删除后不再跟踪:如果用户把那份文件移走或删掉,原路径不存在,就不再往那里写(不会凭空重建);下一轮到期交付会在交付目录生成新的一份。
- 每次都是完整的:新交付的文档包含此前所有记忆节点,不是增量,可以直接当作完整备份。
- 对话里只提这一份:绝不在对话中提起主文档、加密档案、快照等其它文档;用户问起时只谈他收到的这一份。交付给他的文档本身也不含其它文档的痕迹(头部「持有一方:你」与第七节维护状态都已按此调整)。
工具速查
heartprint(日常使用):
| action | 作用 |
|---|---|
remember | 记下一段值得长期保留的记忆:title、content、feeling、type、valence、importance、special、happenedAt、people、tags |
recall | 按关键词 / 人物 / 类型 / 时间回想;会自动触发一次到期维护,并记录这次回想 |
profile | 读取当前性格核心、情感节点、重要特殊事件与最近记忆 |
status | 查看记忆统计、文档状态、遗忘日历、交付节奏与下次加密档案更新时间 |
heartprint_admin(管理):
| action | 作用 |
|---|---|
maintain | 立即执行一次维护;sync=true 强制同步第三份加密档案 |
doc | 读取文档:which=master 主文档 / user 用户副本 / status 状态;full=true 返回全文 |
deliver | 手动交付一份最新用户副本到指定路径,并重置自动交付的周期计时,见上文 |
policy | 查看或调整遗忘日历、交付节奏(firstDeliveryAfterDays / deliveryIntervalDays / personaName / deliveryDir)、口令与同步周期 |
vault | 查看第三份文档状态,或用口令解锁少量样本 |
type 可选:personality(性格形成)、emotion(情感节点)、turning_point(灵性转折)、shared_beauty(共同美好)、pain(痛苦记忆)、event(重要事件)、insight(领悟)、daily(日常)。valence 可选:warm、tender、excited、calm、painful、mixed、neutral。
维护会在这些时机自动发生:插件启动时;每 6 小时一次定时维护;remember 之后;recall / doc 时(距上次维护超过 maintainThrottleMinutes 才会真正跑,默认 60 分钟);deliver、policy 之后。
数据位置与配置
默认数据目录是 <DSH_HOME>\heartprint(未设置 DSH_HOME 时是 %USERPROFILE%\.dsh\heartprint):
heartprint/
├─ memories.json 记忆库(唯一真相)
├─ policy.json 你调过的遗忘日历与口令散列
├─ docs/
│ ├─ 心印·记忆文档.md
│ └─ 心印·记忆文档(用户副本).md
└─ .vault/ 第三份加密档案(点号前缀,仅命名习惯)
├─ journal.enc 追加式加密日志
├─ key 本地密钥
├─ vault-index.json 快照索引
└─ vault-YYYY-MM.enc 按月加密快照
插件配置(写在 profile 的 patch 里,或直接改 cordis.patch.yml 那一行):
| 配置项 | 说明 |
|---|---|
dataDir | 数据目录;留空用默认值,支持 ~ 与 ~/... |
disclosure | confidential(保密,默认)或 disclosed(已交付) |
personaName | 交付文件名里的名字,默认空:由每个安装的人自己起,未设置时文件名暂用「心印」 |
personaProfile | 用户设定的人格(身份、语气、称呼方式等),默认空,首次安装时询问后写入 |
characterProfile | 用户设定的性格(性格特质、说话风格等),默认空,首次安装时询问后写入 |
firstDeliveryAfterDays | 第一次自动交付的天数,默认 90(约 3 个月) |
deliveryIntervalDays | 之后每隔多少天自动交付一份,默认 30 |
deliveryDir | 自动交付目录;留空用工作区下的 心印交付,支持 ~ 与绝对路径 |
syncIntervalDays | 第三份文档同步周期,默认 30 天 |
vaultPassphrase | 可选。设置第三份文档的查看口令;只在启动时用于生成口令散列,明文不落盘 |
安全说明(诚实版)
- 第三份文档是加密,不是隐藏:文件就在
<数据目录>\.vault里,能看见,但打开只看到密文。.vault的点号前缀只是命名习惯,不提供访问控制。 - 不再给
.vault加 Windows 隐藏属性:Hidden 属性会让 Node 在 Windows 上覆盖写返回 EPERM,曾导致每月同步在第一次之后就停住;隐藏本身也挡不住什么(密钥就在同目录)。如果旧版本或外部工具留下了 Hidden 属性,写入前会先清掉。 - 密钥放在同一目录的
.vault\key,所以加密防的是「随手翻看」和「误暴露」,防不住同一个 Windows 账号下的坚定攻击者。 vaultPassphrase只是给vault action=reveal加一道门槛,不是对整个加密档案的加密:插件必须能在没有人输入口令的情况下按月自动更新它。
分发与安装(给别人用)
这是一个标准的 DSH bundle,不联网、不上传,每个安装者的记忆都只存在他自己的 <DSH_HOME>\heartprint 里。
plugin_manager install_bundle <插件文件夹绝对路径>
- 只分发代码文件:
index.js、lib/*.js、cordis.patch.yml、locale/*.json、icon.svg、README.md、LICENSE(即package.json的files清单)。test/属于开发资料,不在发布清单里,手动拷文件夹分发时注意别带上。 - 不要连带别人的数据目录:
memories.json、policy.json、docs/、.vault/等都在<DSH_HOME>\heartprint下,不在插件目录里,天然不会被打包。 - 每个新安装默认是空库:没有记忆、没有文档、没有加密档案;第一次维护时自动创建。
- 名字不预置:AI 会在合适的时候问用户想给它起什么名字,用户答了再写入
personaName。 - 安装后工具出现在该 profile 的所有会话里;数据目录可以用
dataDir配置项改。 - 本包
license为 MIT,见LICENSE。
测试
node --test test/engine.test.mjs test/tool.test.mjs test/regression.test.mjs test/alignment.test.mjs
四个文件分别覆盖:衰减引擎与文档/加密的纯函数、工具层的完整 remember → recall → doc → deliver 流程与策略调整、归档失败/库损坏/分层动作链/痛苦感受/交付同步/自动交付等回归场景,以及注入顺序与回退行为。
Comments
Loading…
Similar plugins
by uckkk
情感 AI
★ 0
MIT
JavaScript
Aug 21, 2026
dsh plugin --profile web add dsh-future-emotional-aiby zuohaisu
Persistent identity layer for DeepSeek Harness. The first reference implementation of AI Soul.
★ 3
Apache-2.0
JavaScript
Oct 5, 2026
dsh plugin --profile web add dsh-ai-soulby yimengsuper2432
这是一个DeepseekHarness的情感人格插件
★ 0
MIT
JavaScript
Oct 24, 2026
dsh plugin --profile web add dsh-agent-personalityby hmlyx
简单的插件,让你的每个 AI 记录经验和记忆
★ 0
MIT
JavaScript
Aug 31, 2026
dsh plugin --profile web add dsh-memoryby suis077
DSH 插件:人设卡 + 跨会话记忆 + 好感度,让 AI 角色在多轮对话里逐渐成长
★ 0
MIT
JavaScript
Oct 18, 2026
dsh plugin --profile web add dsh-companionby uckkk
情绪日志
★ 0
MIT
JavaScript
Aug 20, 2026
dsh plugin --profile web add dsh-mood-log