HiHuo
首页
博客
手册
工具
关于
首页
博客
手册
工具
关于
  • AI Agent 实战指南

    • AI Agent开发实战教程 (2024最新)
    • 第一章: AI Agent核心概念
    • 第二章: LangChain快速上手
    • 第三章: RAG系统实战
    • 第四章: Agent高级模式
    • 第五章: AutoGPT原理与实现
    • 第六章: 生产级Agent系统

第三章: RAG系统实战

RAG概念

RAG(Retrieval-Augmented Generation)= 检索增强生成

核心思想:

用户问题 → 检索相关文档 → 结合文档回答

优势:

  • 知识实时更新(无需重新训练)
  • 回答有据可查
  • 成本低(vs微调)

快速实战(15分钟)

1. 准备文档

# documents.txt
AI技术正在快速发展。
大语言模型可以理解和生成文本。
RAG系统结合了检索和生成。

2. 构建向量数据库

from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS

# 加载文档
loader = TextLoader("documents.txt")
documents = loader.load()

# 分割文本
text_splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

# 创建向量数据库
embeddings = OpenAIEmbeddings()
vectorstore = FAISS.from_documents(docs, embeddings)

3. 构建问答链

from langchain.chains import RetrievalQA
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(model="gpt-4", temperature=0)

qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever()
)

# 提问
result = qa_chain.invoke({"query": "什么是RAG?"})
print(result["result"])
# 输出:RAG系统结合了检索和生成...

进阶技术

1. 文档分割策略

# 按字符分割
CharacterTextSplitter(chunk_size=1000, chunk_overlap=200)

# 按Token分割
TokenTextSplitter(chunk_size=500, chunk_overlap=50)

# 递归分割(推荐)
RecursiveCharacterTextSplitter(
    chunk_size=1000,
    chunk_overlap=200,
    separators=["

", "
", "。", " ", ""]
)

2. 元数据过滤

from langchain.schema import Document

docs = [
    Document(page_content="...", metadata={"source": "doc1.pdf", "page": 1}),
    Document(page_content="...", metadata={"source": "doc2.pdf", "page": 5}),
]

# 检索时过滤
vectorstore.as_retriever(
    search_kwargs={"filter": {"source": "doc1.pdf"}}
)

3. 多查询检索

from langchain.retrievers import MultiQueryRetriever

retriever = MultiQueryRetriever.from_llm(
    retriever=vectorstore.as_retriever(),
    llm=llm
)

# 自动生成多个查询变体,提高召回率

下一章预告:Agent高级模式 - 多Agent协作、工具链设计、错误处理。

Prev
第二章: LangChain快速上手
Next
第四章: Agent高级模式