搜索记忆
搜索是「先资格、后排序、最后按预算装箱」的只读操作。查询本身不会记录曝光、改变记忆真值或调用模型。
一次查询如何完成
Section titled “一次查询如何完成”| 步骤 | 输入或动作 | 输出 |
|---|---|---|
| 1. 定义范围 | 当前工作区、scope_epoch、known_at、valid_at |
明确的 Query |
| 2. 资格筛选 | 状态、来源支持、时间和作用域 | 可读取的 Claim 候选 |
| 3. 生成候选 | 词法、实体和可选语义索引 | 带分数的候选 |
| 4. 排列与装箱 | 相关性排序、max_items、max_bytes |
有界 MemoryPack |
| 5. 展示前复核 | revision、epoch、来源和大小 | 可交给 Cue、问答或回顾的快照 |
没有明确作用域时,查询不会扩大到其它工作区。候选索引只能加速查找,不能绕过第 2 步的资格门。
| 信号 | 做什么 | 适合回答 |
|---|---|---|
| 作用域 | 限制在当前工作区或明确授权的全局偏好 | 避免不同项目互相混入 |
| 状态与来源 | 排除被纠正、冲突、失效、遗忘或失去依据的 Claim | 当前能否可靠使用 |
| 词法 | 用 BM25 风格统计和中文相邻双字词匹配原词 | 名称、编号和事实查找 |
| 实体 | 使用真实的人物、项目和来源连接增强候选 | 关于某个人或项目的问题 |
| 语义 | 接收作用域和版本一致的可选语义候选 | 概念相近但用词不同的问题 |
| 时间 | 根据 known_at、valid_at 和 Transitions 判断状态 |
「什么时候」「现在是否仍然」 |
多个通道合并时,每个通道只贡献一次确定性排名。Grounded 只表示引用片段仍可读取,不表示模型推断已经被语义证明。
Cue、问答和检查页
Section titled “Cue、问答和检查页”| 查询模式 | 会返回什么 | 典型入口 |
|---|---|---|
Cue |
Current + Grounded 的当前记忆 |
停顿建议、原位续写 |
Inspect |
用于核对的完整状态,包括部分支持或历史项 | 记忆列表、来源和图谱 |
| 恢复 | 用户确认的决定和承诺,再加近期有依据的事实 | query_resume |
| 偏好 | 用户明确确认的偏好 | query_preferences |
query_resume 不用问题文本的相似度假装待办事项;query_preferences 也不会自动读取其它工作区。
max_items限制返回条目数。max_bytes计算序列化items数组的 UTF-8 字节。- 放不下的完整条目会跳过,不会截断一句 Claim。
- 记忆包是某个 revision 上的快照;删除、纠正或切换工作区后必须重新查询。
桌面 Cue 会把结果转换为有界的 TabFuel。显示前和按 Tab 接受前,ProductMemoryService::validate_pack 会重新比较作用域、revision、epoch、有效性、来源和序列化大小。输入、焦点、插入点或工作区变化时,旧提示会被清除。
明确的 / 问答可以继续读取当前输入和按需工具结果。它与自动 Cue 共用同一记忆资格规则,但问题本身是用户主动触发。
| 关注点 | 代码证据 |
|---|---|
| Query 资格、时间和预算 | crates/harocue-memory/src/retrieval.rs |
| 版本绑定的词法索引 | crates/harocue-memory/src/indexed.rs |
| 语义向量适配约束 | crates/harocue-memory/src/semantic.rs |
| 工作区、恢复和偏好查询 | crates/harocue-runtime/src/product_memory.rs |
| Cue 燃料、焦点绑定和接受前复核 | crates/harocue-runtime/src/completion_engine.rs |