RAG 检索增强生成的性能优化从检索到生成的延迟压缩一、RAG 的性能瓶颈在哪儿RAG(Retrieval-Augmented Generation,检索增强生成)是当前 AI 产品中最常用的架构模式:用户提问后,系统先在知识库中检索相关文档,然后把检索到的文档作为上下文拼接进 Prompt,再由大模型基于上下文生成回答。RAG 的完整流程包含三个步骤:用户问题理解(Query Understanding,可能包括问题改写、关键词提取)、文档检索(向量搜索 关键词搜索)、和生成(大模型基于检索结果生成回答)。其中,检索阶段的延迟通常占总延迟的 40-60%,是 RAG 最大的性能瓶颈。二、检索阶段的优化手段检索阶段的优化目标是:在不降低召回质量的前提下,减少检索耗时。向量索引优化。使用近似最近邻(ANN)搜索替代暴力搜索。Faiss 的 IVF 索引(倒排文件索引)可以将搜索时间复杂度从 O(n) 降到 O(√n),HNSW 索引(分层可导航小世界图)可以在高召回率下保持极快的搜索速度。关键参数调优:索引的 M 参数(HNSW 每层连接数,越大越精确但越慢),efSearch 参数(搜索时检查的候选数,越大越精确但越慢)。混合检索的并行化。很多 RAG 系统同时使用向量检索和关键词检索(BM25),然后合并结果。如果这两个检索是串行的(先向量、再关键词),会增加不必要的延迟。改为并行执行,延迟从「向量耗时 关键词耗时」变为「max(向量耗时,关键词耗时)」。分块策略的影响。文档分块的大小直接关系检索性能。块太大,检索精确度下降,且每个块中可能混合了多个主题;块太小,块的数量过多,检索速度下降。对于中文文档,500-1000 字符的块大小是一个合理的起点。三、生成阶段的上下文压缩检索到的文档往往包含大量冗余信息——用户问的是「如何重置密码」,检索结果中除了重置密码的步骤,还包含了账户安全设置、密码强度要求、密码历史记录等等不相关的内容。这些冗余上下文被塞进 Prompt,不仅增加了 Token 消耗,还延长了模型的推理时间。上下文压缩(Context Compression):在检索到文档后、发送给大模型之前,对检索到的内容进行压缩。最简单的方式是用一个小模型(如 GPT-4o-mini)对检索结果做摘要,只保留与用户问题相关的部分,再将摘要作为上下文送入大模型。Re-ranking(重排序):检索返回 Top-K 个文档后,用一个专门的重排序模型(如 Cohere Rerank、BGE Reranker)对结果进行精细排序,把最相关的 2-3 个文档选出来,丢弃剩余的。这样做既能提升回答质量(减少不相关噪声),也能减少 Prompt 长度、加速生成。四、缓存与预热:避免重复检索RAG 系统中,缓存的切入点有两个:检索缓存和生成缓存。检索缓存:对相同或相似的查询,缓存检索结果。将用户查询向量化后,用语义相似度匹配缓存中的历史查询,如果相似度超过阈值(如 0.95),直接返回缓存的检索结果。对于 FAQ 类产品,检索缓存的命中率可能超过 40%。生成缓存:对相同的问题,缓存生成结果。如果用户的问题与缓存的某个历史问题语义相似度极高,且检测到问题相同,可以直接返回缓存的回答,跳过整个 RAG 流程。对于确定性问答场景,生成缓存的收益极大。预热策略:在产品流量低谷时,预加载高频问题的检索结果到缓存中。如果你的产品有明显的「高频问题」(如「怎么注册」),可以在每天凌晨用这些高频问题跑一遍检索,把结果写入缓存。这样在白天流量高峰时,这些查询直接命中缓存,完全不消耗检索和生成算力。五、总结RAG 的性能优化,核心不是「用更快的硬件」,而是在检索和生成两个阶段,做减少计算量的策略。检索阶段:用 ANN 索引替代暴力搜索,并行执行向量检索和关键词检索,控制文档分块大小在合理范围。生成阶段:用上下文压缩减少 Prompt 长度,用重排序模型只保留最相关的文档。缓存方面:检索缓存和生成缓存都能显著降低延迟,预热策略在「高频问题」场景下效果最好。独立产品在做 RAG 时,建议先搭建最简单的实现(向量数据库 暴力搜索 原始结果),观察哪个环节的延迟最高,再针对性地做优化。不需要一步到位地实现所有优化手段——RAG 的性能优化是一个渐进的过程,在每一次延迟成为问题的点上,做刚好够用的改进。