记忆列表与搜索

wesgine 记忆的两种检索方式:列表(分页浏览)与语义搜索。


列表查询

GET /memory?layer=about_me&namespace=&limit=50&offset=0&actor=alice

参数

参数说明
layer按层过滤(下推到 SQL)
namespace按命名空间过滤
kind按类型过滤
limit每页条数
offset偏移量
actoradmin 可指定,非 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
}

搜索特点

与自动注入的区别

显式搜索(memory(search) / POST /memory/search)不设质量门(RecallQualityOK):

显式搜索自动注入
质量门无RecallQualityOK
stale 条目可见排除
Conflicted 条目可见排除
用途「我存过什么」「模型该看什么」

理由:对指名索取者隐藏被取代的行是把错答换成缺答;记忆中心必须显示冲突否则无人能解决。


读单条

GET /memory/{id}?actor=alice

与删除的差异:读并 404,删回 403。理由:记忆 id 会随导出与分享链接流出,读不配得到「它确实存在」这个确认。


前端消费要点

  1. 列表按 layer 提问,不在客户端过滤
  2. 搜索结果展示时标注 Conflicted / stale 状态
  3. 不要用搜索结果替代列表——语义不同
  4. 页码与计数一致(counts 的数字 == 列表总行数)

相关文档