1 目标机制的定义
本报告把「宿主侧主动联想注入」严格定义为:
记忆层位于模型和 Agent loop 外部;持续消费可观测的运行时上下文;无需模型显式调用记忆工具即可检索潜在相关记忆;并在下一次模型请求形成之前,将受控的记忆包放入该请求。
目标数据流如下:
动作或上下文事件
→ ContextObserver(持续观察)
→ 滑动窗口表示
→ 关联检索
→ InjectionBroker(预算 / 来源 / 生命周期)
→ 下一次模型请求
这个定义排除了三种常见的近似物:它不是「提供一个记忆工具等模型来调」,不是「每轮结束后自动保存」,也不是「把全部历史塞进系统提示词」。三者的共同点是:触发时机不由上下文决定。
2 三种容易混淆的能力
| 能力 | 触发者 | 是否属于完整宿主侧主动能力 | 说明 |
|---|---|---|---|
模型调用 memory_search | 模型或 Agent | 否 | 记忆层提供工具,但触发时机由模型决定 |
| 每轮结束后自动保存或召回 | SDK 或 Agent 框架 | 部分属于 | 可能自动化,但不一定观察运行中的上下文,也不一定主动注入 |
| 宿主观察上下文并在下一请求前注入 | 宿主中间件 | 是 | 本报告的目标机制 |
这三者的差别不是实现细节,而是判定口径。如果一个问题问的是「有没有记忆功能」,三者都算;如果问的是「记忆会不会在没有被要求时出现」,只有第三个算。
3 已发出请求的物理边界
模型请求发出后,宿主通常不能原地修改模型已经使用的隐藏状态。因此主动记忆应按介入时机分级:
| 级别 | 介入点 | 可行性 |
|---|---|---|
| 一级 | 下一步注入:在 pre-step 或下一次模型调用边界生成记忆包 | 适合默认实现 |
| 二级 | 工具结果后注入:工具返回成功、错误或新状态后重新计算上下文 | 适合默认实现 |
| 三级 | 流式中断并续写:高置信度时取消当前生成,带记忆重新发起请求 | 仅作高阈值实验能力 |
前两级适合默认实现。第三级会牵涉重复工具调用、已展示文本无法撤回、额外 Token 成本、KV 缓存不可恢复与副作用重放风险——它不是一个「更强的版本」,而是一个风险性质完全不同的操作。
这条边界还有一个正面推论:正因为注入只作用于下一次请求,提示词前缀可以保持字节级稳定,从而不对上游的前缀缓存造成破坏。约束在这里变成了优势。
4 相关理论与学术工作
本报告系统梳理了该方向的理论谱系,逐项对照其与目标机制的差异:
| 工作 | 贡献 | 与目标机制的差异 |
|---|---|---|
| CoALA | 认知类型的基础骨架(工作 / 情景 / 语义 / 程序性) | 给出分类学,不规定运行时边界 |
| Generative Agents | 联想召回与反思的经典原型 | 召回由 Agent 自身流程驱动 |
| MemoryBank | 衰减、强化与长期巩固 | 聚焦存储策略,不涉及注入时机 |
| MemGPT / Letta | 上下文分页与外部记忆 | 分页由模型主动请求触发 |
| Reflexion | 结果驱动的情景经验 | 作用于任务重试循环,非请求边界 |
| A-MEM | 动态关联记忆图 | 图结构服务于检索质量,非注入决策 |
| MemOS / MIRIX | 系统化控制面 | 提供记忆操作系统抽象,触发仍偏显式 |
| LongMem / HippoRAG | 关联检索与多跳 | 检索方法层,不含宿主侧观察 |
| Voyager | 程序技能库 | 技能由 Agent 主动查询与写入 |
结论是:这些工作各自解决了记忆的一个重要侧面,但「由谁决定此刻该不该想起」这个问题大多被留给了模型。这正是本报告要研究的边界。
5 目标架构
5.1 正交的记忆维度
目标架构把记忆按两个正交轴组织:类型(规则 / 笔记 / 日志 / 反思 / 技能 / 日历 / 画像)与时效(当前会话 / 近期 / 长期)。两轴交叉决定每个存储格子的写入规则、检索权重与生命周期,避免了「所有记忆一视同仁」导致的信噪比塌陷。
5.2 上下文观察的片段
观察器消费的上下文片段是有明确边界的:用户消息、工具调用与结果、可见的助手输出、运行时事件、以及(在可获取时)推理轨迹。这里有一条纪律——可见的思维链不等于完整内部状态;对闭源模型,必须提供统一的退化方案,而不是假设能拿到全部信号。
5.3 记忆包
注入单元被定义为有预算、有来源、有生命周期的记忆包:
- 预算:每次注入有明确的字符上限,超出时按优先级截断,而不是无界追加;
- 来源:每条注入都携带它来自哪个文件、哪一行、哪次写入;
- 生命周期:注入有生效范围与撤销路径,可被后续判断推翻。
5.4 关联激活与认知状态分离
检索分数(像不像)与激活决策(该不该)被显式分离为两个阶段。这一分离在后来成为系统最重要的设计决定之一——它使得「召回质量」与「打扰控制」可以独立调优、独立评测。相关的定量证据见本系列的另一篇技术报告。
6 程序性记忆的生命周期
程序性记忆(可复用的操作流程)与其他记忆不同:它的价值只有在被重复使用时才显现,而错误使用一次就可能造成实际损害。因此采用渐进激活的相位机:
| 阶段 | 含义 | 准入条件 |
|---|---|---|
| observed | 观察到一次可复用的流程 | 自动写入 |
| candidate | 候选技能,进入审批列表 | 具备明确步骤 |
| validated | 已验证可复用 | 有成功判据并被重复使用 |
| active | 激活,可被自动召回 | 满足准入且无高风险标记 |
关键约束:没有成功判据的条目永远无法晋升。这一条把「自动化」和「可信」之间的张力显式化——一个没有验收标准的技能,即使被观察一百次也不应该自动生效。
7 实施路线
| 阶段 | 内容 | 性质 |
|---|---|---|
| 阶段 0 | 会话隔离与事件观察 | 基础设施 |
| 阶段 1 | 影子检索 | 只记录、不注入 |
| 阶段 2 | pre-step 软注入 | 首次产生实际影响 |
| 阶段 3 | 嵌入与关联图 | 检索质量 |
| 阶段 4 | 语义、用户画像与程序性记忆 | 能力扩展 |
| 阶段 5 | 多 Provider 适配与可选推理轨迹 | 可移植性 |
路线设计的一条原则:影子期必须长于直觉。阶段 1 只记录不注入,是为了在没有任何用户可见风险的前提下,先积累「如果注入了会怎样」的证据。后续的实测证明这一步是必要的——影子期暴露的问题,如果放到上线后才发现,代价会高得多。
8 评测设计
8.1 外部基准的局限
通用检索基准考察的是「给定查询,能否找到答案」。但主动记忆的核心指标是「在没有查询的情况下,判断此刻是否该唤起」——这个方向的外部基准并不存在,必须自建。
8.2 本项目必须新增的指标
- 激活精确率:被判定为「该唤起」的样本中,实际正确的比例;
- 有害注入数:导致任务被引入歧途的注入次数,这是一个硬指标,目标值为 0;
- 抑制越界数:本该抑制却输出激活的次数;
- 完整性达成率:需要多条记录才能回答的查询,是否被完整召回。
8.3 必要的消融实验
至少需要三组消融:去掉意图特征(检验必要性判定是否真的来自意图而非相似度)、去掉完整性门(检验越级行为是否被有效约束)、调整决策顺序(检验顺序本身是否是独立变量)。第三组后来给出了整条研究线上最强的对照结果。
9 风险与治理
| 风险 | 具体形态 | 应对 |
|---|---|---|
| 记忆污染 | 错误或恶意内容被写入并反复注入 | 写入门禁 + 来源标注 + 可撤销 |
| 提示注入 | 外部内容伪装成记忆进入上下文 | 记忆与外部内容分通道,来源可核 |
| 隐私与范围 | 记忆跨项目、跨用户泄漏 | 会话隔离 + 作用域限定 + 凭证永不进提示词 |
| 冲突与过期 | 新旧结论同时在场,无法判断哪个有效 | 更正对(supersede)显式建模 |
| 成本与延迟 | 每轮注入膨胀,拖慢请求 | 预算硬上限 + 延迟预算倒推设计 |
| 可解释性 | 用户不知道为什么想起了这件事 | 每次激活携带完整证据链 |
治理部分有一条贯穿性的原则:记忆治理永远在权威层,语义层只给建议。语义计算可以尽力而为、可以失败、可以退化到词法;但「这条记忆属于谁、能不能给对方看、现在能不能注入」这三个问题,必须由一个确定性的、可审计的层来回答。
10 结论
- 主动联想是一个可判定的运行时边界,不是「有记忆功能」的同义词。
- 已发出请求不可改写这一物理事实,决定了主动记忆只能作用于下一步;这既是限制,也是前缀缓存友好的来源。
- 检索与激活必须分离——相关性回答「像不像」,必要性回答「该不该」。
- 能力越自动,判据越要显式——没有成功标准的技能不应自动晋升。
- 本方向的价值在于系统组合与运行时机制,而非某一项单点技术的新颖性。
写在后面的话
「君子生非异也,善假于物也。」
这份报告的第一版结论是「这个方向有工程研究空间」。后来改掉了——把「尚未发现有人这样做」写成「我们是第一个」,是一件很轻率的事。检索总要有一个日期边界,边界之外的东西,我们看不见。
主动联想的价值不在于新,而在于它把一个长期被默认给模型的问题——「你现在需不需要这段记忆」——拿回到模型外面,交给一个可以被检查、被推翻、被撤销的地方。
请求一旦发出就无法原地改写。这个物理事实决定了主动记忆的形态:它只能作用于下一次。承认这个约束,比绕过它更有用。
dsh-auto-memory 项目组 · 2026