RAG-02索引召回-Naive-RAG

本文属于 RAG 工程框架中的「2 索引与召回」环节,聚焦「Naive RAG」方法。可先阅读 RAG-00.方法概述 再进入本篇。

原理

Naive RAG 的最小闭环:Query -> 向量检。top-k -> 拼接上下。-> LLM 生成

1
2
3
4
5
6
flowchart LR
Q[Query] --> E[Embedding]
E --> VDB[Vector DB Top-k]
VDB --> C[Context 拼接]
C --> LLM[LLM]
LLM --> A[Answer]

关键。

  • 文档切块(chunk)长度、重叠率。
  • 向量模型是否匹配语料语言与领域。
  • top-k 太小漏召回,太大引入噪声。

优缺。

  • 优点:实现极快、依赖少、便于验证需求。
  • 缺点:复杂问题召回不足;无法处理多跳关系;对噪声敏感。

性能/资源

  • 离线成本:中(嵌。建索引)。
  • 在线时延:低到中(一次检。一次生成)。
  • GPU 需求:可选(由推理模型决定)。

应用场景

  • 企业内部 FAQ、制度问答。
  • 原型验证(POC)与 0-1 试点。

统一合成数据示例

输入数据片段

1
2
3
4
5
6
7
{
"query": "机票报销上限是多少?",
"docs": [
{"doc_id": "D01", "text": "机票报销上限 2000 元。"},
{"doc_id": "D02", "text": "火车票据实报销。"}
]
}

中间结果(向量召回 top-k)

1
2
3
4
[
{"rank": 1, "doc_id": "D01", "score": 0.86},
{"rank": 2, "doc_id": "D02", "score": 0.41}
]

最终生成示例(含引用)

1
2
3
4
{
"answer": "机票报销上限为 2000 元。",
"citations": [{"doc_id": "D01", "evidence_span": "机票报销上限 2000 元"}]
}

原始发表与工程实现

  • 代表性原始发表: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
2
3
4
5
flowchart LR
In[输入 Query 与知识] --> Core[方法核心计算]
Core --> Rank[匹配/路由/排序]
Rank --> Build[证据组装]
Build --> Out[答案与引用]

工程落地扩展示例

伪代码

1
2
3
4
5
def naive_rag_answer(query, vector_index, embedder, llm, top_k: int):
qv = embedder.encode(query)
hits = vector_index.topk(qv, k=top_k) # 仅一次向量检索
context = "\n\n".join(h.text for h in hits)
return llm.generate(prompt=build_prompt(query, context))

参数示例

1
2
3
4
5
embedding_model: bge-m3
top_k: 4
chunk_size: 256
chunk_overlap: 40
similarity: cosine

常见失败案例

  • 失败模式 1top-k 偏小,含关键数字的 chunk 未进上下文,答案漏约束。
  • 失败模式 2top-k 偏大,引入弱相关 chunk,模型被噪声带偏(Naive 无重排纠偏)。
  • 失败模式 3:embedding 与语料领域不匹配,相似度整体虚高/虚低,阈值形同虚设

Demo 数据带入计算示例

1
2
3
查询向量 q 与 chunk 向量 d1,d2 的余弦相似度:cos(q,d1)=0.86, cos(q,d2)=0.41。
top-k=1 仅注入 d1(含「2000 元」);top-k=2 额外注入 d2(弱相关「火车实报」)。
若任务只需数值,k=1 足够;若用户问句隐含多条款,Naive 易漏检——体现「无改写/无重排」的天花板。
-------------本文结束感谢您的阅读-------------