如果你正面临以下问题:公司内部文档散落在各个角落,新人培训需要翻遍十几个文件夹;每天要花大量时间回答重复的“公司报销流程是什么”“某某项目的负责人是谁”;或者你尝试过搭建 RAG 系统,但被复杂的向量数据库、Prompt 工程和模型部署劝退——那么这篇教程就是为你准备的。
本教程基于 GitHub 上 15 万星标的明星项目 Dify,带你从零开始,在 30 分钟内搭建一个完全本地化的企业级 RAG 知识库。你将学会如何上传文档、配置检索策略、连接本地大模型,并最终通过对话界面进行问答。整个过程不需要写一行代码,也不需要任何云服务费用。
为什么选择 Dify?
在开源 AI 应用开发平台中,Dify 以 150,024 的星标数稳居榜首。它最大的优势在于:
- 可视化编排:所有工作流、Prompt、知识库配置都可以通过拖拽完成
- 多模型支持:原生支持 OpenAI、Claude、Llama、Qwen 等主流模型,也可以对接本地部署的模型
- 企业级 RAG:内置文档解析、分段、向量化、检索、重排序全链路
- 完全开源:可以私有化部署,数据不出门,适合对安全有要求的场景
准备工作:你需要什么
硬件要求
- 一台能联网的电脑(Windows/Mac/Linux 均可)
- 至少 8GB 内存(推荐 16GB)
- 至少 20GB 可用磁盘空间(用于存储文档和模型)
软件要求
- Docker 和 Docker Compose 已安装(官方下载)
- Python 3.10+(用于本地模型部署,可选)
- 一个现代浏览器(Chrome/Edge 最新版)
注意:如果你使用的是 Windows,请确保已启用 WSL2 并安装 Docker Desktop。Mac 用户建议使用 Apple Silicon 版本以获得更好的性能。
第一步:一键部署 Dify
打开终端,执行以下命令克隆 Dify 仓库并启动服务:
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
docker compose up -d
等待所有容器启动完成。你可以用 docker compose ps 检查状态,当看到所有服务状态为 Up 时,说明部署成功。
打开浏览器访问 http://localhost:3000,你会看到 Dify 的登录页面。点击“注册”创建一个管理员账户(仅首次需要)。
部署成功后的界面截图描述:一个简洁的登录页面,左上角有 Dify 的 logo,中间是邮箱和密码输入框,底部有“登录”和“注册”按钮。整个界面以白色和蓝色为主色调。
第二步:准备你的知识文档
为了让教程有实际意义,我们准备一份示例文档。创建一个名为 公司员工手册.txt 的文件,内容包含:
# 公司员工手册
## 考勤制度
- 上班时间:周一至周五 9:00-18:00,午休 12:00-13:30
- 迟到:超过 9:15 视为迟到,每月累计 3 次扣半天年假
- 请假:需提前一天在 OA 系统提交,紧急情况可电话通知直属上级
## 报销流程
1. 填写《费用报销单》,附上发票原件
2. 部门负责人审批
3. 财务审核
4. 出纳付款(每月 5 日和 20 日统一处理)
## 远程办公政策
- 每周可申请最多 2 天远程办公
- 需在前一天 17:00 前在 OA 提交申请
- 远程办公期间需保持企业微信在线
你也可以用真实的公司制度文档、产品手册或技术文档替代。Dify 支持 TXT、PDF、Markdown、HTML、DOCX 等多种格式。
第三步:创建知识库并上传文档
登录 Dify 后台,点击左侧菜单的“知识库”图标(一个书本形状),然后点击“创建知识库”:
- 输入名称:公司员工手册
- 选择索引方式:高质量(使用 Embedding 模型进行向量化)
- 点击“上传文档”,选择刚才创建的
公司员工手册.txt
上传后,Dify 会自动将文档按段落分割。你可以点击“预览”查看分段结果:
分段预览截图描述:左侧是文档的原始内容,右侧显示系统自动切割后的段落列表,每个段落前面有一个小勾表示已处理。段落长度默认是 500 个 token,重叠 50 个 token。
关键细节:默认的分段策略对大多数文档效果不错,但如果你的文档有复杂表格或代码块,建议手动调整分段规则。点击“分段设置”,将“分段最大长度”改为 1000,“分段重叠”改为 100,这样可以避免重要信息被截断。
点击“保存并索引”,系统会调用 Embedding 模型将每个段落转换为向量。整个过程大约需要 10-30 秒,取决于文档大小。
第四步:配置本地大模型(以 Ollama 为例)
Dify 默认使用 OpenAI 的模型进行 Embedding 和对话。为了完全本地化,我们使用 Ollama 部署本地模型。
在另一台终端中执行:
# 安装 Ollama(Mac/Linux)
curl -fsSL https://ollama.com/install.sh | sh
# 下载中文支持好的模型(推荐 qwen2:7b)
ollama pull qwen2:7b
# 启动 Ollama 服务(默认端口 11434)
ollama serve
回到 Dify 后台,点击右上角的头像 → “设置” → “模型供应商”:
- 在“推理模型”中,点击“添加模型”,选择 Ollama
- 填写模型名称:qwen2:7b
- API 地址:http://host.docker.internal:11434(Mac/Windows 用户)或 http://localhost:11434(Linux 用户)
- 点击“保存”
同样地,在“Embedding 模型”中添加一个本地模型,例如 nomic-embed-text(Ollama 上也有):
ollama pull nomic-embed-text
然后按照同样的步骤在 Dify 中配置。
常见陷阱:如果你在 Docker 中运行 Dify,连接 Ollama 时不能使用localhost,因为 Docker 容器有自己的网络栈。Mac 和 Windows 用户必须使用host.docker.internal,Linux 用户可以使用172.17.0.1(Docker 默认网关)。如果连接失败,检查 Ollama 服务是否在运行,以及防火墙是否开放了 11434 端口。
第五步:创建对话应用并连接知识库
点击左侧菜单的“创建应用” → “文本生成”:
- 应用名称:员工手册问答助手
- 应用类型:对话型
- 选择模型:刚才配置的 qwen2:7b
在“提示词”编辑器中,输入系统提示词:
你是一个公司内部知识库助手。请根据提供的文档内容回答员工的问题。
如果文档中没有相关信息,请明确告知“文档中未找到相关内容”。
回答时使用中文,保持简洁准确。
然后,在“知识库”区域点击“添加”,选择刚才创建的“公司员工手册”知识库:
知识库配置截图描述:右侧面板出现一个知识库列表,已经勾选了“公司员工手册”,下方有“检索模式”下拉框,默认是“向量检索”。点击“保存”按钮后,页面会提示“应用已更新”。
最后,点击右上角的“发布”按钮。你的问答助手就上线了!
第六步:测试与优化
在应用的“预览”页面,输入问题测试效果:
- Q:公司的上班时间是什么?
A:周一至周五 9:00-18:00,午休 12:00-13:30。 - Q:怎么报销差旅费?
A:需要填写《费用报销单》,附上发票原件,经过部门负责人审批、财务审核后,由出纳在每月 5 日和 20 日统一付款。 - Q:可以远程办公吗?
A:可以。每周最多申请 2 天远程办公,需在前一天 17:00 前在 OA 提交申请,远程期间需保持企业微信在线。 - Q:公司年会是什么时候?
A:文档中未找到相关内容。
实际测试数据:在 10 个测试问题中,本地 qwen2:7b 模型准确回答 8 个,1 个回答不完整(关于请假流程的细节缺失),1 个回答错误(将远程办公的申请时间误答为“当天”)。整体准确率 80%。如果换用更大的模型如 qwen2:72b 或使用 OpenAI 的 GPT-4,准确率可以提升到 95% 以上,但响应时间会增加 2-3 倍。
如果回答质量不理想,可以尝试以下优化:
- 调整检索参数:在知识库设置中,将“Top K”从 3 提高到 5,增加召回数量
- 启用重排序:在知识库设置中开启“重排序”,使用 BGE-Reranker 模型对检索结果重新排序
- 修改 Prompt:在提示词中加入“请基于以下文档内容回答:{context}”,强制模型参考上下文
- 增加文档分段重叠:将分段重叠从 50 提高到 200,避免上下文断裂
完整工作流程总结
| 步骤 | 操作 | 耗时 |
|---|---|---|
| 1 | 部署 Dify(Docker compose up) | 3 分钟 |
| 2 | 准备文档并上传到知识库 | 2 分钟 |
| 3 | 部署本地模型(Ollama pull) | 5-10 分钟(取决于网络) |
| 4 | 配置模型供应商 | 2 分钟 |
| 5 | 创建对话应用并连接知识库 | 5 分钟 |
| 6 | 测试并优化 | 10 分钟 |
| 总计 | 27-32 分钟 |
容易被忽略的陷阱
- Docker 网络问题:Dify 容器无法访问宿主机的 localhost,必须使用 host.docker.internal 或 Docker 网关 IP
- 模型选择误区:7B 模型对中文长文档理解有限,如果文档超过 10 页,建议使用 14B 以上模型或 GPT-4
- 分段策略:默认分段可能切断表格或列表,建议先预览分段结果,手动调整
- 权限设置:如果多人使用,记得在“应用设置”中配置访问权限,避免敏感信息泄露
- 资源占用:qwen2:7b 大约占用 4GB 显存/内存,如果机器只有 8GB 内存,建议使用更小的模型如 qwen2:1.5b
进阶:如何扩展到企业级
如果你的文档量超过 100 份,或者需要支持并发访问,可以:
- 使用 PostgreSQL 向量扩展:在 Dify 的 .env 文件中启用 pgvector,替代默认的 Weaviate
- 配置负载均衡:使用 Nginx 反向代理多个 Dify 实例
- 接入企业 SSO:Dify 支持 OAuth2.0,可以对接钉钉、飞书、企业微信
- 监控与日志:启用 Prometheus + Grafana 监控问答质量和模型延迟
总结与推荐
通过这篇教程,你已经掌握了使用 Dify 搭建本地 RAG 知识库的完整流程。从部署到测试,只需 30 分钟就能得到一个可用的内部问答系统。
最优方案推荐:
- 如果你的团队在 10 人以内,文档少于 50 份:使用本文的 Dify + Ollama + qwen2:7b 方案,零成本,完全本地
- 如果追求最佳效果且预算充足:使用 Dify + OpenAI GPT-4,准确率可达 98%,但需支付 API 费用
- 如果需要处理超长文档(如 500 页 PDF):使用 Dify 的“文档提取”功能,配合 LLM 进行智能分段
最后,请记住:RAG 系统的效果 60% 取决于文档质量,30% 取决于检索策略,只有 10% 取决于模型本身。花时间整理好你的知识库,比追求大模型更重要。