记忆列表与搜索
wesgine 记忆的两种检索方式:列表(分页浏览)与语义搜索。
列表查询
GET /memory?layer=about_me&namespace=&limit=50&offset=0&actor=alice
参数
| 参数 | 说明 |
|---|---|
layer | 按层过滤(下推到 SQL) |
namespace | 按命名空间过滤 |
kind | 按类型过滤 |
limit | 每页条数 |
offset | 偏移量 |
actor | admin 可指定,非 admin 取 token actor |
层下推(INV-MEM-49)
layer 参数通过 LayerClauses(layer) 转为 SQL 谓词,在 LIMIT 之内过滤。
禁止页外过滤:拿回一页再按 layer 筛会让共享分区一大时用户的行掉出窗口。
排序
默认 accessed_at DESC, created_at DESC, id——最近被召回的排在前面。
语义搜索
POST /memory/search
{
"query": "项目截止日期",
"layer": "about_me",
"limit": 10
}
搜索特点
- 基于 Embedding 向量相似度
- 支持按
layer过滤 - 返回相关度排序结果
与自动注入的区别
显式搜索(memory(search) / POST /memory/search)不设质量门(RecallQualityOK):
| 显式搜索 | 自动注入 | |
|---|---|---|
| 质量门 | 无 | RecallQualityOK |
| stale 条目 | 可见 | 排除 |
| Conflicted 条目 | 可见 | 排除 |
| 用途 | 「我存过什么」 | 「模型该看什么」 |
理由:对指名索取者隐藏被取代的行是把错答换成缺答;记忆中心必须显示冲突否则无人能解决。
读单条
GET /memory/{id}?actor=alice
- 不属于你 → 并进 404(不暴露存在性)
- 不存在 → 404
与删除的差异:读并 404,删回 403。理由:记忆 id 会随导出与分享链接流出,读不配得到「它确实存在」这个确认。
前端消费要点
- 列表按
layer提问,不在客户端过滤 - 搜索结果展示时标注
Conflicted/stale状态 - 不要用搜索结果替代列表——语义不同
- 页码与计数一致(
counts的数字 == 列表总行数)
相关文档
- 显式搜索详解 →
memory-explicit-search.md - Memory 层模型 →
memory-layer-model.md - 计数与统计 →
memory-count-stats.md - 验证与诊断 →
memory-validation.md