核心对象模型
羽忆存储的不是原始聊天消息,而是经过整理后的结构化对象。这样设计的原因很直接:会话消息天然噪声高、粒度混乱、生命周期不一致,不适合直接作为可长期复用的记忆单元。
系统围绕三类核心对象展开:
| 对象 | 定位 | 是否持久化 |
|---|---|---|
| Memory Object | 长期稳定记忆 | 是 |
| History Record | 历史上下文材料 | 是 |
| Recall Context Block | 面向任务的召回结果块 | 否,运行时生成 |
Memory Object
Memory Object 对应 Stable Memory,是系统里的长期记忆单元。它强调“可复用”和“可控制”,所以字段设计不仅要能表达内容,还要能支撑后续的排序、冲突提示和版本管理。
关键字段
| 字段 | 说明 |
|---|---|
id | 全局唯一标识,通常使用 mem_ 前缀 |
memory_type | 记忆类型,例如偏好、项目约定、决策、事实 |
title / summary / content | 分别承担列表展示、召回注入和完整存储 |
scope | 记忆归属和可见范围,是权限和召回的共同边界 |
semantic_key | 语义聚合键,用于覆盖、去重与冲突定位 |
importance | 重要性评分,影响召回优先级 |
confidence | 可信度评分,用于提醒调用方是否应盲信 |
status | 当前状态,参与默认召回与控制流 |
version | 内容版本号,仅内容更新时递增 |
推荐类型
| 类型 | 典型内容 |
|---|---|
preference | 用户表达的稳定偏好 |
project_rule | 项目级约定与规范 |
decision | 已确认的技术或业务决策 |
fact | 经过确认的事实信息 |
workflow | 稳定工作流或操作方法 |
reference | 长期有效的参考信息 |
状态机
Memory Object 默认围绕以下状态流转:
active -> archived
active -> invalid
active -> deleted
archived -> active
invalid -> active
deleted -> active (仅在 tombstone 保留窗口内)
这里把“归档”和“失效”单独拆开,是为了避免用户只能在“正常”与“彻底删除”之间二选一。很多记忆不是完全错误,只是暂时不参与默认召回,或者当前已经不再准确,这两类情况需要明确区分。
History Record
History Record 对应 History Recall,用于记录任务过程中的阶段性材料。它允许内容更自然、更接近上下文原貌,但仍然保留了最基本的结构,便于后续召回编排。
核心差异
| 维度 | Memory Object | History Record |
|---|---|---|
| 生命周期 | 长期保留 | 可降级、可过期 |
| 写入模式 | 幂等 / 版本化覆盖 | 以追加为主 |
| 召回角色 | 主骨架 | 补充上下文 |
| 内容风格 | 更精炼 | 更贴近任务过程 |
常见类型
| 类型 | 说明 |
|---|---|
task_summary | 阶段任务总结 |
decision_trace | 决策过程与比较 |
session_excerpt | 会话关键片段 |
recent_progress | 最近进展 |
incident_context | 故障与问题上下文 |
Recall Context Block
Recall Context Block 不直接入库,而是 Recall Orchestrator 在运行时生成的结果块。它的目标不是“把检索结果原样吐出来”,而是把模型当前真正需要的材料包装成一段可消费上下文。
一个典型结果块会包含:
stable_memorieshistory_recordsconflictsfreshness_notestoken_estimatetruncated
把这个对象单独定义出来很重要,因为它意味着系统从一开始就把“召回”视为独立产品能力,而不是简单搜索接口的包装层。