记忆计数与统计

wesgine 记忆的计数(用户面)与统计(运维面):两个端点回答不同问题。


按层计数(用户面)

GET /memory/counts?actor=alice&namespace=

返回每层条数,键覆盖全部七层含 0:

{
  "environment": 12,
  "consensus": 3,
  "about_me": 8,
  "agent_memory": 25,
  "session": 0,
  "working": 0,
  "unknown": 0
}

关键约束(INV-MEM-52)

缺键会让消费方渲染成「什么都没有」,而新加的层正是最可能缺键的。

与列表的一致性

同一句话的两种说法——counts 的数字 == list 的总行数。不一致时用户读作「列表被过滤了」。


运维统计(运维面)

GET /memory/stats?actor=&scope=&namespace=

按 scope 分区统计分布。

区别

countsstats
问题我有多少条记忆?哪个分区的行需要被合并/统计/批删?
维度层scope + namespace
权限cell:readcell:admin
Actor必填可选(管理视图)

为什么 stats 用 scope 而非 layer

层回答「这行对谁可见」,回答不了「哪个存储分区的行需要被合并/统计/批删」。

/memory/digest(跨条目合并)、/memory/delete-by-meta(批删)和 /memory/stats(统计分布)三者都是运维面,按 scope 提问是对的。


layer 与 scope 互斥

Layer 与 Scope 同时给出返回 ErrMemoryLayerScopeConflict(400),不做交集。

理由:两者只在调用方糊涂时才分歧,返回交集是在回答没人问过的问题。


admin 的 actor 语义

?actor= 只对 admin token 生效;非 admin 一律取 Principal.Actor。

空 actor = 管理视图(全 Cell)。这不是「不过滤」,是 admin 的合法权限。


前端消费指南


相关文档