问题描述
当前文档 re-index 流程会删除原有 chunk 后重新切分并生成 embedding。
当文档仅发生少量修改时,大量 chunk 内容实际上没有变化,但仍会重复调用 Embedding API。
此外,不同文档中也可能存在相同内容(如企业制度、条款引用、产品说明等),当前会分别生成 embedding,无法复用已有结果。
例如:
- 文档共 200 个 chunk
- 修改内容仅影响其中 10 个 chunk
- 其余 190 个 chunk 内容保持不变
当前仍会对全部 200 个 chunk 重新生成 embedding。
这会带来:
- 不必要的 Embedding API 成本
- 更长的索引耗时
- 更高的限流风险
方案建议
增加可选的 Embedding Cache。
以 (content_hash, model_id, dimensions) 作为唯一键缓存 embedding 结果。
索引流程:
Chunk → 计算 Hash → 查询 Cache
Hit → 直接复用向量
Miss → 调用 Embedding API → 写入 Cache
通过配置项控制开关,默认关闭,不影响现有行为。
预期收益
- 避免对相同内容重复生成 embedding
- 减少 Embedding API 调用成本
- 对现有检索逻辑透明
- 对首次索引场景无副作用
收益主要来自:
- 文档 re-index 时未变化 chunk 的复用
- 跨文档重复内容的复用
非目标
本提案不包含:
- 增量 ingestion 系统
- chunk diff 检测
- cache 淘汰策略(LRU 等)
- singleflight 请求合并
- 不同 embedding model 之间的向量复用
实现方向
可增加独立的 embedding cache 存储层,在 embedding 生成流程中优先进行 cache lookup,命中时直接复用已有向量,未命中时生成并写入缓存。
问题描述
当前文档 re-index 流程会删除原有 chunk 后重新切分并生成 embedding。
当文档仅发生少量修改时,大量 chunk 内容实际上没有变化,但仍会重复调用 Embedding API。
此外,不同文档中也可能存在相同内容(如企业制度、条款引用、产品说明等),当前会分别生成 embedding,无法复用已有结果。
例如:
当前仍会对全部 200 个 chunk 重新生成 embedding。
这会带来:
方案建议
增加可选的 Embedding Cache。
以
(content_hash, model_id, dimensions)作为唯一键缓存 embedding 结果。索引流程:
通过配置项控制开关,默认关闭,不影响现有行为。
预期收益
收益主要来自:
非目标
本提案不包含:
实现方向
可增加独立的 embedding cache 存储层,在 embedding 生成流程中优先进行 cache lookup,命中时直接复用已有向量,未命中时生成并写入缓存。