RAG(Retrieval-Augmented Generation,检索增强生成)技术通过检索增强生成,显著提升了知识问答的准确性和时效性。在构建知识库时,RAG通过向量数据库和动态更新机制,实现了高效的知识检索与生成;在构建知识图谱时,RAG通过GraphRAG和Graphusion等框架,实现了实体关系的精准抽取与图谱融合。

一、RAG
-
检索:从外部知识库(如文档、数据库)中搜索与问题相关的信息。
-
增强:将检索结果作为上下文输入,辅助生成模型理解问题背景。
-
生成:基于检索内容和模型自身知识,生成连贯、准确的回答。

Prompt + RAG 如何实战?结合 Prompt 工程与 RAG(检索增强生成) 的实战应用需围绕数据准备、检索优化、生成控制等环节展开。
# 依赖安装:pip install langchain langchain-text-splittersfrom langchain_text_splitters import RecursiveCharacterTextSplitter# 示例长文本(替换为实际文本)text = """自然语言处理(NLP)是人工智能领域的重要分支,涉及文本分析、机器翻译和情感分析等任务。分块技术可将长文本拆分为逻辑连贯的语义单元,便于后续处理。"""# 初始化递归分块器(块大小300字符,重叠50字符保持上下文)text_splitter = RecursiveCharacterTextSplitter( chunk_size=300, chunk_overlap=50, separators=["nn", "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-cpufrom sentence_transformers import SentenceTransformerfrom 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}")

二、知识库和知识图谱
知识库(Knowledge Base)是什么?知识库是结构化、易操作的知识集群,通过系统性整合领域相关知识(如理论、事实、规则等),为问题求解、决策支持和知识共享提供基础平台。
RAG构建知识库的核心在于将外部知识检索与大语言模型生成能力结合,通过高效检索为生成提供上下文支持,从而提升答案的准确性和时效性。(实战的重点在文本分块Chunking和向量化Embedding)

RAG构建知识图谱的关键在于检索与生成的协同,其流程包括:
- 数据预处理:将文档分割为文本块(chunking),并通过命名实体识别(NER)提取实体与关系。
- 知识图谱索引:基于提取的实体与关系,构建初始知识图谱后,运用聚类算法(例如Leiden算法)对图谱中的节点进行社区划分。
- 检索增强:在用户查询时,通过本地搜索(基于实体)或全局搜索(基于数据集主题)增强上下文,提升生成答案的准确性