本文属于 RAG 工程框架中的「2 索引与召回」环节,聚焦「Naive RAG」方法。可先阅读 RAG-00.方法概述 再进入本篇。
原理
Naive RAG 的最小闭环:Query -> 向量检。top-k -> 拼接上下。-> LLM 生成。
1 | flowchart LR |
关键。
- 文档切块(chunk)长度、重叠率。
- 向量模型是否匹配语料语言与领域。
top-k太小漏召回,太大引入噪声。
优缺。
- 优点:实现极快、依赖少、便于验证需求。
- 缺点:复杂问题召回不足;无法处理多跳关系;对噪声敏感。
性能/资源
- 离线成本:中(嵌。建索引)。
- 在线时延:低到中(一次检。一次生成)。
- GPU 需求:可选(由推理模型决定)。
应用场景
- 企业内部 FAQ、制度问答。
- 原型验证(POC)与 0-1 试点。
统一合成数据示例
输入数据片段
1 | { |
中间结果(向量召回 top-k)
1 | [ |
最终生成示例(含引用)
1 | { |
原始发表与工程实现
- 代表性原始发表:RAG (Lewis et al., 2020)。
- 核心解决问题:解决外部知识注入生成模型。
- 成熟实现工具:FAISS, Milvus, Qdrant, bge/e5。
详细原理拆解
- 标准链路 q->embed->topk->prompt->LLM,关键公式 score(q,d)=cos(e_q,e_d)。
- 典型实现可拆为:输入预处理 -> 方法核心计算 -> 候选/证据构建 -> 生成与引用。
- 工程调优重点:质量(准确率/引用率)与成本(时延/token)的联合优化。
1 | flowchart LR |
工程落地扩展示例
伪代码
1 | def naive_rag_answer(query, vector_index, embedder, llm, top_k: int): |
参数示例
1 | embedding_model: bge-m3 |
常见失败案例
- 失败模式 1:top-k 偏小,含关键数字的 chunk 未进上下文,答案漏约束。
- 失败模式 2:top-k 偏大,引入弱相关 chunk,模型被噪声带偏(Naive 无重排纠偏)。
- 失败模式 3:embedding 与语料领域不匹配,相似度整体虚高/虚低,阈值形同虚设。
Demo 数据带入计算示例
1 | 查询向量 q 与 chunk 向量 d1,d2 的余弦相似度:cos(q,d1)=0.86, cos(q,d2)=0.41。 |