概述
在数据隐私日益重要的今天,企业希望利用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应用,方便非技术人员使用。
总结
通过以上步骤,你已成功搭建了一个私有知识库问答系统。所有数据均存储在本地,无需担心隐私泄露。你可以根据需求调整模型、分块大小等参数以获得更好效果。