RAG架构进阶:从基础检索到GraphRAG
RAG架构进阶从基础检索到GraphRAG检索增强生成RAG已成为大语言模型解决知识时效性和领域适配问题的标准方案。但基础RAG向量检索提示拼接在面对复杂查询时暴露出明显短板无法捕捉实体关系、缺乏全局推理能力。GraphRAG的出现标志着RAG架构从语义匹配向结构理解的范式升级。本文将系统梳理RAG的技术演进并深入解析GraphRAG的实现原理。一、基础RAG的架构与局限1.1 标准RAG流水线from langchain.vectorstores import Chroma from langchain.embeddings import OpenAIEmbeddings class BasicRAG: def __init__(self, documents): self.embeddings OpenAIEmbeddings() self.vectorstore Chroma.from_documents( documents, self.embeddings ) self.llm ChatOpenAI() def query(self, question: str, k: int 3) - str: # 1. 向量检索Top-K相关文档 relevant_docs self.vectorstore.similarity_search(question, kk) # 2. 拼接上下文 context \n\n.join([doc.page_content for doc in relevant_docs]) # 3. LLM生成答案 prompt f基于以下上下文回答问题\n\n{context}\n\n问题{question} return self.llm.predict(prompt)1.2 基础RAG的固有缺陷| 问题类型 | 具体表现 | 根因 | |----------|----------|------| | 语义鸿沟 | 检索到表面相关但实质无关的文档 | 向量相似度≠语义相关性 | | 关系盲区 | 无法回答A和B有什么关系 | 丢失实体间关联信息 | | 全局缺失 | 无法回答总结全文档的主题分布 | 分段检索缺乏全局视图 | | 多跳推理 | 需要跨多个文档串联信息 | 单次检索无法覆盖推理链 |二、RAG增强策略从局部到全局2.1 多路召回与重排序class MultiWayRAG: def __init__(self): self.keyword_store BM25Retriever() # 关键词检索 self.vector_store Chroma() # 向量检索 self.reranker CrossEncoder(cross-encoder/ms-marco-MiniLM-L-6-v2) def retrieve(self, query, k10): # 多路召回 keyword_results self.keyword_store.retrieve(query, kk*2) vector_results self.vector_store.similarity_search(query, kk*2) # 合并去重 candidates self.deduplicate(keyword_results vector_results) # 重排序 pairs [(query, doc.page_content) for doc in candidates] scores self.reranker.predict(pairs) # 返回Top-K return [candidates[i] for i in np.argsort(scores)[-k:]]2.2 查询重写与多步检索class MultiStepRAG: def query(self, question): # 第一步分解查询 sub_queries self.decompose(question) # 第二步逐个子查询检索 all_evidence [] for sq in sub_queries: docs self.retrieve(sq) all_evidence.extend(docs) # 第三步基于证据链推理 answer self.reason(question, all_evidence) return answer def decompose(self, question): prompt f将复杂问题分解为2-3个子问题{question}\n输出JSON数组 return json.loads(self.llm.predict(prompt))三、GraphRAG知识图谱驱动的RAGGraphRAG由微软研究院提出核心思想是在检索阶段引入知识图谱的拓扑结构实现全局推理和关系感知。3.1 GraphRAG索引构建流程class GraphRAGIndexer: def __init__(self, llm): self.l