消费缓存合约:过时的节点身份与重新生成块 ID 后内容稳定的重复使用
作者: Nakagawa-master创建于 2026年9月16日更新于 2026年9月16日
□ 内容
PR #23003从#23002中修正了文档级别的身份相撞,但其后续讨论暴露了更广泛的缓存合同选择,似乎值得单独决定,而不是埋入有重点的固定中.
当前通用变换缓存存储并返回已变换的entire “ BaseNode” 列表。 同时,#23003中经过修改的密钥可以在存在SOURCE关系时故意省略中间节点的当前"id `",以便在上游分出器再生随机块ID时保持下游缓存再利用的稳定.
PR作者证实了所剩案件:两个兄弟会块可以拥有相同的源ID + 相同的内容但不同的当前块ID,一个缓存命中可以返回带有先前运行身份的输出. 作者还明确将一般语义选择推迟到维护者,并主动提出在选择方向后跟进.
□ 最小裁决案件
使合同可见的回归:
页:1 运行 1: 源 S - > 拆分器出块 id A, 内容 X
下游转换记录/依赖输入id A
下游缓存存储输出
只过期分解相缓存
运行 2: 源 S - > 拆分器出块 id B, 内容相同 X
下游缓存密钥不变
缓存点击返回输出来自 A
对于通用的 " 变体组件 " ,如果允许变体依赖于`id----、关系或其他非内容节点状态,则这种变体就明显僵化了。
□ 合同选项
我看到两个一致的方向:
1. ** Full-node 变换缓存**——如果任意变换可能依赖于完整的"BaseNode"语义学和缓存返回被变换的节点批发,则包括每个完全允许影响键中变换的节点字段. 重新生成的随机ID可能合法地导致丢失 。
2. ** 稳定有效载荷缓存**——如果预期的优化是跨越再生成的块ID再利用,则只缓存出自内容的有效载荷(例如嵌入)并将其应用到**当前**节点上,而不是返回一个已停放的节点物体批发地。
危险的中间点是宣布当前节点身份与密钥无关,同时仍然返回其身份/关系可能取决于其身份/关系的缓存值.
□ 所选合同的接受测试
请保留一个回归, 其中下游变换记录输入节点 id(或另一个非内容字段), 重新生成上游块 id, 同时保持源+ 内容不变, 并坚持第二个结果遵循文件合同 :
- 全节点合同:下游为B和结果记录B重新运行;或
- 有效载荷再利用合同:有效载荷被再利用,但附着/目前由B代表,从未使用A。
这个问题并不是要求#23003来扩大范围;它旨在给维护者层面的语义决定一个专用的表面,这样聚焦的PR可以保持焦点.
内容来源: run-llama/llama_index