跳转到内容

记忆类型

HaroCue 用几组彼此独立的字段描述一条记忆:它表达什么、来自谁、现在是否有效、依据是否仍然可读,以及属于哪个作用域。类型不是模型的置信度,来源也不是用户确认。

维度 它回答什么问题 典型值
Claim 类型 这条记忆表达什么? 事实、偏好、决定、承诺
来源类型 它从哪里来? 应用、对话、文档、用户输入
提供者 谁写下或提出它? UserProducer
有效性 它在什么时候成立? 当前、未来、过期、冲突、遗忘
依据支持 还能不能打开原文? GroundedPartialUnavailable
作用域 哪个工作区可以读取? 工作区、全局偏好

Claim 是可以被检索和引用的陈述。类型只说明陈述的用途,不代表它已经被用户确认。

类型 适合表达 典型使用位置
Fact 事实 从来源中提取的可复用陈述 Cue、/ 问答、回顾
Preference 偏好 你明确表达的长期偏好 选定工作区,或获授权的全局偏好
Decision 决定 已经做出的选择或规则 续接工作、问答、回顾
Commitment 承诺 已经答应要做的事或计划 续接工作、回顾

「习惯」「情节」「程序记忆」可以帮助解释产品体验,但不是当前内核的持久化类型。活动频率不会自动变成偏好,模型推断也不会自动变成用户确认。

每个 Claim 至少引用一个 Evidence。Evidence 保存原文和时间信息,Claim 保存指向它的字节范围。

来源 含义 是否能直接修改
Application 获准的应用文字或桌面活动线索 不能,需通过新证据纠正
Conversation 获准的对话内容 不能,需通过新证据纠正
Document 通过文件查询得到的文本 不能,需通过新证据纠正
UserInput 你在记忆界面直接写下的内容 原文作为用户证据保存

Evidence 带 source_id、观察时间、摄入时间和可选过期时间。点开记忆节点时,界面可以用这些字段说明「为什么记得」。

提供者 含义 能否代表确认
User 你明确输入、纠正或确认的内容 可以代表用户动作
Producer 抽取或整理模型提出的内容 不能,仍需核对

内核根据查询的 known_atvalid_at 计算状态:

状态 说明 Cue 是否使用
Current 在查询时间已经生效,且没有被替代 还需通过 Grounded 检查
Future 记录存在,但尚未到生效时间 不使用
Expired 已超过有效期 不使用
Superseded / Retracted 被新决定替代或明确撤回 不使用
Conflict 有互相冲突的有效陈述,尚未裁决 不使用
Forgotten 被用户遗忘 不使用

纠正旧认识和后来发生变化是两种不同的关系;历史查看可以保留它们,普通 Cue 不会使用无效或未裁决的 Claim。

支持状态 含义 适合展示
Grounded 所有引用的来源片段仍可读取 Cue、问答、回顾
Partial 只剩部分来源片段 记忆检查页,提示需要复核
Unavailable 没有可用来源片段 历史检查,不作为当前答案

Grounded 只说明引用片段可读,不说明模型推断一定正确。Cue 使用 Current + Grounded 的组合条件。

作用域 可以保存什么 查询规则
工作区 项目事实、决定、承诺和局部偏好 只在当前工作区读取,不自动跨区
全局偏好 你明确确认的长期偏好 只有产品适配器显式查询时才使用

工作区切换会同时改变 scope_id 和版本校验,防止同一个 revision 被误认为属于同一个空间。清空作用域还会推进 scope_epoch,让旧任务失效。

  • 「记忆」列表和知识图谱显示类型、状态、来源数量和关联。
  • 点开节点可以查看原文片段,并区分「助理推断」和「已确认」。
  • 关系整理只补充真实存在的实体或来源连接,不会凭相似文字制造捷径。
  • 如果状态不是 Current + Grounded,普通 Cue 会跳过它;检查页仍可以让你找到原因。

对应代码:crates/harocue-memory/src/model.rscrates/harocue-memory/src/retrieval.rscrates/harocue-runtime/src/product_memory.rsfrontend/src/product-api.tsfrontend/src/knowledge-map.ts

  • 添加记忆:自动抽取和手动记录如何产生 Claim。
  • 搜索记忆:哪些 Claim 有资格进入结果。
  • 更新记忆:纠正和生效时间如何保留历史。
  • 删除记忆:遗忘 Claim、Evidence 和作用域的差别。