【AI大模型学习路线】第二阶段之RAG基础与架构——第六章(RAG基础与架构)RAG(Retrieval‑Augmented Generation)的经典结构与模块?
【AI大模型学习路线】第二阶段之RAG基础与架构——第六章(RAG基础与架构)RAG(Retrieval‑Augmented Generation)的经典结构与模块?
欢迎宝子们点赞、关注、收藏!欢迎宝子们批评指正!
祝所有的硕博生都能遇到好的导师!好的审稿人!好的同门!顺利毕业!
大多数高校硕博生毕业要求需要参加学术会议,发表EI或者SCI检索的学术论文会议论文。详细信息可关注VX “
学术会议小灵通
”或参考学术信息专栏:https://fighting.blog.csdn.net/article/details/147360609
前言
RAG 架构典型地分为七大模块:索引(Indexing)、查询编码(Query Encoder)、检索(Retriever)、上下文增强(Augmentation)、生成(Generator)、重排序/过滤(Reranker/Filter)和评估监控(Evaluation & Monitoring)。各模块环环相扣,实现“检索‑增强‑生成”闭环,有效提升大模型的时效性、准确性与可审计性。
1. 索引(Indexing)
目的:
- 将海量文档转为向量并构建高效索引,支持后续近似最近邻检索。
技术要点:
- 文本切分(chunking):固定长度、基于句法或文件格式切分,兼顾上下文完整性与检索粒度。
- 向量化模型:采用稠密(Dense)嵌入(如 Sentence‑Transformers)或混合稀疏+稠密方案(Hybrid Sparse+Dense)。
- 向量库:Faiss、Pinecone、Weaviate 等支持 ANN 检索,保证大规模文档下的低延迟检索。
2. 查询编码(Query Encoder)
功能:
- 将用户自然语言查询编码为向量,作为检索器的输入。
实现:
- 与文档嵌入模型共享参数(双塔模型)或单独预训练,再通过最大内积搜索(MIPS)匹配最相似文档。
- 可端到端微调:在生成任务上联合优化检索器与生成器,提高检索质量与 downstream 性能。
3. 检索(Retriever)
职责:
- 基于查询向量,在索引中召回 Top‑k 相关文档。
策略:
- 纯向量检索(Dense Retrieval)
- 稀疏检索(Sparse Retrieval,如 BM25)
- 混合检索(Hybrid Retrieval),结合稠密和稀疏信号提高召回与精度
模块化趋势:
- Modular RAG 将检索器拆分为可插拔子模块,支持不同检索算法和重排名器自由组合
4. 上下文增强(Augmentation)
作用:
- 将检索到的文档拼接或融合进原始查询,形成增强后的 prompt。
方法:
- 简单拼接:把 Top‑k 文本直接拼入 prompt
- 片段筛选:基于相似度或关键词过滤,保留最相关段落
- 结构化融合:将文档元信息(来源、时间戳)一并编码,提升可解释性与可审计性。
5. 生成(Generator)
目标:
- 在增强后的上下文上进行文本生成,输出最终回答或内容。
模型选择:
- GPT‑4、LLaMA、BART、T5 等 seq2seq/Decoder‑only 模型均可。
策略:
- 可采用 Beam Search、采样(top‑k、top‑p)等解码策略,并在生成时附带文档引用以降低hallucination。
6. 重排序与过滤(Reranker/Filter)
必要性:
- 初步检索有时召回噪声文档,需要二次排序提升精度。
实现:
- Cross‑encoder 重排序:将 query 与每个文档拼接,输入轻量级分类器评分
过滤策略:
- 基于文档可信度、时效性或来源权重剔除不合规内容。
7. 评估与监控(Evaluation & Monitoring)
评估指标:
- 检索阶段用 Recall、MRR;生成阶段用 ROUGE、BLEU、EM 和人工评估。
实时监控:
- 日志来源文档引用分布
- 用户反馈闭环,动态调整检索库与重排模型
- 异常检测(如生成内容偏离主题、低置信度)报警
模块间数据流 (Mermaid 图示)
flowchart LR
A[用户 Query] --> B[Query Encoder]
B --> C[Retriever<br/>(Index & Search)]
C --> D[Reranker/Filter]
D --> E[Augmentation<br/>(拼接 & 结构化)]
E --> F[Generator]
F --> G[输出答案 + 来源]
G --> H[评估与监控]
Python 代码示例:模块化 RAG 实现
下面示例用 Hugging Face Transformers 展示各模块的调用与协同:
from transformers import (
RagTokenizer, RagRetriever, RagSequenceForGeneration
)
# 1. 初始化:Tokenizer、Retriever(Indexing & Query Encoder)与 Generator
tokenizer = RagTokenizer.from_pretrained("facebook/rag-token-base") # Query & Doc 分词
retriever = RagRetriever.from_pretrained(
"facebook/rag-token-base",
index_name="exact", # 精确索引
passages_path="docs.json" # 已嵌入文档库
)
model = RagSequenceForGeneration.from_pretrained("facebook/rag-token-base") # Generator
def run_rag(query: str, top_k:int=5):
# 2. 查询编码 + 检索
inputs = tokenizer(query, return_tensors="pt")
# 3. 生成(内部执行检索、重排序、Augmentation & Generation)
generated_ids = model.generate(
input_ids=inputs["input_ids"],
attention_mask=inputs["attention_mask"],
num_return_sequences=1,
num_beams=2,
n_docs=top_k # 控制检索 Top‑k 文档
)
# 4. 解码输出
return tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
# 示例调用
answer = run_rag("什么是 RAG 架构的核心模块?", top_k=3)
print("回答:", answer)
RagRetriever
完成索引(Indexing)与查询编码(Query Encoder)并召回 Top‑k 文档generate
阶段自动执行重排序(Reranker)、上下文增强(Augmentation)与文本生成(Generator)- 参数
n_docs
精细控制检索模块的召回数量
通过上述经典结构与模块剖析,以及 Python 端到端示例,可见 RAG 如何以“模块化、可插拔”的方式,将检索与生成有效融合,为 AI 大模型在知识密集型场景中提供高准确性、低幻觉率与可审计的解决方案。