news 2026/4/27 23:08:26

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【大模型知识】Chroma + Ollama + Llama 3.1 搭建本地知识库

搭建本地知识库

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

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

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

原始文档
(PDF/Word/TXT/Markdown)

文档解析 & 分块

向量化
(Embedding)

向量数据库

大模型 Agent

LLM 推理引擎
(本地运行)

用户问答

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

组件推荐方案选择理由
文档解析Unstructured+PyPDF2/docx2txt支持 PDF/Word/PPT/HTML,保留表格结构
文本分块LangChainRecursiveCharacterTextSplitter智能按段落/句子切分,避免语义割裂
嵌入模型(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
应用框架LangChainLlamaIndexLangChain:生态丰富,调试工具完善

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

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

步骤 1:安装基础环境

# 安装 Python ≥3.10sudoaptinstallpython3-pip# 安装 Ollama(自动下载 Llama 3)curl-fsSL https://ollama.com/install.sh|sh# 启动 Ollama 服务(后台运行)ollama serve&

步骤 2:安装 Python 依赖

pipinstalllangchain chromadb unstructured PyPDF2 python-docx sentence-transformers

步骤 3:准备知识文档

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

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

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

创建build_kb.py

fromlangchain.document_loadersimportDirectoryLoaderfromlangchain.text_splitterimportRecursiveCharacterTextSplitterfromlangchain.embeddingsimportHuggingFaceEmbeddingsfromlangchain.vectorstoresimportChromaimportos# 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)}个片段")

运行:

python build_kb.py

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

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

创建query_kb.py

fromlangchain.vectorstoresimportChromafromlangchain.embeddingsimportHuggingFaceEmbeddingsfromlangchain.llmsimportOllamafromlangchain.chainsimportRetrievalQA# 加载向量库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)# 问答循环whileTrue:query=input("\n❓ 请输入问题(输入 'quit' 退出): ")ifquery=="quit":breakresult=qa_chain({"query":query})print(f"\n💡 回答:\n{result['result']}")# 显示引用来源print("\n📚 参考片段:")fori,docinenumerate(result["source_documents"]):print(f"[{i+1}]{doc.page_content[:100]}...")

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

ollama pull llama3:8b# 或 llama3:70b(需 48GB+ 内存)

运行问答:

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实现多跳推理

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

组件选用方案启动命令
LLMOllama + Llama 3.1 8Bollama run llama3:8b
EmbeddingBAAI/bge-large-zh-v1.5自动加载
向量库ChromaDB./chroma_db文件夹
框架LangChainpip install langchain

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/25 23:06:11

接口测试用例怎么写?一文1600字教你写一个优秀的接口测试的测试用例

一、用例设计1 1、接口测试概念 接口测试&#xff1a;测试系统间接口的一种测试&#xff0c;测试的对象主要是接口&#xff0c;主要是测试外部系统与所测系统之间以及内部系统之间的交互点 2、接口测试方法 a、可以通过开发脚本代码进行测试 b、可以通过开源免费的接口调用…

作者头像 李华
网站建设 2026/4/25 14:50:56

LoadRunner技巧之思考时间设置

用户访问某个网站或软件&#xff0c;一般不会不停地做个各种操作&#xff0c;例如一次查询&#xff0c;用户需要时间查看查询的结果是否是自己想要的。例如一次订单提交&#xff0c;用户需要时间核对自己填写的信息是否正确等。 也就是说用户在做某些操作时&#xff0c;是会有…

作者头像 李华
网站建设 2026/4/23 19:34:27

AI智能体是否胜任任务?判断何时委派工作的3种方法

你可能已经听说过这样的观点&#xff1a;AI智能体充当人类同事的"协作者"&#xff0c;实际上成为了劳动力的延伸。挑战在于解码它们最适合执行什么工作——这并不是一个简单的问题。 有些任务适合自动化&#xff0c;而另一些则更适合手动处理。但许多任务处于灰色地带…

作者头像 李华
网站建设 2026/4/24 12:27:07

LoadRunner性能测试基本步骤

前言 本文旨在指导初学者使用LoadRunner进行基础的性能测试。 我们在接到一个性能测试任务的时候&#xff0c;需要从以下几点考虑&#xff1a;我们的测试对象是什么&#xff0c;测试要求是什么&#xff0c;测试环境怎么部署的&#xff0c;业务规模如何&#xff0c;哪些业务点是…

作者头像 李华
网站建设 2026/4/23 5:14:15

字符串相乘

求解代码 public String multiply(String num1, String num2) {if ("0".equals(num1) || "0".equals(num2)) {return "0";}int len1 num1.length();int len2 num2.length();int[] res new int[len1 len2];// 从后往前遍历for (int i len1 …

作者头像 李华
网站建设 2026/4/21 18:33:56

SSM毕设选题推荐:基于JAVA的机床厂车辆管理系统的设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华