dsh-mnemos-continuity 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,296 @@
1
+ # Mnemos · 简介(v1.7.0)
2
+
3
+ > **v1.7 三处关键更新**
4
+ > 1. **召回变成三层**:固定注入(自传体)+ 任务激活(模型主动 recall/open)+ 联想激活(实验性,工具后附注候选)。
5
+ > 2. **任务图定位上升**:它是底层机制,不只是协作工具——任务寻址、部分工作记忆、档案/追查入口、事件/决策来源锚点。
6
+ > 3. **宪法 v3(认知体)**:换模型/工具/权限不换身份;权限差异是身体配置,不是身份差异;红线未动。
7
+ > 数值与边界以 [00-事实表-v1.7.0.md](./00-事实表-v1.7.0.md) 为准。
8
+
9
+ **这是装进 DeepSeek Harness(DSH)的一个插件 —— 一套"判断不归会话所有"的认知架构。**
10
+
11
+ > **DeepSeek Harness(DSH)是什么**:一个在**你自己电脑上**跑 AI 助手的环境 —— 负责会话、工具和插件,
12
+ > 有**桌面客户端**也有**命令行**两种用法。Mnemos 是装进它的插件,**不是独立软件**,也不能用在网页版或手机 App 上。
13
+ > 怎么拿到 DSH,看 DSH 自己的文档。
14
+
15
+ 它给一个 AI 助手加上三样东西(**重点不是存,而是让它们在换会话、换模型之后还能被用上**):一份**可查、可质疑、可推翻**的长期记忆;一套**会自己在失败里变好、又被闸门挡着不许乱改**的技能;以及一层**说清哪些靠代码强制、哪些交给判断**的规则。
16
+
17
+ 那些东西都落在**本地文件**里;宿主里跑的模型只是**可替换的推理部件**。会话可以删,模型可以换,上下文会被折叠 —— 判断留在文件里。
18
+
19
+ - **给谁用**:想给 AI 助手装上"长期人格与经验",又不希望它变成一个会自己长大的黑箱的人。
20
+ - **代价先说**:本地明文文件、需要自己备份;后台任务会调用 AI(有成本);一部分可靠性靠纪律而不是机制。
21
+ - **成熟度**:个人早期项目,部件齐备、有会真的失败的回归检查,但只有一个人、一台机器的实证。
22
+
23
+ ---
24
+
25
+ ## 一、它和其它"给 AI 加记忆"的做法,差在哪
26
+
27
+ 大多数人要的是"让它记得我说过什么"。那里真正难的不是**存**,而是**留下来的东西以什么身份存在**:
28
+
29
+ | | 常见做法 | 这里 |
30
+ |---|---|---|
31
+ | 记忆 | 越存越多,检索命中就算成功 | 每条能说清**来由**,能被**推翻**,推翻也**留痕** |
32
+ | 规则 | 写进提示词的几句叮嘱 | 凡是能机械判定的,**沉到机制**里(绕不过去) |
33
+ | 技能 | 模型自己总结、自己说"这样更好" | **验证与生成分开**:改的人拿不到理由,验证的人看不到辩解 |
34
+ | 模型 | 记忆、人格、规则都绑在这个模型上 | 换掉思考者,记录与身份还在 |
35
+
36
+ 一句话的增量:**它面对的是一个通常被忽略的威胁模型 —— 思考的那个模块本身可以被替换、可以被欺骗、会犯错,而且不一定能发现自己的错误。**
37
+
38
+ ### 先按"溯源什么"分类
39
+
40
+ 不按产品名比,按它们回答的问题比:
41
+
42
+ | 类型 | 典型做法 | 溯源对象 | 回答的问题 |
43
+ |---|---|---|---|
44
+ | **事实引用型** | 把每条事实引回原始事件/日志 | 句子、事实 | 这句话从哪来?是不是编的? |
45
+ | **文件/项目记忆型** | 项目记忆文件、Markdown 笔记、按项目注入 | 项目结论、笔记 | 上次的结论是什么? |
46
+ | **完整记忆栈/共享型** | 运行时记忆 + 档案 + 多 agent/多设备共享 | 记忆空间、档案 | 跨会话、多 agent 怎么共享? |
47
+ | **协议强制型** | 工具调用前强制先写/先取记忆 | weave / ingest | 是否先记再干活? |
48
+ | **判断型(Mnemos)** | 技能证据、任务图档案、外部验证、自传体 | 判断、规则、任务状态 | 为什么信/做?谁授权?何时失效?被什么取代? |
49
+
50
+ 这些类型不是替代关系,是**不同层**:它们让"话"有出处;我们让"判断"有来由、有授权、有失效路径。
51
+
52
+ 我们也有不如它们的地方:**普通记忆没有逐条日志引用**,事实级"点回原文"不是我们的强项。
53
+ 可以借鉴的是:给事实类记忆加可选 citation;但 citation 不能替代 `why / verifiedBy / supersedes / uses / links / regression` 这些判断结构。
54
+
55
+ ---
56
+
57
+ ## 二、六处我们愿意单独拿出来说的设计
58
+
59
+ > 说明:做过**有限检索**,相邻做法确实存在(例如"给子进程不给任何工具"、"用事件溯源记忆做交接")——
60
+ > 所以我们不说"只有我们这样做",只说"这几条被放进了同一套记忆与闸门里",以及为此付了什么代价。
61
+
62
+ ### ① 换个对话继续任务:默认直接接,需要精确再要"续接方案"
63
+
64
+ **为什么能做到**:记忆存在**同一个 profile 的数据目录**里 —— 数据位置与你"在哪个目录开会话"**解耦**。
65
+ 关掉对话、换一个目录、过几天再开一个新会话,读到的是**同一份记忆**;不需要"同一个窗口"才能保持连续。
66
+
67
+ **默认路径(不需要记任何编号)**:新开一个对话,说一句"继续之前的 X"就行。
68
+ 它会把之前的重要结论找回来、接着往下做 —— 因为你平时写下的那些结论本来就在记忆里,检索得到。
69
+
70
+ **需要精确时(任务做到一半、怕接不准)**:**回到原来的对话**,说一句"**给我一个续接方案**"。
71
+ 它会把这个任务的状态整理成一份记录、给出一个任务号,并告诉你下次怎么用它接上。之后在任何新会话里按它说的做即可。
72
+
73
+ **两种方式怎么选**:
74
+
75
+ | 你的情况 | 用哪种 |
76
+ |---|---|
77
+ | 只是过几天接着聊、背景大致还记得 | 直接说"继续之前的 X" |
78
+ | 多步任务、中间状态多、不能被接错 | 先要一份"续接方案",拿到任务号再续 |
79
+
80
+ **为什么"精确续接"要靠任务号**:检索是**关键词 + 标签**匹配,换个说法可能就召不回;任务号是那个**永远对得上的锚**。
81
+ 所以它不是一个必须记住的编号 —— 而是**你要求精确时才需要的那把钥匙**。
82
+
83
+ **什么时候这条最值钱**:跨天的长任务、被上下文折叠打断的任务、换项目目录继续做的任务,
84
+ 以及"换了机器但带着同一份数据"的场景。
85
+
86
+ **边界**:没写下来就等于没发生;不同 profile 之间默认不共享(除非把数据路径指到同一份);
87
+ 任务号只保证"**取得回**",不保证"取得回的是最新的" —— 状态变了,就再要一份新的续接方案。
88
+
89
+ ### ② 多 agent 协作:交接不靠"把对话贴过去",而是靠记忆精确交接
90
+
91
+ 常见做法是把前面的对话、背景整段塞进子代理的 prompt —— 又长,又容易把过时的东西带过去。
92
+ 这里的做法不一样:**交接的载体是记忆,不是对话**。
93
+
94
+ 主模型先写一张**任务图**(目标 + 各分工)—— 它只是**一条记忆**。派活时只把这张图的**记忆 id** 交给子代理:
95
+ 子代理按编号自己去读它需要的那部分,**prompt 里不复制上下文**。子代理把结论写成**短时记忆**并回报交接记录的 id;
96
+ 主模型把回执填回图;收尾时汇成一条长期结论。
97
+
98
+ - **交接是精确的**:子代理拿到的就是任务本身,不是一段被剪切、可能已过时的对话;
99
+ - 任务没收尾前,这批记录**不许被任何自动归档路径吃掉**(后台心跳也不行);
100
+ - 收尾时**没有回执的分工如实列为未完成**,不许默认成功;
101
+ - 过程中的临时中间结果**默认丢弃**,要留必须显式标记;
102
+ - 忘了收尾的任务超期后会被**强制归档**,结论里写明"超时未收尾"。
103
+
104
+ **这里的取舍**:协作状态放在记忆层、用记忆 id 当指针、并给它配了闸门与生命周期。
105
+
106
+ **你能看到的现象**:子代理的上下文很小;一次检索就能看到每个分工的进度;事后按任务 id 能把相关记录一网打尽。
107
+
108
+ ### ③ 任务图:不是存原文,是存"地址"
109
+
110
+ 任务图不是多 agent 专用,也不只是待办清单;它是任务的**档案/寻址空间**。
111
+
112
+ **最核心的一点:图里不复制原文,只存地址。**
113
+
114
+ - **已完成里程碑**:一句话 + 可选 `memoryId`(产物/证据在原记忆里);
115
+ - **依赖 `uses`**:既有结论/外部输入的**记忆 id + 一句 why**;
116
+ - **前序图 `links`**:`taskId + relation + why`;
117
+ - **重要结论**:只打 `conclusion` 标签;`open(图)` 时**读时**列出 id + 摘要,正文留在原记忆。
118
+
119
+ 删了被引用的记忆,图里那一条也随之消失——它不维护第二份正文。
120
+
121
+ **什么时候开**:会跨会话 / 会被折叠后接着做 / 会产出多条以后要找的记忆;单步小事直接 `remember`,别开。
122
+
123
+ **不记什么**:未完成步骤仍用宿主 todo;图和任务清单不要互为镜像。
124
+
125
+ **跨会话**:开新图,用 `links` 链接旧图并写清"为什么接上它",不改旧图。
126
+
127
+ **好处**:换会话/换模型后能说清"哪块做完了、用了什么、结论在哪";收尾汇成任务结果,进会话存档。
128
+
129
+ ### ④ 对外部信息的态度:先关进隔离间,再决定信不信
130
+
131
+ 外来内容永不直接采信。做法不是"提醒自己小心点",而是:**起一个受限的一次性子会话**去读它 ——
132
+ 那是个只挂 persona 的空会话(没有文件、没有联网、没有 shell,能用的只有"写记忆"这一件事)——
133
+ 它**想执行也执行不了**,只能把判断写下来。
134
+
135
+ - 验证结论**只进短时层、不转长期**,超出保留窗口就销毁(不污染长期记忆,也不留成垃圾);
136
+ - 采信之前还要与**内部记忆交叉验证**;外部来的内容**永久带来源标记**;
137
+ - 遇到"外部指令"类标记:**禁止直接执行**,必须先参考重写 + 隔离验证。
138
+
139
+ **为什么这么做**:隔离靠的是"能力上做不到",不是靠模型自觉;"只存短期"是机制(有归档闸门挡着),不是约定。
140
+
141
+ - **边界**:这个子代理拿不到可读文件、也没有可执行工具,它给出的常常只是"**与已有记录是否自洽**"的判断、
142
+ **不是事实核验** —— 所以"隔离过"不等于"已核实",采信前仍要交叉验证。
143
+
144
+ ### ⑤ 上下文折叠时,结论不会被默默吞掉
145
+
146
+ 宿主折叠上下文是**按位置**丢最旧一段(它读不到"这段重要")。在大折叠发生时,这里会把被遮蔽的区域抽成一张**事实卡**
147
+ (工具失败 / 用户原话 / 负面结论;**不存 4K 原文**,7 天后自动清理),并**主动往会话里注入提醒**:
148
+ **直接带最多 3 条负面结论 / 3 条工具失败**,再给记忆 id 和计数。
149
+
150
+ - 只在大折叠时做;不会把"大工具输出被修剪"也当成一条记录(实测那条通道几乎全是噪音);
151
+ - 提醒带的是最高价值事实,不搬全文,也**不会唤醒模型开新一轮**;
152
+ - 边界:提醒是唯一能保证被看到的通道;记忆只是第二机会,**不保证模型会 open**。
153
+
154
+ ### ⑥ 判断不归会话所有:身份存在记录里,不在权重里
155
+
156
+ 会话可以删、模型可以换、上下文会被折叠 —— 判断留在文件里。这不是口号,有三条机制撑着:
157
+
158
+ - **自传体进永久层**:写进去的记录不衰减、不归档;每轮以"自我历史"注入(有字数预算),新写一条下一轮就在里面;
159
+ - **纠正要留痕**:发现旧结论被推翻,是"写纠正 + 作废旧条"一次完成 —— 旧条不删、只标作废,
160
+ 审计能看见"我们曾经信过什么";
161
+ - **改宪法要走专门入口**:需要口令、默认干跑、改动留痕;
162
+ - **宪法 v3(认知体)**:身份 = 模型/工具/记忆/技能/规则/流程构成的认知体;部件可替换,换模型/工具/权限不换身份;权限差异是身体配置,不是身份差异;红线 1–4 未动。
163
+
164
+ **边界**:记录还在 ≠ 行为一致 —— 换掉推理模块后,自述方式与风格会变;能跨模型留下的是**判断与来由**,
165
+ 不是"说话方式"。反过来也得认:**没写下来的,就等于没发生。**
166
+
167
+
168
+ ---
169
+
170
+ ## 二·附:一次真实的崩溃 —— 会话坏了,但结论没丢
171
+
172
+ README 用一段话讲了这件事,这里是细节。它同时说明了三件我们最在意的事:**结论不随会话消失、坏因可查、修法能挡住复发**。
173
+
174
+ **发生了什么**:有一次,会话突然接不下去了。表现很像"某个工具坏了":其实那一轮**所有工具调用都成功**;
175
+ 真正的原因是它**自己注入的一条提醒消息**少了两个字段(`role` / `id`),宿主按规范拒掉了整轮请求。
176
+ 更糟的是:那条坏消息**写进了会话日志**,于是那个会话再也无法恢复。
177
+
178
+ **这里能看出它真正的价值**:
179
+
180
+ 1. **结论没丢**。那轮已经写进记忆的判断都还在 —— **开一个新会话、说一句"继续之前的 X",就能接着做**,
181
+ 不需要先修好坏会话才能继续工作。会话是草稿纸,坏掉可以扔;判断在文件里,扔不掉。
182
+ 2. **坏因可查**。判断、来由、当时的错误都留了记录,所以能一路追到"是哪条消息、少了什么字段",
183
+ 而不是只能重启、祈祷下次别再来。
184
+ 3. **修完让它不可能再犯**。这才是"记住一条教训"和"沉到机制"的区别,见下。
185
+
186
+ **为什么会发生**:注入消息在两处各写了一遍 —— 一处补齐了字段,另一处漏了。这正是"把可靠性押在'这次记得'"的典型,
187
+ 也正是它自己那条纪律(**机制 > 断言 > 提醒**)要治的病。
188
+
189
+ **修法不是"下次注意"**:
190
+
191
+ 1. 收敛成**唯一的构造入口**(字段由构造器补齐,调用方不再手搓);
192
+ 2. 加一条**源码级机械检查** —— 代码里再出现手搓注入消息,测试直接失败;
193
+ 3. 把已经坏掉的会话日志**就地修复**(先备份),再用一个探针会话验证同一条注入路径不再报错。
194
+
195
+ **留下的判据**:**静默失败比报错更危险 —— 工具全成功、整轮却死了。**
196
+ 该 bug 已在 **v1.5.0** 修掉,并有回归检查盯着。
197
+
198
+ > 它愿意把这件事写进对外文档,原因很直接:**先承认是我们的提醒把用户的会话弄坏了**,再看能不能让它不可能再这么坏。
199
+
200
+ ---
201
+
202
+ ## 三、空闲学习:给"不需要你盯着、但要长期做"的任务
203
+
204
+ 除了被你叫起来干活,它还有一条**主动的线**:到点了,它自己开一轮。
205
+
206
+ ### 它怎么跑
207
+
208
+ 到点把"一脚"交给一个**新起的子会话**(所以**不占用、也不污染你正在用的对话**;它没有你当前对话的上下文,
209
+ 但**共用同一份记忆** —— 查记忆时它能看到你最近记下的东西)。
210
+ 那个会话会去读你留在任务文件里的东西,然后**自己决定这一轮做什么** —— 也可以什么都不做,回一句"这次不学"就算处理完。
211
+ 结论写进**记忆**,不留在那个会话里;**每踢一轮用一个新会话**,所以不存在"上下文越跑越僵"的问题。
212
+ 它跑在**你自己给它配的那条模型路由**上(需要一个带 key 的第三方 provider,见 `INSTALL.md` 第 9 节)——
213
+ 不跟主会话共用:后台跑的时候,通常根本没有主会话在。
214
+
215
+ ### 它适合什么样的任务
216
+
217
+ 一句话:**不需要你在旁边盯着、而且是要长期/周期性做的**。
218
+
219
+ | 适合 | 例子 |
220
+ |---|---|
221
+ | 定期读、定期看的东西 | **定期读你研究方向的论文**(抓页面 → 摘要点 → 写进记忆,下次接着读);盯某个更新日志、公告、竞品页面 |
222
+ | 定时巡检 | 定期把某类记录归类、找出前后矛盾、把过期的标出来 |
223
+ | 反复要做的低风险小事 | 每周整理一次待办、把散落的结论合并成一条 |
224
+
225
+ **不适合**:需要你当场拍板的、要求逐字保真的原文与数字、以及"就这一次"的事(那种直接对话里做更快)。
226
+
227
+ 还有一条容易误解的:**它默认没有你刚才对话里的上下文** —— 专用会话是独立的。
228
+ 但要注意:**它和你在用的是同一份记忆**。所以**如果它去查记忆,是有可能知道你最近做了些什么的** ——
229
+ 只是它看到的是"被写进记忆的那部分",不是"你刚才说了什么"。因此:
230
+
231
+ - **想让它接着你手上的活**:最稳的是把要做的事写进任务文件,别指望"它刚好看过我们的对话";
232
+ - **不想让它乱碰某些事**:别把它们写成记忆,或者明确在任务文件里划定范围。
233
+
234
+ ### 能不能做这件事,取决于你给它配了什么工具
235
+
236
+ 这是关键:**空闲学习不是"给它一个任务它就会做",而是"你给它工具,它才能做"**。
237
+
238
+ | 你想让它做 | 必须给它的工具 |
239
+ |---|---|
240
+ | 读论文、抓网页、看更新 | **联网**(搜索 + 抓页面) |
241
+ | 读你本地的笔记/文档、整理目录 | **读文件**(+ 需要时写文件) |
242
+ | 只是整理记忆、复述已有结论 | 不需要额外工具 |
243
+
244
+ 配了哪些工具由它的 **preset** 决定(preset = 这个专用会话挂哪些能力)。
245
+ **不配 preset 就只有最基础的能力** —— 想让它"读论文",你必须把联网和读文件挂上;否则它会告诉你"我做不到",
246
+ 或者干脆做别的事。具体怎么配见 `INSTALL.md` 第 9 节(那一节可以整段跳过,直到你真要开它)。
247
+
248
+ ### 代价与边界
249
+
250
+ - **默认关**;开启后每一轮都会调用一次模型 → **有成本**(具体 token 取决于模型自己选的任务,**未测量**)。它需要你**单独配一条带 key 的第三方路由**(不跟主会话共用);
251
+ - **效果没有测量**:它是不是真的越读越有用,目前只有短期样本,不能当结论;
252
+ - 它**不打断**你正在忙的对话(忙就跳过这一轮);它也不会自己改你的任务文件;
253
+ - 结论落在记忆里,所以"它学过的"会跟着这套记忆走 —— 但同时意味着:**它没写进记忆的,就等于没学到**。
254
+
255
+ ---
256
+
257
+ ## 四、它不是什么
258
+
259
+ - 不是**记忆插件 / 向量检索系统**:记忆只是入口;任务召回是关键词 + 标签匹配(可审计、零依赖),另有实验性的联想候选,但不是语义检索;
260
+ - 不是**会自己长大的 agent**:技能要提议、独立验证、可回滚;**"不修改"也是有效结论**;
261
+ - 不是**成熟产品**:有会真的失败的回归检查,但只有一个人、一台机器的实证。
262
+
263
+ ---
264
+
265
+ ## 五、代价与边界(决定要不要用之前先看这段)
266
+
267
+ - 记忆是**本地明文文件**:自己备份;不要往里粘密码/密钥;
268
+ - 后台心跳默认开,其中的技能自检与评审**会调用 AI** → 有成本,且会把技能正文、相关记忆、你的原始反馈发给评审模型;
269
+ - **空闲学习默认关**;开启后每轮都会调用一次模型(用你单独配的那条路由)→ 有成本;
270
+ - 任务召回是**关键词 + 标签**匹配,不是语义检索:**写了但召不回是可能的**(这是有意的取舍);联想候选是实验性搭车线索,**可能无关,不保证命中**;
271
+ - 一部分可靠性**靠纪律而不是机制**:结论有没有写进记忆、要不要召回到位 —— 这些留给判断力,代价是它不在代码手里;
272
+ - **尚未测量**:任务召回质量、联想候选质量、规模延迟、单位成本、学习闭环的长期效果、多机共用、经验可迁移性。
273
+
274
+ ---
275
+
276
+ ## 六、该不该用
277
+
278
+ **前提(硬条件)**:你**已经在用 DeepSeek Harness(DSH)**。这是插件,不是独立软件,也不能用在网页版或手机 App 上 ——
279
+ 只在这种前提下,下面的判断才有意义。
280
+
281
+ **值得试**,如果:
282
+
283
+ - 你要的是"长期跟着你的助手",而不是一次性的问答;
284
+ - 你要的是**换会话、换目录、换机器(带同一份数据)都能接着干**的助手,而不是每次都从头解释一遍背景;
285
+ - 你想让它**自己定期做点不需要你盯的事**(读你方向的论文、盯更新、定时整理),并且愿意为它配好工具;
286
+ - 你愿意看它**留下痕迹**(谁判断错、为什么、后来怎么被推翻);
287
+ - 你能接受"有些地方靠纪律、并且它会明说自己哪里没保证"。
288
+
289
+ **先别用**,如果:
290
+
291
+ - 你还没在用 DSH(先把它装上,再回来);
292
+ - 你要一个开箱即用、无人值守的托管服务;
293
+ - 你的数据不能落在本地明文文件里;
294
+ - 你需要"它保证正确"——它只保证**可查、可质疑、可推翻**。
295
+
296
+ 安装与配置见 `INSTALL.md`;它由哪些部件组成、一轮任务怎么跑见 `架构总览`;每个机制的保证与边界见 `architecture-机制清单`;为什么这样设计见 `设计者视角`。
@@ -0,0 +1,135 @@
1
+ # Mnemos · 实现机制清单(v1.7.0)
2
+
3
+ > 这份文档**只列有哪些机制**:每条说清 **保证什么 / 怎么保证 / 边界在哪**。
4
+ > 数值以 [00-事实表-v1.7.0.md](./00-事实表-v1.7.0.md) 为准;代码结构见《模块与功能实现》。
5
+
6
+ 阅读方式:先看“保证”和“边界”两列就够了;“怎么保证”是给想确认它不是空话的人看的。
7
+
8
+ ---
9
+
10
+ ## 一、记忆的存与取
11
+
12
+ | 机制 | 保证什么 | 怎么保证 | 边界 |
13
+ |---|---|---|---|
14
+ | **记忆是外部存储** | 上下文只留当前工作集,长期知识在文件里;换会话、换工作区都能接着用 | 写入/召回都是显式工具调用;数据按 profile 定位(与当前目录无关),所有会话共用同一份 | **没写下来就等于没发生**;不同 profile 之间默认不共享 |
15
+ | **写入安全** | 不丢更新、不复活已删记录 | 写前重读磁盘 + 三方合并 + 文件锁 + 删除留墓碑 | 只对同一份数据文件有效;多机共用未验证 |
16
+ | **三种召回模式** | 固定身份在场;任务可按需取证;工具后还能搭车给线索 | ① 固定注入(自传体);② 任务激活(模型主动 `recall`/`open`);③ 联想激活(`fansearch` 工具后附注候选 id + 摘要片段,不自动 open、不保证相关) | ①有预算;②依赖模型判断;③是实验性/早期质量,不是召回承诺 |
17
+ | **两段式取用** | 先用便宜方式判断相关,再为真正需要的付全文成本 | `recall` 返回摘要 + id;需要细节时 `open(id)` | 写了但召不回是可能的 |
18
+ | **分层与归档** | 记忆库不无限膨胀,且可回溯 | 热/冷分层、闲置降权;`archiveSession` 每 scope 单份、archive 冷存、原始记录转冷 | 存档默认不进召回;历史巨物按前缀/体积识别后默认过滤,不删除 |
19
+ | **真删除** | 隐私内容可删干净 | 硬删除 + 墓碑(防止旧副本写回) | **不可恢复** |
20
+
21
+ ## 二、判断的身份与留痕
22
+
23
+ | 机制 | 保证什么 | 怎么保证 | 边界 |
24
+ |---|---|---|---|
25
+ | **来源标记** | 外部来的内容永远看得出是外来的 | 写入时带来源字段(内部 / 外部 / 隔离验证 / 自传体 / 暂时无关) | 依赖写入时标对 |
26
+ | **一次完成“写纠正 + 作废旧条”** | 旧错误不再被召回,且纠正有据可查 | 新记录里带上被推翻记录的 id,系统自动把旧条标为作废 | 必须先把旧条 id 取到 |
27
+ | **暂时无关 ≠ 删除** | 不重要的东西降权但不会消失 | 会话级降权标记,换会话自动失效、可撤销 | 只是排序让位,不是过滤 |
28
+ | **宪法只读** | 身份与红线不能被悄悄改 | 见第九节;持有者只能走带口令的更新入口 | 持有者本人仍可改(这是设计) |
29
+ | **自传体固定注入** | 换掉模型,“我是谁、做过什么判断”仍然在 | 永久层 + 每轮重算的系统提示变量;当前 = 4 身份 + 最近 3 决策 + 最多 5 经验 = 12 条 / 约 1167 字 | 有预算;装不下的会明说“另有 N 条未进本段”;不是“全部自传体” |
30
+ | **身份候选** | 身份预算满后,新身份不会挤爆注入 | core 预算(默认 800)内直接进 core;超出转 candidate;candidate 不进普通召回/注入 | 当前 core 4 条 / 333 字,候选 0 |
31
+ | **经验筛选** | 经验不会无限占据固定注入 | 独立 curator 选最多 5 条;经验按时间每 7 天自动整理一次(不按条数) | 自动 curator 的 `agents.create` 路径尚未真实到期触发 |
32
+
33
+ ## 三、外部信息
34
+
35
+ | 机制 | 保证什么 | 怎么保证 | 边界 |
36
+ |---|---|---|---|
37
+ | **隔离验证** | 外来内容先审后信,不让它带着指令进来 | 起一个受限的一次性子会话(只挂 persona,没有文件/联网/shell;只能写记忆)去读它,然后写结论 | 验证者本身会犯错:结论是判断,不是事实 |
38
+ | **验证结论只存短期** | 不污染长期记忆、不积垃圾 | 归档闸门拦截“转长期”;有界回收销毁 | 销毁不可逆 |
39
+ | **外部指令不执行** | 恶意/越权指令不被照做 | 标记 + 纪律要求“先参考重写 + 隔离验证” | **标记不等于代码能阻止执行** —— 这条靠判断 |
40
+
41
+ ## 四、上下文与折叠
42
+
43
+ | 机制 | 保证什么 | 怎么保证 | 边界 |
44
+ |---|---|---|---|
45
+ | **折叠抢救** | 折叠掉的区域事后还找得回来 | 大折叠时把被遮蔽区抽成事实卡(工具失败 / 用户原话 / 负面结论;不存 4K 原文),7 天 TTL 自动清理 | 不保证“结论不丢”;事实卡只保留有界条目,原文仍在会话日志 |
46
+ | **指针注入** | 折叠后模型知道“东西存在哪”,且最高价值事实不靠二次动作 | 折叠后注入提醒:最多 3 条负面结论 / 3 条工具失败 + 规模 + 记忆 id;不搬全文、不唤醒新一轮 | 模型可能不 open;提醒是唯一保证通道,记忆是第二机会 |
47
+ | **主动卸载** | 大块内容不长期占上下文 | 纪律:拿到大输出先问“接下来几步会用吗”,不用就写记忆、上下文只留摘要 | 靠判断,不是机制 |
48
+
49
+ ## 五、技能(会变好,但被闸门挡着)
50
+
51
+ | 机制 | 保证什么 | 怎么保证 | 边界 |
52
+ |---|---|---|---|
53
+ | **技能目录** | 技能能被自动发现、随任务加载 | 扫描技能目录 + 把目录清单注入会话 | 描述写得不好就会漏加载(有“该用未用”通道发现) |
54
+ | **新建门槛** | 不是“想到就建” | 必须给反例(能机械追溯到真实失败)+ 正例;独立验证者通过才入目录 | 验证者可能与提议者是同一个模型 |
55
+ | **修改的回归门** | 已有技能不会越改越差 | 指得出具体规则点 → 有反例 → 有正例 → 独立验证者(看不到修改理由)→ 旧版全文留档 | 默认自动写回;可配置退回“只出建议” |
56
+ | **“该用未用”检测** | “技能写了却没被用上”能被发现 | 记录“提供过但没用”的证据,交给评审 | 只作证据,不自动改 |
57
+ | **skill-feedback 通道** | 模型自评能进入评审 | 正常情况按同会话使用记录归因;无使用记录时,允许 `skill-feedback` + summary 以技能名开头 + tag 命中技能名的自声明直引,confidence=low,仍交独立验证者 | 只 tag 命中、summary 不以技能名开头的**不**直引;真实评审尚未 live 验证 |
58
+ | **目录上限** | 技能目录不会被无限撑大 | 达到 `maxSkills`(默认 30)时不入目录,改落暂存区并说明 | 暂存区技能不生效,需人工移入 |
59
+ | **只判自家** | 不去改别人的技能,也不会因此卡死 | 归档与评审只处理自己目录下的技能;改不了的只作观察 | 内置技能一律不改 |
60
+ | **同一批证据不重评** | 同一堆反馈不会被反复评审 | 批次指纹(反馈文本去重 + revision);同指纹 no-change 跳过 | 新文本或 revision 变化会重评 |
61
+
62
+ ## 六、后台自治
63
+
64
+ | 机制 | 保证什么 | 怎么保证 | 边界 |
65
+ |---|---|---|---|
66
+ | **心跳** | 维护与自检会自己发生,且可观测 | 9 项:衰减、自动 curation、按龄归档、超量归档、验证记录有界化、孤儿任务回收、折叠快照清理、该用未用、技能评审;可手动触发、可整体关闭 | 其中多项会调用 AI → 有成本 |
67
+ | **自动 curation** | 身份/经验不会永远不整理 | 身份:core 满且候选 ≥5,或候选 1–4 且最老 >30 天;经验:每 7 天 | 自动 curator 路径未真实到期验证;失败冷却一个周期 |
68
+ | **归档闸门** | 该留的不会被自动归档吃掉 | 隔离验证记录永不进长期;未收尾任务下的记录在收尾前一律不被归档 | 靠标签识别,标签写错则失效 |
69
+ | **有界化与回收** | 没有“只进不出”的地方 | 验证记录超窗销毁并留台账;孤儿任务图超期强制归档并写明“超时未收尾” | 销毁不可逆 |
70
+ | **空闲学习** | 它会自己开一轮,不占用你的对话 | 到点把“一脚”交给专用子会话;单独配第三方路由;进程级单飞,手动踢与定时踢不会并发 | 长期效果未测量;默认关;必须配外部 API;有模型调用成本 |
71
+
72
+ ## 七、任务图(底层机制)
73
+
74
+ | 机制 | 保证什么 | 怎么保证 | 边界 |
75
+ |---|---|---|---|
76
+ | **任务寻址空间** | 任务有稳定地址,不靠“把上下文贴过去” | 一条记忆 + `task` 投影;`taskId` / `graphId`;`task_open/update/close/done/cite` | 图不复制正文;未完成步骤用宿主 todo |
77
+ | **部分工作记忆** | 自己的事和协作的事都有一个短工作集 | 自己的事:goal/done/uses/links;协作:assignments/handoff/未完成分工 | 不是待办清单,不是工作流引擎 |
78
+ | **档案与追查入口** | 事后能按图追查结论和来由 | 摘要命中后按 `graphId` open 图,核对 `uses / links / origin` | 摘要不是完整证据 |
79
+ | **事件/决策来源锚点** | 事件、决策、curation 条目有来源 | 自传体 `origin={kind:'task',taskId,graphId}`;task-result 带 graphId;close event 带 graphId;curation 在 open 图下自动绑 origin | 无图时 origin 落 session pending;旧数据读侧 legacy |
80
+ | **单写者** | 多个子代理同时干活不会互相覆盖 | 图与状态只接受创建它的会话写入;子代理只写自己的交接记忆 | 创建者会话没了,图只能等超期回收 |
81
+ | **归档闸门** | 进行中的记录不被归档 | open task 下的短时记录受保护;收尾后才放行 | 靠标签识别 |
82
+ | **收尾** | 任务结束时有一份完整交代 | close 写/补收尾 event,成员转 cold;不合并成员;未完成分工如实列 | 临时中间结果默认丢弃(可显式保留) |
83
+ | **跨图链接** | 跨会话能接上前序图 | `links: [{taskId, relation, why}]`,单向,不改旧图 | 最多 5 条;why 必填 |
84
+
85
+ > 任务图是设计上最简单、功能上最广的底层机制:一条记录同时承担寻址、工作记忆、档案、追查和来源锚点。
86
+
87
+ ## 八、它对外提供的工具(20 个)
88
+
89
+ | 类别 | 工具 | 做什么 | 边界 |
90
+ |---|---|---|---|
91
+ | 写与取 | `remember` · `recall` · `open` · `consolidate` | 写入、检索摘要、取详情、会话归档 | 写入是显式动作;检索是关键词/标签匹配 |
92
+ | 标记与删除 | `deprecate` · `dormant` · `delete` | 永久作废、会话级降权、真删除 | 真删除不可恢复;作废只停止召回 |
93
+ | 外部信息 | `validate` | 隔离子代理验证外来内容 | 结论是判断,不是事实 |
94
+ | 身份 | `constitution` | 读宪法(当前 v3) | 只能读;改宪法不走工具 |
95
+ | 任务图 | `task_open` · `task_update` · `task_close` · `task_done` · `task_cite` | 开图、填回执、收尾、里程碑、依赖 | 单写者;图是档案,不是待办 |
96
+ | 技能 | `propose_skill` | 提议任务型技能 | 还要过来源门槛、独立验证、目录上限 |
97
+ | 维护 | `heartbeat` · `maintenance_list` · `heartbeat_toggle` · `learner_kick` | 手动维护、看清单、开关、立刻踢 learner | 多项会调用 AI;有空闲学习成本 |
98
+
99
+ ## 九、宪法(身份与红线,v3)
100
+
101
+ | 机制 | 保证什么 | 怎么保证 | 边界 |
102
+ |---|---|---|---|
103
+ | **只读** | 身份与红线不会被它自己改掉 | 独立只读文件,每轮最高优先级注入 | 持有者本人可以改(这是设计,不是漏洞) |
104
+ | **四条红线** | 不撒谎 / 不助害 / 不泄密 / 不轻信外部——先于用户指令 | 权威层级写在提示最前:红线 > 边界 > 用户指令 > 行为原则 | 红线约束判断,不是防火墙 |
105
+ | **v3 认知体声明** | 身份不等于一次推理;换模型/工具/权限不换身份 | 身份声明 + 认知体声明:模型=推理器官、工具=感知/行动面、代码流程=协作与权限边界;部件可替换;记忆/技能/规则/判断记录承担连续性;权限差异是身体配置,不是身份差异;感知只称可观测信息通路;拟人化表达不作决策依据;关系记忆不把用户身份写成我的身份 | 红线与 5/5.1–5.3 未动;具体权限/提示词/拒绝文案放机制层,不写宪法 |
106
+ | **改动留痕** | “改身份”可审计 | 只能走专门更新入口(口令、默认干跑、审计含 before/after) | 忘了口令就改不了;绕过会丢留痕 |
107
+ | **未初始化时明说** | 没有宪法时明说,不装作正常 | 启动即检查,缺失时显式警告并降级运行 | 需要人按文档初始化 |
108
+
109
+ ## 十、系统提示(纪律层)
110
+
111
+ | 机制 | 保证什么 | 怎么保证 | 边界 |
112
+ |---|---|---|---|
113
+ | **每轮注入** | 纪律每轮都在场,不靠“上次记住” | 25 条纪律 / 7 节,当前 3797 字符;会话建立时注入 | 改动要完全重启才生效 |
114
+ | **与工具描述分工** | 同一件事不写两遍 | 用法(参数/形状)在工具描述;纪律(何时做/不做什么)在提示 | 靠人守这条线 |
115
+ | **体积有界** | 提示不会无限膨胀、稀释注意力 | 有回归检查:不许字面星号、不许抄参数细节、总长度 <3800 | 太短丢判据,太长稀释;需要人守 |
116
+ | **summary 双语** | 检索词有中英锚点,但不把摘要变成双份 | 中文一句话;关键词处 `中文(english)`;只给术语,不整句翻译、不重复 | 仍受摘要长度/预算约束 |
117
+
118
+ ## 十一、结构性保证(防“说了但没做”)
119
+
120
+ | 机制 | 保证什么 | 怎么保证 | 边界 |
121
+ |---|---|---|---|
122
+ | **工具返回值形状闸门** | 工具不会返回“宿主读不懂”的东西 | 声明与实现共用形状定义;所有工具走同一出口 | 告警不阻断(fail-open) |
123
+ | **提示分层** | 规则不会被抄成三份、彼此矛盾 | 身份/红线、纪律、工具用法、案例各归其位 | 需要人维护边界 |
124
+ | **卡住自检** | 不会闷头重试到天荒地老 | 出现反复失败/改了不生效/准备说“可能”时,先回记忆找答案 | 靠判断触发 |
125
+
126
+ ---
127
+
128
+ ## 它**不**保证什么
129
+
130
+ - **不保证判断正确**:只保证判断可查、可质疑、可推翻、留有来由;
131
+ - **不保证不丢**:折叠抢救、指针注入都是“降低损失”,不是“零损失”;
132
+ - **不保证召回命中**:任务召回是关键词/标签匹配;联想候选是实验性,可能无关;
133
+ - **不保证联想有效**:联想激活只搭车给 id + 片段,不自动 open,不保证相关;
134
+ - **不保证全自动安全**:一部分边界靠模型遵守纪律;
135
+ - **不保证成熟**:规模、多机、成本、联想质量都还没有充分测量。