Kapa.ai 用于 RAG 的图像索引

在摄取阶段进行图像索引优于查询时的多模态 RAG

Kapa.ai 确定,在索引阶段对图像进行一次性描述——而不是在每次查询时将原始图像传递给视觉模型——是将视觉数据集成到 RAG 流水线中最具扩展性和最具成本效益的方式。与仅文本系统相比,这种方法将单次查询的开销降低了 1% 到 6%,同时在统计学上提高了回答质量 (p < 0.05)。

技术文档中图像的角色

技术文档中的图像通常分为两类,这两类都为最终用户提供关键价值:

  • 说明性图像: 这些图像用于澄清现有文本(例如,显示设置图标位置的截图)。它们使指令更易于执行。
  • 承载型图像: 这些图像包含文本中未发现的唯一数据(例如,接线图、规格表或颜色可用性矩阵)。在这些情况下,图像是答案的主要来源。

当图像上下文可用时,跨多个模型和客户项目,LLM 评判员一致认为生成的回答更优,因为它们允许用户进行自助服务,而不是提交支持工单。

为什么查询时的多模态处理在大规模应用时会失败

将检索到的图像直接传递给具备视觉能力的模型(例如 GPT 5.1 或 Claude 4.6 Sonnet)会产生三个主要的结构性瓶颈:

  1. 高昂的经济成本: 原始图像会显著增加单次查询的成本。在 Kapa.ai 的测试中,图像使 GPT 的成本增加了 27%,使 Claude 的成本增加了 51%,这主要是由于高昂的 Tokenization 成本(GPT 每张图像约为 716 个 tokens,Claude 每张约为 975 个 tokens)。
  2. 负载限制: 高密度文档通常在每次查询时检索 20-30 张图像。由于 Claude 的负载限制为 30 MB,OpenAI 的负载限制为 50 MB,系统会迅速达到上限,迫使进行激进的图像限制,从而移除掉有用的上下文。
  3. 检索效率低下: CLIP 风格的多模态嵌入(embeddings)通常无法捕捉技术图表和表格所需的细粒度细节。此外,简短的技术查询通常缺乏足够的信号来有效地与图像向量进行匹配。

"Describe Once" 架构

为了解决这些问题,Kapa.ai 实施了一种在摄取时将图像转换为文本的工作流:

  • 索引阶段: 视觉语言模型 (VLM) 为每张图像生成详细的说明文字(caption)或转录。对于承载型图表,VLM 会转录实际的数值和标签。
  • 存储: 这些说明文字作为独立的文本块(chunks)存储在知识库中。
  • 查询阶段: 检索器将说明文字视为普通文本。如果说明文字相关,模型会使用文本描述来回答查询并引用原始图像 URL。

这种架构确保了计算昂贵的“观察”图像的过程仅发生一次,将视觉数据转化为可检索、有依据的文本。

生产环境实施策略

图像过滤与分类

为了避免为“垃圾”图像(徽标、横幅、头像)生成说明文字的成本,Kapa.ai 使用了两步过滤机制:

  1. 启发式方法: 根据不支持的格式、较小的尺寸或极端的宽高比来丢弃图像。
  2. 零样本分类: 基于多模态嵌入的分类器会移除剩余的噪声。虽然这在清晰明确的图像上达到了 96.8% 的准确率,但模糊的图像(例如,既可能是横幅也可能是教程步骤的截图)会被保留,以避免丢失潜在信息。

优化说明文字质量

说明文字的有效性更多地取决于上下文,而非模型大小。Kapa.ai 发现,为 VLM 提供图像前后紧邻的段落可以显著提高说明文字的落地性(grounding)和实用性。此外,较小的模型(如 GPT 5.4 mini)生成的说明文字与昂贵得多的模型几乎无法区分,使其成为大规模索引的阶段性选择。

存储:独立块 vs. 行内文本

将说明文字作为独立块存储优于在文档内替换 alt-text:

  • 行内存储: 会增加包含图像的每个文本块的大小,无论图像是否相关,都会增加每次查询的成本。
  • 独立存储: 只有当检索器认为说明文字相关时,说明文字才会进入 LLM 上下文。在基于 GPT 的项目中,这种方法将单次查询成本从 19%(行内)降低到了 6%(6%)。

性能结果

在三个使用 GPT 5.1 和 Claude 4.6 Sonnet 的客户项目中进行测试,结果如下:

指标 仅文本基准 带有图像说明文字
在回答中引用的图像数量 0% 10% 到 64%
回答质量 (LLM 评判员) 基准 显著更好 (p < 0.05)
单次查询成本 基准 +1% 到 6%
延迟 (TTFT) 基准 亚秒级增加
模型不确定性 基准 不变或略低
索引成本 不适用 一次性成本

社区观点

行业从业者指出,这种方法反映了传统媒体摄取中使用的“积极处理”(eager processing)模式(例如,预生成缩略图)。然而,一些人对 LLM 的非确定性提出了担忧:

"新模型会揭露关于你数据的更多信息... 一个新模型可能会捕捉到这一点,而旧模型可能不会。这些上下文调整有时可能需要你重新运行你的 LLM 处理。"

其他开发者也证实,手动版本的这一过程——为个人知识库中的重要图像生成文本描述——在 Agent 的结果中也产生了类似的改进。

Sources