从原生检索到异构图:Native RAG、GraphRAG 与 NodeRAG 架构全景解析
Below is a comprehensive technical overview comparing Native RAG, GraphRAG, RAG 效果优化 (RAG optimization), and NodeRAG. We describe each approach’s core architecture, key components, and highlight Python snippets to illustrate typical implementations.
摘要
Retrieval-Augmented Generation (RAG) 是将检索到的外部知识与大语言模型 (LLM) 输出相结合的技术。Native RAG(基线 RAG)使用向量索引和相似度检索;GraphRAG 则在此基础上引入知识图谱结构,以捕捉实体间关系并指导检索与生成;RAG 效果优化 主要包含检索器精炼、索引策略与提示工程等技术;NodeRAG 进一步将异构图结构融入 RAG 流程,实现多层次、多类型节点的无缝整合,提升多跳推理能力。以下各节分别阐述它们的框架与组成,并给出 Python 示例。
1. Native RAG
1.1 架构概览
Native RAG(也称 Baseline RAG)流程通常分为两步:
- 检索(Retriever):将用户查询编码为向量,并在向量数据库(如 FAISS)中执行相似度搜索,返回最相关的文档切片或段落。
- 生成(Generator):将检索到的文本与原始查询一起拼接为提示,输入到 LLM(如 GPT-3/4),生成最终回答 (Welcome - GraphRAG)。
1.2 主要组件
- Embedding 模型(如 SentenceTransformers)
- 向量存储(FAISS、Milvus、Pinecone)
- 提示模板(Prompt Templates)
1.3 Python 示例
from sentence_transformers import SentenceTransformer
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer
import faiss# 1. 嵌入模型与向量索引
embedder = SentenceTransformer('all-MiniLM-L6-v2')
docs = ["doc1 text...", "doc2 text...", ...]
embs = embedder.encode(docs, convert_to_numpy=True)
index = faiss.IndexFlatL2(embs.shape[1])
index.add(embs)# 2. 检索
query = "What is RAG?"
q_emb = embedder.encode([query])
_, ids = index.search(q_emb, k=3)
retrieved = [docs[i]