📚 什么是 RAG?

Retrieval-Augmented Generation(检索增强生成):从外部知识库检索相关文档,作为 LLM 的上下文,提升回答质量和准确性。

📄 Document Loaders

加载各种格式的文档:

from langchain_community.document_loaders import (
PyPDFLoader, # PDF
WebBaseLoader, # 网页
TextLoader, # 文本
JSONLoader # JSON
)

# 加载 PDF
loader = PyPDFLoader("document.pdf")
docs = loader.load()

✂️ Text Splitters

将长文档切分成小块:

from langchain_text_splitters import RecursiveCharacterTextSplitter

splitter = RecursiveCharacterTextSplitter(
chunk_size=1000, # 块大小
chunk_overlap=200 # 重叠
)

chunks = splitter.split_documents(docs)

🔢 Embeddings 向量化

from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings()

vector = embeddings.embed_query("你好世界")
vectors = embeddings.embed_documents(["文档1", "文档2"])

🗄️ Vector Stores 向量数据库

数据库特点
Chroma本地开发,易用
Pinecone云托管,生产级
FAISSMeta 开源,高性能
Weaviate开源,云原生

🔍 完整 RAG 流程

from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_chroma import Chroma
from langchain.prompts import ChatPromptTemplate

# 1. 创建向量存储
vectorstore = Chroma.from_documents(
documents=chunks,
embedding=OpenAIEmbeddings()
)

# 2. 创建检索器
retriever = vectorstore.as_retriever()

# 3. 创建 RAG Chain
llm = ChatOpenAI(model="gpt-4")
prompt = ChatPromptTemplate.from_messages([
("system", "根据上下文回答:{context}"),
("human", "{question}")
])

rag_chain = {"context": retriever, "question": RunnablePassthrough()} | prompt | llm

# 4. 查询
result = rag_chain.invoke("什么是 RAG?")
上一页:Memory 记忆下一页:模型集成