#23083·llama_index

消费缓存合约:过时的节点身份与重新生成块 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