RAG 架构设计与核心流程
EXPLORE +
为什么需要 RAG?
大语言模型虽然知识渊博,但存在两个致命缺陷:知识截止(训练数据有截止日期,无法感知新知识)和幻觉(可能编造看似合理但事实错误的内容)。RAG(Retrieval-Augmented Generation)通过检索外部知识库来增强生成能力,像一个学者在回答问题前先去查资料。
# RAG 核心三阶段
# 1. 索引(Indexing):将文档切片、向量化,构建可检索的知识库
# 2. 检索(Retrieval):根据用户问题召回最相关的文档片段
# 3. 生成(Generation):基于检索结果 + 原始问题,生成可信回答
def rag_pipeline(question, knowledge_base):
# 阶段一:检索
query_embedding = embed(question) # 将问题向量化
relevant_docs = search(query_embedding, # 在向量库中语义检索
knowledge_base, top_k=5)
# 阶段二:生成
context = "\n\n".join(relevant_docs) # 拼接检索到的上下文
prompt = f"基于以下资料:\n{context}\n\n回答:{question}"
answer = llm.generate(prompt) # 让 LLM 基于上下文回答
return answerRAG 的哲学意义
RAG 的核心理念是:真正的智能不在于记住一切,而在于知道在哪里找到答案。就像一位博学之士,不在于脑中存了多少本书,而在于知道遇到问题时该翻开哪本书。RAG 将 LLM 从「背诵者」转变为「研究者」——不是依赖训练时学到的知识,而是在回答的当下主动查阅资料。这种「检索→思考→回答」的范式,比纯粹的参数化记忆更接近人类智能的本质。
完整 RAG 系统架构
用户提问
↓
1. 查询理解(Query Understanding)
├── 查询改写(Query Rewriting):"transformer 注意力机制" → "transformer 的注意力机制是什么?有哪些类型?"
├── 查询扩展(Query Expansion):用 LLM 生成同义问题,多角度检索
└── 查询分解(Query Decomposition):复杂问题拆解为子问题
↓
2. 检索(Retrieval)
├── 稠密检索(Dense Retrieval):语义嵌入相似度搜索
├── 稀疏检索(Sparse Retrieval):BM25 关键词匹配
└── 混合检索(Hybrid Search):加权融合两种检索结果
↓
3. 重排序(Reranking)
└── Cross-encoder 精排:对召回结果逐对打分,过滤不相关信息
↓
4. 上下文构建(Context Construction)
├── 窗口扩展:以检索到的 chunk 为中心,展开其上下文
├── 去重融合:合并信息重叠的文档片段
└── 压缩精简:只保留与问题最相关的句子
↓
5. 生成(Generation)
├── 引用标注:在生成内容中标注信息来源
├── 幻觉检测:LLM 自我评估回答的可信度
└── 溯源验证:确保每个陈述都有资料支撑
↓
用户收到回答 + 引用来源