RAG 处理图片的正确姿势:索引时描述,而不是查询时看图
做 RAG 的人大多有个盲区:眼睛只盯着文字。 你花了两周调 chunk size,换了三种 embedding 模型,reranker 也加上了——《Rerank 在 RAG 中的角色:Bi-Encoder vs Cross-Encoder》里讲的那些优化你全做了。但回头一看,技术文档里的截图、架构图、参数表格,这些图片承载的信息,你的系统压根没碰。 这不是小问题。kapa.ai 的团队最近在 Hacker News 上分享了他们的生产实践(89 points),标题直白:How we index images for RAG。他们服务 200+ 客户,知识库里有数百万张图片,每天处理百万级查询。这篇文章把他们的方案拆开来看,顺便聊聊 ColPali 等另一条路线,以及你到底该选哪条。 图片在技术文档里到底干了什么 kapa.ai 把文档图片分成两类,这个分类非常实用。 说明型(illustrative):文字说"点击设置图标",旁边的截图标出了图标在哪、长什么样。图片让答案更直观,但信息本身在文字里也有——用户不看图也能做事,只是要多找一会儿。 承重型(load-bearing):接线图、参数规格表、认证矩阵、颜色可选表——这些图里的数值只存在于图片中。你不看图,就根本不知道答案。 他们跑了上千条真实客户问题验证:有图片上下文时,LLM 评委(McNemar 检验,p < 0.05)显著偏好带图片的答案。效果不是微调能弥补的那种——是用户能感知到的质变。 但问题来了:怎么把这些图片喂给 LLM? 查询时看图:一个看起来对、实际上贵到用不起的方案 直觉反应是:检索到相关 chunk 后,把它们引用的图片一起丢给多模态模型(GPT-5.1、Claude 4.6 Sonnet 等)。kapa.ai 测试了这个方案,发现三个结构性问题: 1. 贵得离谱。 原始图片让 GPT 单次查询成本增加 27%,Claude 增加 51%(Claude 把一张图编码成约 975 tokens,GPT 约 716)。kapa.ai 每天百万级查询,这笔钱根本花不起。 2. 塞不进去。 一个典型问题检索 10-30 个 chunk,平均引用 20-30 张图片,长尾能到 130 张。Claude 的 payload 上限 30 MB,OpenAI 的 50 MB——超过 20 张图就撞墙了。 ...