AI百事通

从零搭建你的第一个RAG应用:基于LangChain和ChromaDB

📅 2026-07-03📰 ai_generated👁 1 次阅读
从零搭建你的第一个RAG应用:基于LangChain和ChromaDB
RAGLangChainChromaDB教程AI应用

从零搭建你的第一个RAG应用:基于LangChain和ChromaDB

RAG(检索增强生成)是目前最实用的AI应用范式之一,它允许大模型基于私有知识库回答问题,而无需微调。本文将带你使用LangChain和ChromaDB,在本地搭建一个完整的RAG应用。

一、什么是RAG?

RAG架构包含三个核心组件:

  1. 文档加载与分割:将PDF、Word等文档切分成片段
  2. 向量存储:将片段嵌入为向量并存储(如ChromaDB)
  3. 检索+生成:根据用户问题检索相关片段,交给LLM生成答案

二、环境准备

安装依赖

pip install langchain chromadb sentence-transformers pypdf

选择模型

  • 嵌入模型sentence-transformers/all-MiniLM-L6-v2(轻量,无需GPU)
  • LLM:使用OpenAI API或本地模型(如Ollama)

三、代码实现

1. 加载并分割文档

from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter

loader = PyPDFLoader("your_document.pdf")
documents = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
docs = text_splitter.split_documents(documents)
print(f"共分割为 {len(docs)} 个片段")

2. 创建向量存储

from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import Chroma

embeddings = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")
vectorstore = Chroma.from_documents(docs, embeddings, persist_directory="./chroma_db")

3. 构建检索链

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

llm = OpenAI(model_name="gpt-3.5-turbo", temperature=0)  # 或使用本地模型
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=vectorstore.as_retriever(search_kwargs={"k": 3})
)

4. 问答测试

query = "文档中提到了哪些关键指标?"
result = qa_chain.invoke(query)
print(result)

四、进阶优化

1. 改进检索质量

  • 使用 MultiQueryRetriever 生成多个相似问题
  • 添加 ContextualCompressionRetriever 过滤无关片段

2. 支持多种文件格式

  • 使用 UnstructuredFileLoader 加载txt、docx、markdown等

3. 添加记忆

  • 使用 ConversationBufferMemory 实现多轮对话

五、部署建议

  • 本地运行:使用Ollama部署Llama 3,无需API费用
  • 云端部署:使用Streamlit搭建前端,打包成Docker镜像

六、完整代码仓库

可访问 GitHub示例仓库 获取完整代码。

总结

通过本教程,你已学会搭建一个基本的RAG应用。你可以替换自己的文档,构建专属知识库。RAG的应用场景包括:企业知识问答、客服系统、个人助手等。动手试试吧!

提示:使用中文文档时,建议选择中文嵌入模型如 shibing624/text2vec-base-chinese