Kapa.ai 用于 RAG 的图像索引
在摄取阶段进行图像索引优于查询时的多模态 RAG
Kapa.ai 确定,在索引阶段对图像进行一次性描述——而不是在每次查询时将原始图像传递给视觉模型——是将视觉数据集成到 RAG 流水线中最具扩展性和最具成本效益的方式。与仅文本系统相比,这种方法将单次查询的开销降低了 1% 到 6%,同时在统计学上提高了回答质量 (p < 0.05)。
技术文档中图像的角色
技术文档中的图像通常分为两类,这两类都为最终用户提供关键价值:
- 说明性图像: 这些图像用于澄清现有文本(例如,显示设置图标位置的截图)。它们使指令更易于执行。
- 承载型图像: 这些图像包含文本中未发现的唯一数据(例如,接线图、规格表或颜色可用性矩阵)。在这些情况下,图像是答案的主要来源。
当图像上下文可用时,跨多个模型和客户项目,LLM 评判员一致认为生成的回答更优,因为它们允许用户进行自助服务,而不是提交支持工单。
为什么查询时的多模态处理在大规模应用时会失败
将检索到的图像直接传递给具备视觉能力的模型(例如 GPT 5.1 或 Claude 4.6 Sonnet)会产生三个主要的结构性瓶颈:
- 高昂的经济成本: 原始图像会显著增加单次查询的成本。在 Kapa.ai 的测试中,图像使 GPT 的成本增加了 27%,使 Claude 的成本增加了 51%,这主要是由于高昂的 Tokenization 成本(GPT 每张图像约为 716 个 tokens,Claude 每张约为 975 个 tokens)。
- 负载限制: 高密度文档通常在每次查询时检索 20-30 张图像。由于 Claude 的负载限制为 30 MB,OpenAI 的负载限制为 50 MB,系统会迅速达到上限,迫使进行激进的图像限制,从而移除掉有用的上下文。
- 检索效率低下: CLIP 风格的多模态嵌入(embeddings)通常无法捕捉技术图表和表格所需的细粒度细节。此外,简短的技术查询通常缺乏足够的信号来有效地与图像向量进行匹配。
"Describe Once" 架构
为了解决这些问题,Kapa.ai 实施了一种在摄取时将图像转换为文本的工作流:
- 索引阶段: 视觉语言模型 (VLM) 为每张图像生成详细的说明文字(caption)或转录。对于承载型图表,VLM 会转录实际的数值和标签。
- 存储: 这些说明文字作为独立的文本块(chunks)存储在知识库中。
- 查询阶段: 检索器将说明文字视为普通文本。如果说明文字相关,模型会使用文本描述来回答查询并引用原始图像 URL。
这种架构确保了计算昂贵的“观察”图像的过程仅发生一次,将视觉数据转化为可检索、有依据的文本。
生产环境实施策略
图像过滤与分类
为了避免为“垃圾”图像(徽标、横幅、头像)生成说明文字的成本,Kapa.ai 使用了两步过滤机制:
- 启发式方法: 根据不支持的格式、较小的尺寸或极端的宽高比来丢弃图像。
- 零样本分类: 基于多模态嵌入的分类器会移除剩余的噪声。虽然这在清晰明确的图像上达到了 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 的结果中也产生了类似的改进。