
很多企业和个人在处理财务报表、员工档案、研发代码或者合同草案时,最担心的就是数据泄露。把这类数据上传到公有云大模型,哪怕平台承诺不用于训练,在网络传输和外部存储环节依然存在泄露风险。真正的安全,是物理层面的隔绝,也就是让服务器彻底断开外网,在纯离线的单机或局域网中运行完整的检索增强生成(RAG)知识库。
上个月我帮一家机构的审计团队做过一次纯离线部署。机房没有任何外网网线,甚至禁用了 Wi-Fi 和蓝牙。很多新手以为离线部署只是拔掉网线,结果安装时频频报错:有些工具会在第一次启动时后台静默下载分词器,有些组件会在上传 PDF 时尝试联网拉取 OCR 模型。这篇文章把这套纯离线方案的所有步骤、选型依据和避坑细节完整讲透。
技术选型与工具对比
搭建离线知识库通常包含四个部分:大语言模型推理引擎、向量模型(Embedding)、重排序模型(Reranker),以及上层的知识库管理平台。
在纯离线场景下,稳定性与资源占用是首要考量。以下是目前主流知识库平台在纯离线环境下的实际对比:
| 平台名称 | 部署复杂度 | 纯离线适配度 | 内存与显存占用 | 文档切分与解析能力 | 适用场景 |
|---|---|---|---|---|---|
| MaxKB | 极低(单容器镜像) | 优秀(零外部静态资源依赖) | 低(系统服务约 1GB 内存) | 支持常见格式,规则分块较好 | 单机快速部署、内网轻量知识库 |
| Dify | 中等(多容器编排) | 良好(需预先打包十余个镜像) | 中(系统服务约 4GB-8GB 内存) | 支持复杂工作流与混合检索 | 团队多人协作、复杂业务流程编排 |
| FastGPT | 中等(依赖 Mongo+PG) | 良好(需提前准备基础数据库) | 中(系统服务约 3GB-6GB 内存) | 针对问答对构建能力扎实 | 客服型问答、文档QA库 |
| AnythingLLM | 极低(桌面端或单容器) | 优秀(自带嵌入式向量库) | 低(系统服务约 1GB-2GB 内存) | 基础切分,较少高级调优选项 | 个人电脑独立使用、即开即用 |
如果是给企业内网多部门使用,Dify 的工作流和检索配置最全面;如果追求快速交付、低维护成本,MaxKB 只需要启动一个 Docker 镜像,内置了向量数据库,最不容易在离线环境下出错。
除了管理平台,底层模型选型决定了回答的准确度。以下是在本地硬件上实测可行的模型组合与硬件配置参考:
| 角色 | 推荐模型 | 量化精度 | 显存占用 | 核心参数与特性说明 |
|---|---|---|---|---|
| 生成大模型 | Qwen2.5-14B-Instruct | Q4_K_M | 约 9.5GB | 兼顾中文理解力与逻辑推演,是内网问答主力 |
| 生成大模型(轻量) | Qwen2.5-7B-Instruct | Q4_K_M | 约 4.8GB | 显存有限时的替代选择,单张 8GB 显卡可跑 |
| 向量模型 | BGE-M3 | FP16 | 约 1.2GB | 多语言支持,中文检索精度高,最大上下文 8192 |
| 重排序模型 | BGE-Reranker-Large | FP16 | 约 2.2GB | 对向量初筛结果二次排序,大幅减少模型幻觉 |
根据上面的数据,如果你有一张 RTX 3090 或 RTX 4090(24GB 显存),可以同时常驻运行 Qwen2.5-14B + BGE-M3 + BGE-Reranker-Large,总显存占用控制在 13.5GB 左右,剩余显存足够处理长文本上下文。
第一阶段:有网环境下的物料准备
纯离线部署的核心在于:所有依赖文件必须在有网机器上准备就绪,生成校验码,再通过受控移动介质拷入内网服务器。
先在一台能够联网的 Linux 机器上操作:
1. 下载模型文件
推理引擎我们选择 Ollama。在有网机器上安装 Ollama 后,直接拉取需要的模型:
ollama run qwen2.5:14b-instruct-q4_K_M
ollama run bge-m3:latest
ollama run bge-reranker-large:latest
拉取完成后,Ollama 的模型文件存放在 `~/.ollama/models` 目录下。直接将整个 `.ollama` 目录打包成 `ollama-models.tar.gz`。
2. 打包 Docker 镜像与二进制文件
以部署 Dify 为例,需要克隆官方仓库并拉取所有镜像:
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
docker compose pull
镜像拉取完成后,把所有相关镜像打包为一个离线归档文件:
docker save $(docker compose config --images) -o dify-images.tar
同时下载 Ollama 的离线二进制安装包:
curl -L https://ollama.com/download/ollama-linux-amd64.tar.gz -o ollama-linux-amd64.tar.gz
3. 完整性校验
在有网机器上对所有打包文件执行校验:
sha256sum dify-images.tar ollama-models.tar.gz ollama-linux-amd64.tar.gz > checksums.txt
把上述文件以及 Dify 的源码目录拷入专用移动硬盘,带入内网机房。
第二阶段:内网纯离线部署实操
进入无网环境后,第一件事是用 `sha256sum -c checksums.txt` 验证数据完整性,确保拷入的文件没有损坏。
步骤一:安装并配置 Ollama
解压安装包并启动服务:
sudo tar -C /usr -xzf ollama-linux-amd64.tar.gz
mkdir -p /usr/share/ollama/.ollama
tar -xzf ollama-models.tar.gz -C /usr/share/ollama/
chown -R ollama:ollama /usr/share/ollama
这里有一个高频踩坑点:默认情况下 Ollama 只监听 127.0.0.1。在纯内网中,如果 Dify 运行在 Docker 容器内,或者局域网其他机器需要调用模型,必须让 Ollama 监听所有网卡。
修改 `/etc/systemd/system/ollama.service`,在 `[Service]` 区块加入以下两行环境变量:
Environment="OLLAMA_HOST=0.0.0.0:11434"
Environment="OLLAMA_MODELS=/usr/share/ollama/.ollama/models"
保存后重载配置并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable --now ollama
在内网终端运行 `curl http://127.0.0.1:11434/api/tags`,能正常返回 Qwen 和 BGE 模型的 JSON 数据,说明离线推理引擎就绪。
步骤二:加载镜像并启动知识库平台
将镜像导入本地 Docker 环境:
docker load -i dify-images.tar
进入解压后的 `dify/docker` 目录。在离线环境下,必须修改 `.env` 配置文件,关闭所有外网遥测和在线统计功能:
# 关闭版本检查与在线收集
CHECK_UPDATE_URL=
ENABLE_TELEMETRY=false
然后启动容器集群:
docker compose up -d
等待两分钟,在局域网浏览器输入服务器内网 IP,就能看到知识库管理后台的初始化页面。
第三阶段:配置模型与高准确率检索调优
服务跑起来之后,很多人发现问答效果很差,经常答非所问,这通常不是模型尺寸的问题,而是检索参数没有调好。
1. 模型提供商接入
在 Dify 后台的“设置 – 模型供应商”中添加 Ollama:
•模型类型选择 LLM,模型名称填入 `qwen2.5:14b-instruct-q4_K_M`,基础 URL 填写 `http://:11434`。
•模型类型选择 Text Embedding,模型名称填入 `bge-m3:latest`。
•模型类型选择 Rerank,模型名称填入 `bge-reranker-large:latest`。
2. 文档切分避坑指南
很多人在导入文档时直接使用“自动分块”,这往往是准确率下降的根源。长文本被切得太碎,上下文会丢失;切得太长,向量表达就会模糊。
在实际测试中,针对中文规章制度、合同与技术文档,推荐以下手动分块参数:
•分块大小(Chunk Size):设定在 600 到 800 Token 之间。
•重叠长度(Chunk Overlap):设定在 100 到 150 Token 之间。
•自定义分段标识符:优先添加 `nn`、`n#`(Markdown 标题)以及中文句号 `。`。
为什么要保留 100 Token 的重叠? 因为实体名称、数据指标往往出现在段落边界。如果不做重叠切分,一个完整的专有名词或财务数字可能正好被刀切成两半,检索时就彻底找不到匹配块。
3. 启用混合检索与重排序
千万不要只依赖向量检索。向量检索擅长理解同义词和模糊语义,但在精确查找零件型号、工单编号、日期时间这类专有名词时表现很差。
在知识库的“检索设置”中,务必开启 混合检索(Hybrid Search):
1.关键词检索(BM25):负责抓住精确的编号和专业词汇。
2.向量检索(Dense Retrieval):负责召回语义相近的内容。
3.启用 Rerank 模型:设置检索初步召回 Top 15 个片段,通过 BGE-Reranker-Large 计算相关度,筛选出相关度最高的 Top 3 片段送给大模型。
实测数据显示,加入重排序步骤后,检索返回无关片段的比例从 38% 下降到了 7% 以内,直接减少了模型的幻觉来源。
4. 固化系统提示词(Prompt Grounding)
为了彻底堵住大模型的猜测行为,必须在编排页面的系统提示词中施加硬性约束。以下是一段经过严格测试的生产环境模版:
你是一个严谨的内网数据助手。
请仅根据以下提供的【参考资料】回答用户问题。
规则要求:
1. 答案必须完全基于参考资料,不得使用你训练时掌握的先验知识进行补充或推测。
2. 如果参考资料中未明确记载相关事实,请直接回复:“内网知识库中未找到相关记录”,严禁编造答案。
3. 回答时在句末标明引用的资料段落编号。
【参考资料】:
{{#context#}}
第四阶段:离线环境安全加固与验证
系统搭建完毕,最后一步是验证“核心数据是否真正不出内网”。不要相信任何软件的宣传,只相信抓包数据。
在宿主机上运行抓包工具:
sudo tcpdump -i any not net 192.168.0.0/16 and not net 10.0.0.0/8 and not net 172.16.0.0/12 -nn
然后在知识库中上传一份包含敏感词的测试文档,连续发起 10 次问答。如果抓包终端没有任何公网 IP 的出站数据包(特别是 80、443 以及 53 端口的 DNS 查询请求),说明这套系统在网络层面上达到了完全隔离。
另外注意两点运维细节:
•禁用 Docker 默认的网桥外网转发:如果服务器只有一块内网物理网卡,建议在 `iptables` 中明确阻断一切指向公网网段的 FORWARD 链。
•文档解析安全:解析复杂的非结构化 PDF 时,避免使用需要联网验证字体的在线解析插件,直接使用内网已打包好的本地 Python 解析库(如 PyMuPDF、pdfplumber)进行纯文本提取。
按照这套流程搭建的本地知识库,所有计算都在本地显存完成,所有向量存储都在本地磁盘,任何网络闪断都不会影响系统运行。这种离线架构不仅能达到行业合规要求,也让机密数据牢牢留在你自己的机房里。
原创文章,作者:七点互动,如若转载,请注明出处:https://ai.qidianhudong.com/aikonw/3960.html