一、引言:为什么需要私有化知识库?

当我们尝试用网页版DeepSeek处理敏感文档时,常常面临三大致命痛点:

⚠️ 网页版DeepSeek(或者其他LLM)的三大局限

隐私泄露风险:企业制度/个人资料上传第三方服务器,数据安全无法保障

文件操作枷锁:上传数量/大小受限,且修改删除极其不便

上下文失忆症:每次对话需重新上传附件,无法构建持久化知识体系

DeepSeek(国产开源大模型)和 RAGFlow(文档智能问答框架),搭建一个完全私有的个人知识库!

二、技术简介

1.GAR
  • 核心:根据给定的问题,从知识库检索出合适的参考内容,让大模型据此回答
  • 应用场景:AI客服、政策查询、AI搜索
  • 原理流程:在这里插入图片描述
2.RAGFlow

RAGFlow 是一款基于 RAG 技术的开源文档问答系统。它支持多种格式文档解析(如 Word、PDF、表格等),并提供精准的文本切片与检索能力。结合深度神经网络模型,RAGFlow 可快速定位并提取关键信息,用于生成高质量答案。其具备可视化知识库管理、支持多用户协作等特性,极大降低了构建知识助手系统的门槛。

3.Embedding model

Embedding(嵌入)模型在 RAG 系统中扮演着至关重要的角色,其核心功能是将文本转换为机器可理解的高维数值向量,同时保留语义层面的关联信息。正是通过这一过程,非结构化的自然语言文本得以转化为可计算、可检索的结构化形式

为什么要使用 Embedding 模型?
即使已经使用了 DeepSeek 和 RAGFlow,Embedding 模型仍是不可或缺的一环,主要原因包括:

  1. 语义理解与检索基础:Embedding 模型能够捕捉文本的语义信息,将含义相近的句子或短语映射到向量空间中相邻的位置。这使得系统能够基于语义(而不仅仅是关键词)进行检索,极大提升了问答的准确性和相关性。
  2. 流程中的关键作用:
  • 知识库处理:在上传本地文档(如 PDF、Word 等)后,Embedding 模型会对文本进行解析和切片,并为每一段文本生成对应的向量表示,存储到向量数据库中。

  • 查询处理:当用户提出问题时,同一个 Embedding 模型会将问题也转换为向量。

  • 语义匹配:系统通过计算查询向量与知识库中所有文本向量的相似度(如使用余弦相似度),快速找出最相关的文本片段,作为生成答案的依据。

Embedding 模型 vs. 聊天模型

  • Chat 模型(如 DeepSeek):主要用于对话和文本生成,根据上下文输出连贯、合理的回答。

  • Embedding 模型:不生成文本,而是将文本转换为向量,承担检索阶段的核心计算任务。两者各司其职,共同构建起高效可靠的 RAG 系统。

三、为什么选择RAG技术?RAG和模型微调的区别

面对大模型的"幻觉问题"(虚构不存在的知识),我们需要两种核心技术:微调 vs RAG

方式原理比喻特点适用场景
微调考前复习用领域数据重新训练模型参数固定知识体系
RAG考试带小抄实时检索外部知识库辅助生成动态个人/企业知识库

四、搭建步骤(私有化)

本方案通过三阶段实现完全离线的知识库系统:

1. Ollama本地化部署(DeepSeek + Embedding模型)

实现完全离线的文档解析与推理能力,需部署两类模型:
DeepSeek生成模型:文本推理 + Embedding模型:文本向量化

  • Ollama平台安装 Ollama官网
    作用:用于本地运行和管理大语言模型(LLM)的工具

  • 关键环境变量配置
    OLLAMA_HOST=0.0.0.0:11434(默认绑定11434端口)

  • 让虚拟机里的RAGFlow能够访问到本机上的 Ollama

  • 如果配置后虚拟机无法访问,可能是你的本机防火墙拦截了端口11434

  • 更新完环境变量需重启

    OLLAMA_MODELS-自定义位置
    Ollama 默认会把模型下载到C盘,如果希望下载到其他盘需要进行配置;
    在这里插入图片描述

  • 模型下载与加载
    ollama run deepseek-r1:1.5b
    在这里插入图片描述
    模型下载成功!
    在这里插入图片描述

  • 部署验证
    # 检查运行中模型:ollama list

2. RAGFlow私有化部署

  • 获取RAGFlow源码 Github

  • 将轻量版镜像设置为完整版RAGFlow镜像
    解压源代码 — 进入ragflow-main\docker目录,找到.env文件
    在这里插入图片描述

  • 下载安装docker Docker

  • 下载安装WSL 2

  • 步骤一:以管理员身份打开 PowerShell 或命令提示符

  • 步骤二:执行一站式安装命令

在打开的管理员终端中,输入以下命令并回车:

wsl --install
自动启用所需的 Windows 功能(“适用于 Linux 的 Windows 子系统”和“虚拟机平台”)。

自动下载并安装最新的 WSL 2 Linux 内核更新包。

自动下载并安装一个默认的 Linux 发行版(默认就是 Ubuntu)。
  • 步骤三:设置 Ubuntu 用户账
    安装完成后,它会提示你为即将创建的 Ubuntu 系统设置一个用户名和密码。

进入RAGFlow源码的 ragflow/docker目录,在命令提示符窗口(CMD)运行指令:

# Use CPU for embedding and DeepDoc tasks:
$ docker compose -f docker-compose.yml up -d

# To use GPU to accelerate embedding and DeepDoc tasks:
# docker compose -f docker-compose-gpu.yml up -d

以后台模式启动 docker-compose.yml 文件中定义的所有容器服务。
在这里插入图片描述
在这里插入图片描述

  • 访问RagFlow:Web界面与功能验证

Docker启动后,在浏览器输入 localhost:80来访问RAGFlow,出现以下界面:
在这里插入图片描述

RAGFlow部署成功!

3. 知识库构建与问答

在这里插入图片描述

  • 通过Docker启动RAGFlow后,在浏览器访问 localhost:80,并注册-登录RAGFlow
    在这里插入图片描述

  • 模型提供商中添加本地部署的deepseek模型
    在这里插入图片描述
    在这里插入图片描述

  • 系统模型设置中配置Chat模型Embedding模型(RAGFlow自带的)
    在这里插入图片描述

  • 创建知识库,上传文件并解析
    新建知识库
    在这里插入图片描述
    上传文件
    在这里插入图片描述
    解析文件
    在这里插入图片描述

  • 配置聊天助手(注意prompt和tokens的配置)
    助理设置
    在这里插入图片描述
    提示引擎
    在这里插入图片描述
    模型设置
    在这里插入图片描述

  • 智能问答
    聊天 — 新建助手 — 助手设置 — 开启对话
    在这里插入图片描述

五、常见问题

1. 下载后点击Docker Desktop Installer.exe,安装Docker报错

在这里插入图片描述

原因:为什么Docker无法直接在Windows上运行?
Docker 并不是一个通用的跨平台容器工具,它的核心功能依赖于Linux内核。在 Windows 上运行Docker,本质上是在一个虚拟化的Linux环境中运行容器。因此,直接安装Docker Desktop时,可能会遇到兼容性错误。

解决方案:安装 WSL 2
由于 Docker 需要 Linux 内核,而 Windows 本身不具备,因此我们需要 WSL 2(Windows Subsystem for Linux 2)来提供一个轻量级的 Linux 兼容层。

  • 步骤 1:启用 WSL 2

以管理员身份打开 PowerShell,然后输入以下命令:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

命令成功执行后,重启电脑。

再次以管理员身份打开 PowerShell 并运行:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

命令成功执行后,重启电脑。

  • 步骤 2:设置 WSL 2 为默认版本
wsl --set-default-version 2
2. pull镜像 报错 failed to copy: httpReadSeeker: failed open: … EOF

在这里插入图片描述
原因: Docker 在下载镜像时遇到了 Cloudflare CDN 连接问题,通常是由于网络不稳定或防火墙限制导致的。
解决方案:

  • 步骤一: 修改 Docker Desktop 网络配置
  • 右键点击系统托盘中的 Docker 图标 → 选择 “设置”
  • 转到 “Docker Engine” 标签
  • 在 JSON 配置中替换以下内容:
{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "dns": ["8.8.8.8", "114.114.114.114"],
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://dockerproxy.com",
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ],
  "features": {
    "buildkit": true
  },
  "mtu": 1400,
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
配置项作用
dns[“8.8.8.8”, “114.114.114.114”]解决 DNS 解析问题(Google + 国内公共 DNS)
registry-mirrors三个国内镜像加速地址绕过 Cloudflare CDN,加速镜像下载
features.buildkittrue启用新一代构建引擎提升稳定性
mtu1400优化 Windows 虚拟网络传输效率
log-driverjson-file日志格式
log-opts{“max-size”:“10m”,“max-file”:“3”}限制日志大小防止磁盘爆满

备选镜像加速方案:如果上述镜像源不稳定,可替换为:

"registry-mirrors": [
  "https://registry.docker-cn.com",
  "https://docker.mirrors.ustc.edu.cn",
  "https://dockerhub.azk8s.cn"
]
  • 点击 “Apply & Restart” 保存并重启 Docker

💡 这是解决 Cloudflare CDN 连接问题的关键步骤!

  • 执行清理命令
    在 管理员权限的 PowerShell 中执行:
# 清理所有缓存
docker system prune -af
docker volume prune -f

# 重启 WSL2 网络(关键步骤)
wsl --shutdown
3. RAGFlow 解析文档卡住

问题:RAGFlow 成功启动,但是解析文件的时候,进度不动。
在这里插入图片描述
原因部署环境因为网络无法访问 huggingface.co ,导致本地模型无法下载
解决方案:需要在启动镜像前,在.env文件中,使用镜像地址:把下面这行注释关闭

# Uncomment the following line if you have limited access to huggingface.co:
HF_ENDPOINT=https://hf-mirror.com

# Optimizations for MacOS
# Uncomment the following line if your OS is MacOS:
# MACOS=1

重启Docker!
在这里插入图片描述
文件快速解析成功!

4. 对话报错[Errno 111] Connection refused

在这里插入图片描述
原因:由于宿主机内存资源不足,导致 Elasticsearch 等内存密集型服务无法正常启动,进而表现为连接失败。例如,在总计 16GB 内存的系统中,若仅为 Docker 分配 7.5GB 内存,可能无法满足 Elasticsearch 运行的基本需求,引发此类错误。

解决方案:通过调整 Windows 系统中 WSL2 的内存分配配置,可为 Docker 提供更多可用资源,具体步骤如下:

  • 步骤一:修改 WSL2 内存配置
  • 使用快捷键 Win + R 打开“运行”窗口,输入 %UserProfile% 进入用户文件夹。
  • 在该文件夹下创建名为 .wslconfig 的配置文件(若已存在请直接编辑),内容如下:
	[wsl2]
	memory=16GB    # 建议分配内存不超过宿主机的实际物理内存
	processors=12  # 可根据 CPU 实际核心数调整(含超线程核心)
	swap=0
	localhostForwarding=true
  • 重启 WSL 和 Docker
  • 完全退出 Docker Desktop,并通过任务管理器确保无相关后台进程残留。
  • 打开命令提示符(cmd),执行以下命令关闭 WSL2:
	wsl --shutdown
  • 重新启动 Docker Desktop,并尝试重新运行容器中的服务。
    在这里插入图片描述
    完成上述操作后,再次访问服务RAGflow即可正常连接。建议根据实际物理资源情况合理调整内存分配参数,避免过度占用系统资源。

结语

🚀 通过 DeepSeek-R1 + RAGFlow,不仅能拥有一个超强的个人知识管家,还能避免敏感数据上传第三方平台。无论是技术文档、学习笔记还是企业知识库,都能轻松搞定!

📚 参考资料

  1. 参考视频: 【知识科普】【纯本地化搭建】【不本地也行】DeepSeek + RAGFlow 构建个人知识库_哔哩哔哩_bilibili
  2. RAGFlow解析文件卡住: CSDN
  3. 对话报错[Errno 111] Connection refused: CSDN
  4. Windows环境下docker desktop修改最大内存: 简书
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐