
很多朋友想在本地搭一个专属知识库,把公司的内部资料、技术手册或者个人笔记喂给 AI,但又担心数据上传到公网云端会泄露。其实,用 Ollama 负责底层的模型运行,搭配 Dify 负责上层的知识库管理和工作流编排,是目前最稳妥、也是操作最顺手的一套纯本地私有化方案。
这套方案不需要你写复杂的 Python 代码,所有数据都存在你自己的硬盘里,断网也能正常运行。我帮不少团队搭过这套环境,今天把完整的步骤、核心参数调优以及踩坑点全部梳理出来。
1. 硬件门槛与模型选型
在动手安装之前,先看你的电脑配置能不能跑起来。很多新手一上来就下载几十 G 的大模型,结果显存直接撑爆,电脑卡死。
本地知识库要运行两类模型:一个是负责文本向量化的 Embedding 模型,另一个是负责阅读资料并回答问题的 LLM(大语言模型)。
下面是根据我实测经验整理的硬件配置与模型搭配参考表:
| 硬件配置档位 | 硬件要求 | 推荐 LLM | 推荐 Embedding 模型 | 实测生成速度 | 适用场景 |
|---|---|---|---|---|---|
| 入门级 | 16GB 内存 + 8GB 显存 (如 RTX 3060/4060) | Qwen2.5-7B-Instruct | bge-m3 | 35-50 token/s | 个人日常笔记、小型文档检索 |
| 推荐级 | 32GB 内存 + 12GB/16GB 显存 (如 RTX 4070Ti/4080) | Qwen2.5-14B-Instruct | bge-m3 | 25-40 token/s | 团队专业技术文档、企业内部规范 |
| 高阶级 | 64GB 内存 + 24GB 显存 (如 RTX 3090/4090 或 Mac M系列 64G) | Qwen2.5-32B-Instruct 或 DeepSeek-R1-14B | bge-m3 | 20-35 token/s | 复杂逻辑推理、合同条款深层比对 |
中文知识库场景下,bge-m3 是目前本地向量模型的首选。它支持 8192 的单段长度,多语言检索和长文本切片识别都很准。生成模型选 通义千问 Qwen2.5 系列,在遵循指令和中文长文本阅读理解方面表现很扎实。
2. 第一步:安装并配置 Ollama
Ollama 是本地运行大模型的引擎。
(1)下载与安装
去 Ollama 官网下载对应系统的安装包。Windows 和 Mac 都是双击安装包直接装,Linux 用户可以直接在终端执行安装脚本。
(2)配置局域网与跨域访问(核心避坑点)
很多新手装好 Ollama 后,后面在 Dify 里死活连不上,报错连不上服务器。这是因为 Ollama 默认只监听 127.0.0.1,而 Dify 是运行在 Docker 容器里的,容器默认访问不到宿主机的回环地址。
你必须把监听地址改为 `0.0.0.0`:
•Windows:打开系统环境变量,新建用户变量,变量名为 `OLLAMA_HOST`,变量值填 `0.0.0.0:11434`。
•Mac / Linux:在终端里配置环境变量。Mac 可以在终端输入 `launchctl setenv OLLAMA_HOST “0.0.0.0:11434″`,Linux 修改 systemd 服务配置文件即可。
修改完成后,必须完全重启 Ollama 才能生效。
(3)拉取模型
打开终端,分别拉取聊天模型和嵌入模型:
# 拉取主聊天模型(以 7B 为例)
ollama pull qwen2.5:7b
# 拉取文本嵌入模型
ollama pull bge-m3
下载完成后,运行 `ollama list` 查看列表。只要看到这两个模型,底座就准备好了。
3. 第二步:使用 Docker Compose 部署 Dify
Dify 提供了非常成熟的前端界面、知识库向量库集成和工作流配置。本地部署推荐直接用官方的 Docker Compose。
(1)准备工作
确保电脑已经安装好了 Docker Desktop(Windows/Mac)或者 Docker Engine + Docker Compose(Linux),并且 Docker 处于运行状态。
(2)克隆代码并启动
打开终端,执行以下命令:
# 克隆 Dify 官方源码库
git clone https://github.com/langgenius/dify.git
# 进入 docker 目录
cd dify/docker
# 复制环境配置文件
cp .env.example .env
# 启动所有容器
docker compose up -d
等待几分钟,Docker 会自动拉取并启动 Redis、PostgreSQL、Weaviate(默认向量数据库)以及 Dify 的核心容器。
当所有容器状态显示为 `Running` 后,打开浏览器访问 `http://localhost`(Linux 服务器则访问 `http://服务器IP`)。
首次打开会让你设置管理员账号和密码。填写完毕后,直接登录进入控制台。
4. 第三步:在 Dify 中接入 Ollama 模型
进入 Dify 后,先别急着建知识库,必须先把模型通道打通。
1.点击右上角头像,选择 “设置”。
2.在左侧菜单点击 “模型供应商”,找到 Ollama 卡片,点击“添加模型”。
3.添加对话模型:
•模型类型:选择 LLM。
•模型名称:填写 `qwen2.5:7b`(必须和 `ollama list` 里的名字完全一致)。
•基础 URL:
•如果你用 Windows 或 macOS,必须填写:`http://host.docker.internal:11434`。
•如果你用 Linux,填写:`http://172.17.0.1:11434`(这是 Docker 网桥默认网关)。
•千万不要写 `localhost` 或 `127.0.0.1`,在容器里写这个只会指向容器自己,绝对连不上。
•点击“保存”,系统会发一个测试请求,显示成功即可。
4.添加嵌入模型:
•再次点击 Ollama 卡片的“添加模型”。
•模型类型:选择 Text Embedding。
•模型名称:填写 `bge-m3`。
•基础 URL:同样填写 `http://host.docker.internal:11434`(Linux 用对应宿主机 IP)。
•点击“保存”。
5. 第四步:创建与优化本地知识库
模型连通后,就可以搭建 RAG(检索增强生成)知识库了。
(1)新建知识库与上传文档
点击 Dify 顶部导航栏的 “知识库” -> “创建知识库”,上传你的文档(支持 PDF、DOCX、Markdown、TXT 等格式)。
(2)关键参数调优:分段与清洗
很多人抱怨知识库问答总答非所问,其实 80% 的问题出在文档切片上。不要选“自动”,选择 “自定义”:
•分段标识符:建议使用 `nn` 或者一级标题符号。
•分段最大长度:建议设为 `500` 到 `800` tokens。切太长,向量匹配容易模糊;切太短,单段文字缺少上下文。
•分段重叠度(Overlap):建议设为 `50` 到 `100` tokens。这样做能防止一句话刚好被从中间切断,保持语义连贯。
(3)选择检索模式
Dify 支持多种检索模式,不同模式的检索效果和资源开销对比如下:
| 检索模式 | 技术原理 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 向量检索 (Vector Search) | 将文字转为数学向量,计算余弦相似度 | 语义理解好,支持同义词和错别字检索 | 对专有名词、编号、型号匹配容易漏检 | 通识问答、概念解释、日常总结 |
| 全文检索 (Full-Text Search) | 基于 BM25 算法的关键词倒排索引 | 精确匹配极强,专有词、代码名、流水号百发百中 | 无法识别意思相近但用词不同的句子 | 查产品货号、特定错误代码、专有名词 |
| 混合检索 (Hybrid Search) | 向量检索与全文检索同时查,综合打分重排 | 兼顾语义理解与关键词命中,召回准确度最高 | 本地计算资源占用稍多,检索耗时增加约 30% | 企业规章、技术文档、长篇知识手册(强烈推荐) |
在本地配置允许的情况下,检索方式果断勾选“混合检索”。Top K 建议设为 `3` 到 `5`,Score 阈值建议设为 `0.5`。这样既能过滤掉风马牛不相及的废话,又能把最有价值的信息送给大模型。
6. 第五步:组装知识库问答应用
知识库切片完成后,最后一步是把模型和知识库串联起来。
1.点击顶部 “工作室” -> “创建空白应用”,应用类型选择 “聊天助手”。
2.在应用配置界面左侧,找到 “上下文”,点击添加刚才做好的知识库。
3.右上角选择模型为 `qwen2.5:7b`。
4.编写系统提示词(Prompt):
本地小模型的幻觉通常比云端万亿模型更明显,所以提示词必须明确约束边界。直接把下面这段直接贴进“提示词”框:
你是一个严谨的内部知识库问答助手。
请严格根据上下文提供的信息来回答用户的问题。
规则如下:
1. 如果上下文中没有提到答案,直接回答“知识库中未找到相关信息”,不要编造任何内容。
2. 回答要客观、简练,直接说结论,不要说废话。
3. 引用内容时,请标明参考的事实依据。
5.在右侧调试框里输入问题测试。如果看到回答内容精确命中了你上传的文档段落,并且在下方展开了引用的知识库片段,说明整个系统已经完全跑通。
7. 常见故障排查表
在搭建和实际运行中,如果遇到异常,对照下表快速排查:
| 故障现象 | 根本原因 | 解决方法 |
|---|---|---|
| Dify 报 Connection Refused / 连接超时 | Ollama 未开放局域网监听,或者 URL 填了 localhost | 检查 `OLLAMA_HOST` 是否为 `0.0.0.0:11434`,Dify 中 URL 改用 `http://host.docker.internal:11434` |
| 文档上传后一直卡在“正在索引” | 嵌入模型 bge-m3 未启动,或并发数超限卡死 | 打开终端运行 `ollama run bge-m3 “test”` 确认模型能响应;排查 Docker 内存分配是否充足 |
| 模型回答速度极慢,每秒几个字 | Ollama 未调用独立显卡,降级到了 CPU 计算 | 运行 `nvidia-smi` 查看是否有 `ollama_llama_server` 进程;核对显卡驱动和 CUDA 支持 |
| 回答胡说八道,无视知识库文档 | Top K 设得太小,或 Score 阈值过高导致没有召回任何文档 | 查看 Dify 聊天界面下的“引用段落”。如果为空,调低相似度阈值(如降至 0.4)并改用混合检索 |
整套流程走下来,你会发现只要理顺了 Docker 与宿主机之间的网络通信,剩下的模型加载与切片配置其实非常直观。把这套系统跑在自己的机器上,不仅彻底解决了内部敏感信息的泄露风险,还能搭建出一个完全受控、随叫随到的私有资料库。
原创文章,作者:七点互动,如若转载,请注明出处:https://ai.qidianhudong.com/aiyy/4106.html