Reward Memory Utility Projection v0¶
memory_utility_projection_v0 是对已经通过 Stage 1
memory_utility_observation_v0 校验的追加式观察流做归约后得到的只读结果。
它是 LoopX 本地 projection,不是 provider ledger,也不是记忆生命周期记录。
输入对象只包含 observations、scope、retrieval_snapshot_ref 和
policy_snapshot_ref,并可选 reducer_version 与 previous_projection。
previous_projection 只用于校验 identity;调用方仍需提供完整观察流,以便重启后
得到可复现结果。
所有权与入口¶
Stage 1 observation 校验与 Stage 2 reducer/readback 继续由现有
reward_memory capability 中的同一个 Python 语义所有者负责。本阶段只有显式 CLI
调用,不新增配置、自动召回或 provider 路径。这样可让领域内 projection 留在现有边界,
避免再维护一份 TypeScript reducer。未来若出现共享 consumer,应复用此所有者,或整体迁移
该事务并删除 Python 规则。
本次 CLI-only 交付没有改变配置或用户自动化路径,因此不需要新增 frontend 或 Lark 控件。 如果后续交付启用自动使用、ranking 或更广泛采用,应在同一交付中补上现有共享 projection 及相关用户控制。Scope 与 snapshot 引用只绑定 identity,不能证明源数据的新鲜度或覆盖率; 本 packet 尚无 projection envelope,因此 consumer 必须将新鲜度与覆盖率视为未知。
Projection identity¶
Reducer identity 由以下内容共同决定:
scope.agent_id、project_id、corpus_id、surface_id;- retrieval 与 policy snapshot 引用;
- 显式的
reducer_version。
任一值变化都会产生不同的 reducer_identity。带有不同 identity 的
previous_projection 会在返回 subject 状态前被拒绝。默认实现版本是
memory_utility_reducer_v0。
归约规则¶
Reducer 首先使用 Stage 1 validator 校验每条 observation,并要求 scope 与 snapshot 完全匹配,然后按以下规则处理:
- 相同
observation_id的语义重放只计一次;仅重试created_at不会产生新观察。 - 同一
observation_id下的不同 payload 视为冲突投递,不增加支持计数,并返回review_required与挂在 rejection 记录上的 quarantine proposal (quarantine_proposed: true)。冲突 identity 不会进入 subject,因此 proposal 保留在有界 rejection 记录中。 - 证据优先级固定为:
owner_correction>controlled_replay>deterministic_effect>evaluator_inference>insufficient。 - 最高 evidence tier 决定 effective direction。如果该 tier 是
unknown,较弱的 有方向观察不能凭空制造 utility direction;当存在这类较弱方向时,subject 变为unknown并要求 review。否则只有最高强度的有方向证据会贡献 effective label 和 有界 utility,较弱观察仍保留在支持计数和历史中。同一强度出现不同方向判断时, 结果为unknown并要求 review。 unknown只增加 lineage 与覆盖计数,不能单独产生 utility 方向。itemsubject 必须只有一个 memory digest;setsubject 保留完整应用集合。 set-level 证据绝不会复制到 item subject;nonesubject 仅用于 lineage,单独保留。
Utility 限制在 [-1.0, 1.0],confidence 和 uncertainty 限制在 [0.0, 1.0]。
支持计数保留四种 label 和五种 evidence tier。每个 subject 还保留稀疏的
evidence_label_summary,记录实际出现的每组 evidence-tier/utility-label 的计数与组合
confidence。Projection 记录最近接受的 observation 身份、时间以及有界的 public-safe
历史。超过 history 上限时,会先保留每个 subject 的最近一条记录,再用最新记录填满
剩余空间,保证截断后仍能审计 subject 的 latest 字段。
即使 history 被截断,readback validator 仍然 fail-closed:它会从联合
evidence_label_summary 推导最高 evidence tier、effective label、confidence 与 review
状态,并验证联合计数能够还原 label 和 evidence-tier 两组边际计数。因此,即使决定性
history 已被截断,也不能用较弱 support 把最高层级的 harmful 或 unknown 改成其他结果。
Projection 时间戳也必须保持 canonical,首尾空白会被拒绝。
Review 与安全边界¶
负向 utility 只产生 attenuation_proposed review 状态,建议动作是
attenuate_or_review。冲突产生 conflict,未建立归因产生
unresolved_attribution。这些都只是 proposal。冲突 delivery 还会在 rejection
记录上带 quarantine_proposed 标记,但不会授权删除或修改。Projection 和每个
subject 都保证:
{
"read_only": true,
"automatic_deletion": false,
"action_authority_granted": false,
"provider_write_performed": false,
"external_writes_performed": false,
"raw_content_captured": false
}
格式错误、scope 或 snapshot 不一致、projection identity 不一致都会返回
status: "rejected",且不返回 subjects。Reducer 不调用 provider,不接入 ranking、quota
或 scheduler,也不改变主工作流结果或 settlement。调用方可以检查 rejected packet,同时
继续原本 fail-open 的工作流。
Projection 只接受 opaque 引用和 canonical memory digest,不保存原始记忆文本、prompt、 transcript、credential、本地路径或 provider 私有 URI。
Public shape¶
顶层 packet 使用 memory_utility_projection_v0,包含 accepted、duplicate、conflicting、
rejected delivery 的有界计数、subjects、subject-level review_proposals、带
quarantine metadata 的 conflict rejection 记录以及 observation_history。Subject 携带 attribution level、digest 集合、effective label 与
evidence basis、有界 utility/confidence/uncertainty、支持计数、证据强度计数、稀疏的
evidence-label 联合摘要、最近观察及 review 状态。
相同的语义观察流、scope、snapshot 和 reducer version 无论输入顺序如何,都会产生相同 projection。