【大模型知识】Chroma + Ollama + Llama 3.1 搭建本地知识库

搭建本地知识库

    • [✅ 一、整体架构设计(RAG + 向量检索 + 本地 LLM)](#✅ 一、整体架构设计(RAG + 向量检索 + 本地 LLM))
    • [🧰 二、推荐技术栈(2026 年最佳实践)](#🧰 二、推荐技术栈(2026 年最佳实践))
    • [🛠️ 三、具体搭建步骤(以 Chroma + Ollama + Llama 3.1 为例)](#🛠️ 三、具体搭建步骤(以 Chroma + Ollama + Llama 3.1 为例))
      • [步骤 1:安装基础环境](#步骤 1:安装基础环境)
      • [步骤 2:安装 Python 依赖](#步骤 2:安装 Python 依赖)
      • [步骤 3:准备知识文档](#步骤 3:准备知识文档)
      • [步骤 4:构建向量知识库(Python 脚本)](#步骤 4:构建向量知识库(Python 脚本))
      • [步骤 5:启动问答服务(RAG 推理)](#步骤 5:启动问答服务(RAG 推理))
    • [🔒 四、安全与性能优化建议](#🔒 四、安全与性能优化建议)
      • [1. **隐私保护**](#1. 隐私保护)
      • [2. **性能调优**](#2. 性能调优)
      • [3. **中文增强**](#3. 中文增强)
    • [🧪 五、验证知识库效果](#🧪 五、验证知识库效果)
    • [📦 六、进阶扩展方向](#📦 六、进阶扩展方向)
    • [✅ 总结:你的本地知识库技术栈](#✅ 总结:你的本地知识库技术栈)

作为大模型开发人员,搭建一套 本地私有知识库系统 (Local RAG Pipeline)是提升 AI 助手专业性、保障数据安全、避免幻觉的关键基础设施。以下是一套 经过生产验证、开源免费、支持中文、可扩展性强 的技术栈方案与详细搭建步骤。

✅ 一、整体架构设计(RAG + 向量检索 + 本地 LLM)

原始文档

(PDF/Word/TXT/Markdown)
文档解析 & 分块
向量化

(Embedding)
向量数据库
大模型 Agent
LLM 推理引擎

(本地运行)
用户问答

🧰 二、推荐技术栈(2026 年最佳实践)

组件 推荐方案 选择理由
文档解析 Unstructured + PyPDF2 / docx2txt 支持 PDF/Word/PPT/HTML,保留表格结构
文本分块 LangChain RecursiveCharacterTextSplitter 智能按段落/句子切分,避免语义割裂
嵌入模型(Embedding) BAAI/bge-large-zh-v1.5 (中文)或 nomic-ai/nomic-embed-text-v1.5(多语言) 中文 SOTA,4096 上下文,HuggingFace 开源
向量数据库 ChromaDB (轻量)或 Qdrant(高性能) Chroma:单机文件存储,零配置Qdrant:支持过滤、分布式,适合未来扩展
大模型推理 Ollama + Llama 3.1 8B/70BvLLM(高吞吐) Ollama:一键启动,API 兼容 OpenAIvLLM:PagedAttention,吞吐提升 24x
应用框架 LangChainLlamaIndex LangChain:生态丰富,调试工具完善

💡 为什么不用 Elasticsearch?

虽然 ES 支持向量检索(≥8.0),但配置复杂、资源占用高。Chroma/Qdrant 专为 embedding 设计,更轻量高效。

🛠️ 三、具体搭建步骤(以 Chroma + Ollama + Llama 3.1 为例)

步骤 1:安装基础环境

bash 复制代码
# 安装 Python ≥3.10
sudo apt install python3-pip

# 安装 Ollama(自动下载 Llama 3)
curl -fsSL https://ollama.com/install.sh | sh

# 启动 Ollama 服务(后台运行)
ollama serve &

步骤 2:安装 Python 依赖

bash 复制代码
pip install langchain chromadb unstructured PyPDF2 python-docx sentence-transformers

步骤 3:准备知识文档

将你的知识文件放入 ./docs/ 目录,支持:

  • .pdf, .docx, .txt, .md, .html

步骤 4:构建向量知识库(Python 脚本)

创建 build_kb.py

python 复制代码
from langchain.document_loaders import DirectoryLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma
import os

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

# 2. 文本分块(按字符递归切分)
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=500,
    chunk_overlap=50,
    separators=["\n\n", "\n", "。", "!", "?", ";", " ", ""]
)
chunks = text_splitter.split_documents(docs)

# 3. 加载中文 Embedding 模型(首次运行会自动下载 ~1.3GB)
embeddings = HuggingFaceEmbeddings(
    model_name="BAAI/bge-large-zh-v1.5",
    model_kwargs={'device': 'cuda'}  # 若无 GPU 改为 'cpu'
)

# 4. 存入 Chroma 向量库(持久化到 ./chroma_db)
vectorstore = Chroma.from_documents(
    documents=chunks,
    embedding=embeddings,
    persist_directory="./chroma_db"
)
vectorstore.persist()
print(f"✅ 知识库构建完成!共 {len(chunks)} 个片段")

运行:

bash 复制代码
python build_kb.py

⏱️ 首次运行需下载模型(约 10--30 分钟),后续秒级加载。

步骤 5:启动问答服务(RAG 推理)

创建 query_kb.py

python 复制代码
from langchain.vectorstores import Chroma
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.llms import Ollama
from langchain.chains import RetrievalQA

# 加载向量库
embeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-large-zh-v1.5")
vectorstore = Chroma(persist_directory="./chroma_db", embedding_function=embeddings)

# 初始化本地 LLM(Ollama 需提前 pull 模型)
llm = Ollama(model="llama3:8b", temperature=0.1)

# 构建 RAG 链
qa_chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=vectorstore.as_retriever(search_kwargs={"k": 3}),
    return_source_documents=True
)

# 问答循环
while True:
    query = input("\n❓ 请输入问题(输入 'quit' 退出): ")
    if query == "quit":
        break
    
    result = qa_chain({"query": query})
    print(f"\n💡 回答:\n{result['result']}")
    
    # 显示引用来源
    print("\n📚 参考片段:")
    for i, doc in enumerate(result["source_documents"]):
        print(f"[{i+1}] {doc.page_content[:100]}...")

首次运行前,拉取 Llama 3 模型:

bash 复制代码
ollama pull llama3:8b  # 或 llama3:70b(需 48GB+ 内存)

运行问答:

bash 复制代码
python query_kb.py

🔒 四、安全与性能优化建议

1. 隐私保护

  • 所有数据仅在本地处理,不上传任何云服务
  • 向量库文件(./chroma_db)可加密存储(如使用 gocryptfs

2. 性能调优

场景 优化方案
GPU 资源充足 使用 vLLM 替代 Ollama:pip install vllm + --model meta-llama/Llama-3.1-8B-Instruct
大文档集(>10万页) 改用 Qdrantdocker run -p 6333:6333 qdrant/qdrant
低延迟要求 将 Embedding 模型转为 ONNX 格式(提速 2--3x)

3. 中文增强

  • text_splitterseparators 中加入中文标点(已包含)
  • 使用 BGE-M3 模型(支持多语言+稀疏检索,2024 新 SOTA)

🧪 五、验证知识库效果

测试用例:

  1. 事实性问题

    "根据文档,公司2025年战略目标是什么?"

    → 应准确引用原文片段

  2. 跨文档推理

    "对比A产品和B产品的技术参数"

    → 应聚合多个文档信息

  3. 拒答能力

    "公司的股票代码是多少?"(若文档未提及)

    → 应回答"知识库中未找到相关信息"

📦 六、进阶扩展方向

需求 方案
Web 界面 集成 GradioStreamlit
自动更新 监听 ./docs 目录变动,增量更新向量库
多模态支持 Donut 解析 PDF 表格,转为结构化文本
Agent 能力 接入 LangGraph 实现多跳推理

✅ 总结:你的本地知识库技术栈

组件 选用方案 启动命令
LLM Ollama + Llama 3.1 8B ollama run llama3:8b
Embedding BAAI/bge-large-zh-v1.5 自动加载
向量库 ChromaDB ./chroma_db 文件夹
框架 LangChain pip install langchain

💡 总耗时:环境搭建 < 30 分钟,知识库构建速度 ≈ 100 页/分钟(RTX 4090)。

相关推荐
凉忆-5 小时前
llama-factory训练大模型
python·pip·llama
xiucai_cs20 小时前
AI RAG 本地知识库实战
人工智能·知识库·dify·rag·ollama
zhangfeng113320 小时前
大模型微调时 Firefly(流萤)和 LlamaFactory(LLaMA Factory)这两个工具/框架之间做出合适的选择
人工智能·llama
love530love21 小时前
技术复盘:llama-cpp-python CUDA 编译实战 (Windows)
人工智能·windows·python·llama·aitechlab·cpp-python·cuda版本
猿小羽1 天前
RAG 入门与实践指南
自然语言处理·知识库·向量检索·rag·ai实战·检索增强生成
玄同7651 天前
Llama.cpp 全实战指南:跨平台部署本地大模型的零门槛方案
人工智能·语言模型·自然语言处理·langchain·交互·llama·ollama
玄同7651 天前
LangChain v1.0+ Retrieval模块完全指南:从文档加载到RAG实战
人工智能·langchain·知识图谱·embedding·知识库·向量数据库·rag
zhangfeng11331 天前
大模型微调主要框架 Firefly vs LLaMA Factory 全方位对比表
人工智能·语言模型·开源·llama
阿尔的代码屋2 天前
[大模型实战 01] 本地大模型初体验:Ollama 部署与 Python 调用指南
qwen·modelscope·大模型实战·ollama·大模型部署