长期记忆
长期记忆赋予数字员工跨会话的信息保持能力——今天告诉它的事情,下周再问时它依然记得。这是数字员工区别于普通智能体的核心能力之一。
记忆如何工作
长期记忆的基本原理是将对话中的关键信息提取为结构化的记忆条目,存储到向量数据库中。当用户发起新对话时,系统根据当前问题检索最相关的历史记忆,将它们作为上下文的一部分提供给大模型。
这个过程分为两个阶段:
实时记忆提取
在对话过程中,大模型会自动识别值得记录的信息。提取的记忆会被归类为四种类型:
- 事实(fact):关于用户的客观背景信息——职业、所在地、家庭状况等。注意,fact 只记录客观事实,不夹带任何主观评价。例如"用户在上海工作"是 fact,而"用户觉得上海很好"则是 preference。
- 偏好(preference):用户的稳定倾向——工作风格、沟通偏好、兴趣爱好、思考方式等。关键区分标准是稳定性:长期形成的习惯是 preference,一次性需求不是。
- 约束(constraint):用户设定的硬性行为边界——"不要做 X"、"绝对不能 Y"、"必须 Z"。与单次指令不同,约束是跨越对话始终有效的红线。
- 技能(skills):用户展现或自述的能力——技术栈、语言能力、专业领域等。
这种分类不是随意划分的。在检索时,不同类型的记忆拥有不同的权重和处理逻辑。约束类记忆的优先级最高,因为它直接影响安全和合规。
记忆检索
当用户发起新对话时,系统将当前问题向量化,在记忆向量空间中查找最相关的历史记忆。这个过程依赖两个关键模型:
- 嵌入模型(Embedding Model):负责将记忆内容转换为向量表示。高质量的嵌入模型能够捕捉记忆条目的深层语义。
- 重排序模型(Rerank Model):对嵌入模型返回的候选记忆进行二次精排,过滤噪声,确保最相关的记忆排在最前面。
这个两阶段检索架构(嵌入粗筛 + 重排精排)大幅提升了记忆召回的相关性。
梦境系统:离线记忆整合
实时对话中提取的记忆存在一个固有问题:对话是碎片化的。用户可能在上午提到"我在准备 Q3 的财务报告",下午又提到"那个 PPT 需要加一页数据"——这两条信息单独看都是合理的记忆,但合并起来才能形成完整的认知。更棘手的是,随着对话不断积累,记忆库中会逐渐出现内容冗余、信息过期甚至相互矛盾的条目。
梦境系统正是为解决这个问题而设计。
设计理念
梦境系统的命名来自认知科学中的记忆巩固理论:人类大脑在睡眠期间会对白天的经历进行整理、筛选和整合,将短期记忆转化为长期记忆,丢弃无关信息,强化重要关联。
在 AI Agent 领域,类似的设计理念也逐渐成为共识。Claude 的记忆系统采用了定期后台整合的策略。MemGPT 提出了"自我编辑记忆"的概念,允许 Agent 在空闲时主动回顾和优化自己的记忆库。这些方案的核心思想是一致的:实时记忆是最初级的记录,离线整合才能产生高质量的知识。
梦境系统与这些方案的关键区别在于,它不是一个简单的"重新整理",而是一个两阶段 AI 处理流程——先萃取再整合,每一步都由大模型深度参与。
第一阶段:记忆萃取
每天凌晨,梦境系统回顾当天该用户与数字员工的所有对话。但与实时记忆提取不同,梦境系统拥有两个独特优势:
没有对话压力。 实时提取时 AI 的首要任务是回答问题,记忆提取是附带的。梦境系统可以逐条审视每个对话片段,从容判断信息是否具有长期价值。
长期性检验。 梦境系统在萃取时遵循一条核心原则:提取前先问自己"这条信息一个月后还有用吗?"如果答案是否定的——比如用户说"今天心情不太好",这是一次性情绪——则不提取。这条原则确保了记忆库中只保留跨越时间仍有价值的信息,不会因为日常闲聊而产生大量无意义的记忆条目。
萃取过程中,系统还遵循几个关键规则:
- 宁缺毋滥:拿不准要不要提取的,不提取。漏掉一条信息可以下次补,但提取了一条错误的信息会持续污染后续对话。
- 一条一意:每条记忆只表达一个完整且独立的信息点。不会把"用户是前端工程师"和"用户养了一只猫"放在同一条记忆里,尽管它们属于同一分类。
- 去主观化:对于 fact 类记忆,严格排除主观评价。发现的信息如果是"用户觉得北京很好",它应该被归为 preference 而非 fact。
第二阶段:记忆整合
萃取完成后,新获得的记忆片段需要与已有的记忆库进行整合。这不是简单的"新记忆追加到旧记忆后面",而是一个深度的融合过程。
整合阶段处理三种操作:
新增(Add):当新信息与所有已有记忆都无关时,创建一条全新的记忆。例如,用户首次提到"我在学 Rust",而记忆库中没有任何关于 Rust 或编程语言的信息。
更新(Update):当新信息与某条已有记忆相关时,将它们融合为一条更完整的记忆。例如,已有记忆是"用户喜欢喝咖啡",新信息是"用户每天早上喝一杯拿铁"——融合后的结果是"用户喜欢喝咖啡,尤其是拿铁,每天早上都会喝一杯"。
这个阶段最精妙的地方在于:它不仅检查新信息与旧记忆的关系,还会主动检查已有记忆之间是否存在冗余。即使没有新信息触发,系统也会发现"用户擅长 Python"和"用户精通 Python 后端开发"这两条记忆明显应该合并——于是在整合过程中将它们融合为一条,删除冗余条目。这种"主动自查"机制确保了记忆库不会随着时间推移变得越来越臃肿。
删除(Delete):当某条记忆的信息已被完全融合进另一条记忆后,原条目变得冗余,系统会将其删除。
冲突处理:当新信息与旧记忆产生矛盾时——例如用户之前说"在上海工作",近期对话提到"搬到了北京"——系统以最新信息为准,更新记忆内容。这确保了记忆库始终反映用户的最新状态。
为什么需要两阶段设计
萃取和整合分开执行,而非一个步骤完成,是深思熟虑的结果:
- 如果用一个提示词同时做"判断什么值得记"和"怎么整合到现有记忆",AI 容易顾此失彼。分开后,每个阶段聚焦一个目标,准确率大幅提升。
- 两阶段之间可以插入质量检查。如果萃取阶段产出了明显不合理的信息,整合阶段可以拒绝处理。
- 萃取阶段是信息筛选问题(什么值得记),整合阶段是知识编排问题(怎么组织已有知识)。这是两个不同层次的认知任务,分开处理更符合 AI 的能力特点。
| 实时提取 | 梦境萃取 | 梦境整合 | |
|---|---|---|---|
| 时机 | 对话进行中 | 非高峰时段 | 萃取完成后 |
| 目标 | 快速记录关键信息 | 筛选有价值的长期信息 | 去重、合并、冲突解决 |
| 独特规则 | 即时响应 | 长期性检验、宁缺毋滥 | 主动自查已有冗余 |
| 成本 | 共享对话上下文 | 独立上下文窗口 | 独立上下文窗口 |
简单来说:实时提取保证"不遗忘",梦境萃取保证"记得对",梦境整合保证"记得好"。
记忆隔离
数字员工的长期记忆是按用户隔离的。每个用户拥有完全独立的记忆空间,无法访问其他用户的记忆。这是通过向量数据库的分区键机制实现的——每个 Agent-User 对拥有独立的分区。
这种设计保证了:
- 用户 A 告诉数字员工的私密信息永远不会泄露给用户 B
- 同一数字员工可以服务不同用户而不会产生记忆混淆
- 可以根据合规要求单独删除某个用户的全部记忆
管理记忆
查看用户记忆
记忆管理页面首先展示所有有过对话的用户列表,包括每个用户的记忆总数和最近更新时间。点击进入某个用户的详情页,可以查看该用户的所有记忆条目。
每条记忆条目显示:内容、分类、创建时间。同时显示该用户与数字员工的对话历史,方便对照上下文理解记忆的来源。
编辑记忆
记忆条目支持手动编辑。你可以修改记忆的内容和分类。手动编辑后的记忆会标记为"已编辑"状态,在后续的自动提取和梦境整合中不会被覆盖。
删除记忆
支持两种粒度的删除:
- 删除单条记忆:适用于纠正错误或不准确的记忆
- 删除用户全部记忆:适用于员工离职或数据清理场景
注意:删除操作不可撤销。在生产环境中建议先导出备份。
启用与配置
长期记忆需要在数字员工的记忆页面中手动开启。开启时需要配置:
- 嵌入模型:决定记忆的语义检索质量。中文场景建议选择专门为中文优化的嵌入模型。
- 重排序模型:决定检索结果的精排效果。
- 梦境系统开关:决定是否启用离线记忆整合。建议在以下场景开启:
- 数字员工服务用户频繁,每天产生大量对话
- 需要高质量、低冗余的记忆库
- 用户期望数字员工能形成长期、连贯的认知
模型配置保存后不可随意更改——切换模型会导致已向量化的记忆条目需要重新向量化。