AI百事通

从零搭建私有知识库:基于LangChain+本地模型实战教程

📅 2026-07-19📰 ai_generated👁 1 次阅读
从零搭建私有知识库:基于LangChain+本地模型实战教程
LangChain知识库本地部署RAG实战教程

概述

在数据隐私日益重要的今天,企业希望利用AI处理内部文档,但又担心数据外泄。本教程将教你搭建一个基于检索增强生成(RAG)的私有知识库,所有组件均在本地运行。

环境准备

硬件要求

  • CPU:8核以上
  • 内存:32GB以上
  • 硬盘:50GB可用空间
  • GPU(可选):NVIDIA RTX 3060以上,显存8GB以上

软件依赖

  • Python 3.10+
  • Ollama(用于本地模型部署)
  • LangChain(Python库)
  • ChromaDB(向量数据库)

步骤一:部署本地模型

使用Ollama部署Llama 3 8B模型:

# 安装Ollama
curl -fsSL https://ollama.com/install.sh | sh
# 下载并运行模型
ollama pull llama3
ollama run llama3

验证模型可用后,停止运行并设置为后台服务。

步骤二:安装Python依赖

pip install langchain langchain-community chromadb sentence-transformers

步骤三:准备文档

将需要索引的文档放入./docs文件夹,支持PDF、TXT、Markdown等格式。

步骤四:构建知识库脚本

创建build_kb.py

from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma

# 加载文档
loader = DirectoryLoader('./docs', glob='**/*.pdf', show_progress=True)
docs = loader.load()

# 分割文本
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
splits = text_splitter.split_documents(docs)

# 创建嵌入
embeddings = HuggingFaceEmbeddings(model_name='all-MiniLM-L6-v2')

# 存入向量数据库
vectorstore = Chroma.from_documents(documents=splits, embedding=embeddings, persist_directory='./chroma_db')
vectorstore.persist()

运行脚本生成向量库。

步骤五:创建问答接口

创建qa.py

from langchain.chains import RetrievalQA
from langchain.llms import Ollama
from langchain.vectorstores import Chroma
from langchain.embeddings import HuggingFaceEmbeddings

# 加载向量库
embeddings = HuggingFaceEmbeddings(model_name='all-MiniLM-L6-v2')
vectorstore = Chroma(persist_directory='./chroma_db', embedding_function=embeddings)

# 初始化本地LLM
llm = Ollama(model='llama3', temperature=0)

# 创建问答链
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vectorstore.as_retriever(search_kwargs={'k': 3}),
    return_source_documents=True
)

# 测试
query = '公司的报销流程是什么?'
result = qa_chain({'query': query})
print(result['result'])

步骤六:启动Web界面(可选)

使用Gradio或Streamlit封装成Web应用,方便非技术人员使用。

总结

通过以上步骤,你已成功搭建了一个私有知识库问答系统。所有数据均存储在本地,无需担心隐私泄露。你可以根据需求调整模型、分块大小等参数以获得更好效果。