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

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

搭建本地知识库

作为大模型开发人员,搭建一套 本地私有知识库系统(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
应用框架LangChainLlamaIndexLangChain:生态丰富,调试工具完善
💡 为什么不用 Elasticsearch?
虽然 ES 支持向量检索(≥8.0),但配置复杂、资源占用高。Chroma/Qdrant 专为 embedding 设计,更轻量高效。

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

步骤 1:安装基础环境

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

步骤 2:安装 Python 依赖

pip install langchain chromadb unstructured PyPDF2 python-docx sentence-transformers 

步骤 3:准备知识文档

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

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

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

创建 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 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)} 个片段")

运行:

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

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

创建 query_kb.py

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)# 问答循环whileTrue: query =input("\n❓ 请输入问题(输入 'quit' 退出): ")if query =="quit":break result = qa_chain({"query": query})print(f"\n💡 回答:\n{result['result']}")# 显示引用来源print("\n📚 参考片段:")for i, doc inenumerate(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)

🧪 五、验证知识库效果

测试用例:

拒答能力

“公司的股票代码是多少?”(若文档未提及)
→ 应回答“知识库中未找到相关信息”

跨文档推理

“对比A产品和B产品的技术参数”
→ 应聚合多个文档信息

事实性问题

“根据文档,公司2025年战略目标是什么?”
→ 应准确引用原文片段

📦 六、进阶扩展方向

需求方案
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)。

Read more

【Seedance 2.0 安全合规红线指南】:飞书机器人集成中97%开发者忽略的5大隐私漏洞及零信任加固方案

第一章:Seedance 2.0 飞书机器人集成安全合规总览 Seedance 2.0 与飞书机器人的深度集成严格遵循《个人信息保护法》《数据安全法》及飞书开放平台《机器人接入安全规范 V3.2》,构建覆盖身份认证、数据传输、权限控制与审计追溯的全链路安全合规体系。所有机器人交互均默认启用双向 TLS 加密,敏感操作强制触发二次身份确认,并通过飞书「应用沙箱」机制实现运行环境隔离。 核心安全控制机制 * OAuth 2.0 授权范围最小化:仅申请 chat:read、user:read 和 bot:chat 必需权限 * Webhook 请求签名验证:飞书平台使用 SHA256_HMAC 签名,服务端须校验 X-Lark-Signature 头 * 敏感数据自动脱敏:用户手机号、

基于FPGA的并行FIR滤波器设计之旅

基于FPGA的并行FIR滤波器设计之旅

基于fpga的并行fir滤波器设计,matlab仿真如下,之后进行fpga实现,并且通过modelsim仿真实现。 乘法ip核配置等都有文档进行说明,如下图所示。 注:提供matlab文件,quartus和modelsim工程文件,仿真视频及文档 在数字信号处理领域,FIR(有限脉冲响应)滤波器可是个明星角色,而利用FPGA(现场可编程门阵列)实现并行FIR滤波器设计更是能带来性能上的大幅提升。今天咱就唠唠这基于FPGA的并行FIR滤波器设计的那些事儿。 Matlab仿真 咱先从Matlab仿真说起。Matlab在数字信号处理这块那叫一个强大,它能帮助我们快速验证滤波器的设计思路。比如说,我们要设计一个简单的低通FIR滤波器,代码如下: % 设计低通FIR滤波器 fc = 0.2; % 截止频率 N = 50; % 滤波器阶数 h = fir1(N,fc); freqz(h); % 绘制频率响应 这段代码中,fir1函数是Matlab里用于设计FIR滤波器的常用函数。N指定了滤波器的阶数,它决定了滤波器的复杂度和性能。fc就是截止频率啦,低于这个频率的信号会相对顺利通过,高

实现Python将csv数据导入到Neo4j

实现Python将csv数据导入到Neo4j

目录 一、获取数据集 1.1 获取数据集 1.2 以“记事本”方式打开文件 1.3  另存为“UTF-8”格式文件 1.4 选择“是” 二、 打开Neo4j并运行 2.1 创建新的Neo4j数据库 2.2 分别设置数据库名和密码 编辑 2.3 启动Neo4j数据库 2.4 打开Neo4j数据库  2.5 运行查看该数据库是否为空 三、打开Python创建项目  3.1 创建一个包,存项目 3.2 创建一个项目 3.3 检查自己的依赖是否完全

OpenClaw 接入飞书机器人保姆级教程

OpenClaw 接入飞书机器人保姆级教程

如果你的 OpenClaw 已完成初始部署、WebUI 可正常收发回复,现在想接入飞书机器人,这篇教程会带你从创建机器人到配置完成,一步到位。 相信你在部署 OpenClaw 时已经踩过不少坑,这篇文章会帮你尽量避开飞书对接中的常见问题,少走弯路。废话不多说,教程正式开始!原文地址 内置飞书插件 如果您使用的是最新版本的 OpenClaw那么已经内置了 Feishu 插件,通常不需要让我们单独进行安装。 如果您使用的是之前比较旧的版本,或者是没有内置的 Feishu 的插件,可以手动进行安装,执行下方命令: 创建飞书机器人 我们先来创建飞书的应用,我们可以复制下方地址进行一键直达 创建企业自建应用 打开后,我们点击【创建企业自建应用】,如果您还没有飞书账号的话,请先注册飞书的账号后再进行创建应用 我们创建企业自建应用然后输入应用名称和应用描述,还有应用图标,我们都可以自定义进行上传,或者选择其他照片当作应用图标。输入完之后我们点击创建 获取 AppID 和 AppSecret 我们点击凭证与基础信息一栏查看我们的App ID 和 App