AI百事通

从零搭建RAG系统:基于LangChain和Chroma的实战教程

📅 2026-07-01📰 ai_generated👁 1 次阅读
从零搭建RAG系统:基于LangChain和Chroma的实战教程
RAGLangChainChroma检索增强生成实战教程

什么是RAG?

检索增强生成(Retrieval-Augmented Generation)通过将外部知识库与LLM结合,解决了大模型知识滞后和幻觉问题。本文实战教程将使用LangChain作为编排框架,Chroma作为向量数据库。

环境准备

pip install langchain chromadb sentence-transformers pypdf

Step 1: 加载文档

from langchain.document_loaders import PyPDFLoader

loader = PyPDFLoader("knowledge_base.pdf")
docs = loader.load()

Step 2: 文档切分

from langchain.text_splitter import RecursiveCharacterTextSplitter

text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50
)
chunks = text_splitter.split_documents(docs)

Step 3: 创建向量存储

from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma

embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vectorstore = Chroma.from_documents(chunks, embeddings)

Step 4: 构建检索链

from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

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

Step 5: 添加对话记忆(进阶)

from langchain.memory import ConversationBufferMemory
from langchain.chains import ConversationalRetrievalChain

memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
conversation_chain = ConversationalRetrievalChain.from_llm(
    llm=llm,
    retriever=vectorstore.as_retriever(),
    memory=memory
)

测试运行

query = "什么是RAG?"
result = qa_chain.run(query)
print(result)

优化技巧

1. 选择更好的嵌入模型

  • 中文场景推荐 BAAI/bge-large-zh-v1.5
  • 多语言场景推荐 intfloat/multilingual-e5-large

2. 调整检索策略

  • MMR:增加结果多样性
  • 相似度阈值:过滤低相关片段
retriever = vectorstore.as_retriever(
    search_type="mmr",
    search_kwargs={"k": 5, "fetch_k": 20}
)

3. 混合检索

  • 结合稀疏检索(BM25)和密集检索(嵌入)
from langchain.retrievers import EnsembleRetriever

bm25_retriever = ...
ensemble_retriever = EnsembleRetriever(
    retrievers=[bm25_retriever, dense_retriever],
    weights=[0.5, 0.5]
)

总结

通过本教程,你已掌握搭建RAG系统的核心流程。实际应用中,建议根据文档类型和查询特点调整切分策略和检索参数。完整的代码仓库已上传至GitHub,欢迎Star。