RAG(Retrieval-Augmented Generation,检索增强生成)是一种将检索与生成协同结合的技术。当大模型(如DeepSeek、Qwen、GPT)需要生成文本时,会先从外部知识库中检索相关信息,再基于检索到的内容生成答案。
在知识库的构建过程中,RAG通过向量数据库和动态更新机制,实现了高效的知识检索与内容生成;而在知识图谱的构建中,RAG则借助GraphRAG、Graphusion等框架,实现了实体关系的精准抽取与图谱的深度融合。
一、RAG
# 依赖安装:pip install langchain langchain-text-splitters
from langchain_text_splitters import RecursiveCharacterTextSplitter
# 示例长文本(替换为实际文本)
text = """自然语言处理(NLP)是人工智能领域的重要分支,涉及文本分析、机器翻译和情感分析等任务。分块技术可将长文本拆分为逻辑连贯的语义单元,便于后续处理。"""
# 初始化递归分块器(块大小300字符,重叠50字符保持上下文)
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=300,
chunk_overlap=50,
separators=["\n\n", "\n", "。", "!", "?"] # 优先按段落/句子分界[2,4](@ref)
)
# 执行分块
chunks = text_splitter.split_text(text)
# 打印分块结果
for i, chunk in enumerate(chunks):
print(f"Chunk {i+1}:\n{chunk}\n{'-'*50}")
# 依赖安装:pip install sentence-transformers faiss-cpu
from sentence_transformers import SentenceTransformer
from langchain_community.vectorstores import FAISS
# 1. 文本向量化(使用MiniLM-L6预训练模型)
model = SentenceTransformer('paraphrase-MiniLM-L6-v2')
embeddings = model.encode(chunks)
# 2. 向量存储到FAISS索引库
vector_db = FAISS.from_texts(
texts=chunks,
embedding=embeddings,
metadatas=[{"source": "web_data"}] * len(chunks) # 可添加元数据
)
# 保存索引到本地
vector_db.save_local("my_vector_db")
# 示例查询:检索相似文本
query = "什么是自然语言处理?"
query_embedding = model.encode([query])
scores, indices = vector_db.similarity_search_with_score(query_embedding, k=3)
print(f"Top 3相似块:{indices}")
二、知识库和知识图谱
RAG构建知识图谱的关键在于检索与生成的协同,其流程包括: