RAG基本概念
发布于 2 个月前 作者 pangguoming 102 次浏览 来自 RAG

1. 什么是 RAG?

RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合信息检索和大模型生成的AI架构,主要用于提升大模型的知识准确性和上下文理解能力。

核心思想:

检索(Retrieval): 从外部知识库(如数据库、文档、网页)获取相关信息。 生成(Generation): 将检索到的信息输入大模型(如GPT),让其基于这些信息生成更准确、可控的回答。 为什么需要 RAG?

解决知识“遗忘”问题:基础大模型的知识可能过时,RAG可以引入最新信息。 降低幻觉(Hallucination) :模型可能会编造信息,而RAG提供了可验证的外部数据,提高可信度。 支持私有数据:可以让大模型使用企业内部文档,而不需要重新训练。

2. RAG 的核心组件

  1. 数据存储(知识库)

结构化数据:SQL数据库、NoSQL数据库(MongoDB) 非结构化数据:PDF、网页、文本文件 向量数据库(RAG的关键):存储文本嵌入(embeddings)并支持高效检索。

  1. 嵌入模型(Embeddings)

把文本转换成向量表示,方便搜索。 常见嵌入模型: OpenAI Embeddings(text-embedding-ada-002) BAAI BGE(中文推荐) Cohere、Hugging Face 的 embedding 模型

  1. 向量数据库(Vector Database)

存储和查询文本向量,检索相关信息。 主流向量数据库: FAISS(轻量、本地) Weaviate、ChromaDB(开源) Pinecone、Milvus(云端)

  1. 检索(Retrieval)

基于相似度的检索(Top-K 近邻搜索) 语义搜索(通过 embeddings 计算相似度) 混合搜索(Hybrid Search) :结合关键字搜索 + 语义搜索

  1. 生成(LLM Response)

用大模型(如GPT-4、Claude、Llama)结合检索到的信息,生成回答。

3. RAG 的工作流程

(1)数据准备

收集和清理数据(PDF、数据库、网页) 预处理数据(去重、拆分文本) 用嵌入模型将数据转换成向量,并存入向量数据库 (2)查询处理

用户输入问题 对用户问题进行嵌入计算,转成向量 在向量数据库中查找最相关的文档(Top-K) (3)信息融合

结合检索到的文档,构建 Prompt 让 LLM(大模型)基于上下文生成答案 示例(简化版):

用户问:"如何优化库存管理?" RAG 先从数据库找出相关库存管理文档 把这些文档的关键信息交给 GPT-4 进行总结 GPT-4 生成精准回答,并附带信息来源

4. RAG 进阶优化

✅ 1. Chunking(文本分块)

长文档拆成小段(比如每 500 个 Token 一块),避免检索不到核心内容。 ✅ 2. 多模态 RAG

除了文本,还可以检索 图片、表格、代码 等数据。 ✅ 3. RAG + 记忆

让模型记住用户的历史提问,提高连续对话能力(如Chatbot)。 ✅ 4. RAG + 评分机制

用 ReRanker 对检索的内容排序,提高相关性。 ✅ 5. RAG + 反馈优化

让用户反馈答案是否有用,并用 Reinforcement Learning 进一步优化 RAG。

5. RAG 实践(动手实验)

使用 LangChain 搭建一个 RAG 系统 LangChain 是一个专门用于 LLM 应用开发的 Python 框架,它支持 RAG 组件的集成。

安装依赖

pip install langchain openai faiss-cpu tiktoken

代码示例(RAG 小系统)

from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.document_loaders import TextLoader
from langchain.llms import OpenAI

# 1. 加载文档并拆分
loader = TextLoader("data.txt")  
documents = loader.load()  

# 2. 转换为向量并存入FAISS数据库
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(documents, embeddings)

# 3. 用户查询 & 检索相关文档
query = "如何优化库存管理?"
retrieved_docs = vectorstore.similarity_search(query, k=3)

# 4. 结合检索结果,构造 Prompt 并调用 GPT
context = "\n\n".join([doc.page_content for doc in retrieved_docs])
prompt = f"根据以下内容回答问题:\n{context}\n\n问题: {query}"
llm = OpenAI()
response = llm(prompt)

print(response)

这个代码实现了:

加载文本数据 计算文本向量,存入 FAISS 向量数据库 根据用户问题检索相关文档 调用 GPT 生成答案

回到顶部