📚 什么是 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 向量数据库
🔍 完整 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?")