☰
WeKnora 离线部署实操:如何在无网环境下跑起本地 RAG 知识库与问答 Agent
2026/10/2 8:07:19 网站建设 项目流程

WeKnora 离线部署实操:如何在无网环境下跑起本地 RAG 知识库与问答 Agent

【免费下载链接】WeKnoraOpen-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki.项目地址: https://gitcode.com/GitHub_Trending/we/WeKnora

内网机器没有外网,文档又不能交给云端 API,但你仍想要一个能传文档、能提问、能给出引用出处的 RAG 知识库。本文用 Docker + Ollama 完成 WeKnora 私有化部署:跑通后,解析、检索、推理全部落在本机,问答自带引用来源。

先看你的处境:这条路是否适合走

你的情况这条路线是否适合更省事的替代选择
机器连不上外网(单位内网、机房),网页都打不开适合。镜像、模型、解析全部本地化,拔线也能跑若偶尔有网络窗口,在联网机上把物料备齐再拷入内网部署
文档涉密,合规要求数据不出机器适合。文件与权重只落在自己的磁盘上涉密与非涉密混用时,只让涉密文档进这套库,其余走云端服务
想在自己的硬件上吃透 RAG 链路,或给小团队做试点适合。单机 compose 编排就够,不必上重型调度纯个人尝鲜、无多人协作需求,可先试零依赖的单应用 Lite 版

机器预检:硬件下限与联网窗口清单

项目下限一句原因
软件Docker ≥ 20.10、Compose v2、Gitcompose 文件按 v2 语法编写,老版本直接解析失败
硬件8 核 CPU / 32GB 内存7B 对话模型推理以内存为主,可用内存低于 16GB 时响应明显拖慢
磁盘预留 200GB镜像、模型权重、解析中间产物都往盘上写
联网窗口首次拉镜像、下模型必须能上网⚠️ 离线部署的正确顺序:在联网机上拉完镜像(docker save打包)、下好模型,再整体拷进内网,而非在目标机上现拉

搭建走查:取壳、接脑、跑通

取壳:代码与唯一配置入口

git clone https://gitcode.com/GitHub_Trending/we/WeKnora cd WeKnora && cp .env.example .env

克隆代码并复制出配置模板——整个部署只有一个配置入口就是.env,数据库密码、存储类型、Ollama 地址全在这一个文件里,模板内每项都带注释。

重点确认以下几处,其余保持默认:

变量模板默认值作用(一句话)
STORAGE_TYPElocal文件直接落到容器挂载的本地目录,不引入对象存储
OLLAMA_BASE_URLhttp://host.docker.internal:11434容器内访问宿主机 Ollama 的固定写法,写成localhost会指向容器自己
DB_PASSWORD/REDIS_PASSWORD/SYSTEM_AES_KEY模板示例值换成自生成值,内网环境也别直接沿用示例密码

另外 config/config.yaml 会被直接挂载进 app 容器(映射到/app/config/config.yaml),调解析与检索行为时改它、重启容器即可,不需要重建镜像。

接脑:两个 Ollama 模型就位

ollama pull bge-m3 # 嵌入模型 ollama pull qwen2.5:7b # 对话模型,可换成你已有的型号

嵌入和对话各备一个;离线机器上这两条命令要在联网机执行,导出模型文件拷入目标机再导入。模型缺席时 app 只告警、不崩溃,但问答功能暂时不可用。

跑通:一条命令拉起整套集群

./scripts/start_all.sh -c ./scripts/start_all.sh --no-pull

第一条是环境自检,先跑一遍排除低级问题;第二条正式拉起前端、app、postgres、docreader、redis 这批容器。--no-pull表示跳过联网拉镜像、只用本地已有的——这正是离线启动的开关,有网的首次部署去掉它即可。脚本还会顺带确认 Ollama 存活、.env齐全。

🚀 脚本末尾打印出前端(80 端口)与 API(8080 端口)两个地址时,集群即就绪。更多启动、停止、重建操作都收在 scripts/start_all.sh 里。

验收:从进程级到效果级逐层确认

进程级——容器状态。

docker compose ps

确认全部为 Up,重点盯WeKnora-app、WeKnora-postgres、WeKnora-docreader三个核心容器。

服务级——健康检查与首次登录。

curl -f http://localhost:8080/health

返回 200 说明后端自检通过;随后浏览器打开http://localhost,系统默认开放注册,把第一个账号注册并登录。

效果级——传 PDF 提问,回答带引用。

新建一个知识库,上传一份 PDF,等解析状态转为完成;再到问答页问一句"这份文档主要讲什么"。回答中出现引用来源标注,整条链路才算全通。

✅ 三层全部通过,这次部署才算真正落地。

排障与调优:高频卡点与三个旋钮

症状可能原因处理
app 容器反复重启,日志刷 Ollama 连接失败Ollama 进程没起,或.env里地址写成localhost先在宿主机跑curl http://localhost:11434/api/tags确认进程活着,再把地址改成host.docker.internal
上传文档被直接拒绝单文件超过 50MB 默认上限拆分文件,或在.env调大MAX_FILE_SIZE_MB
解析卡住无进展该格式不被解析器支持看docker compose logs docreader,解析错误会指明具体原因

调优集中在三个旋钮,无 GPU 时优先动第一个:

旋钮所在文件说明
对话模型规格前端模型设置 /ollama pull的目标型号CPU 推理全压对话模型,换更小规格见效最快
嵌入批次大小.env的BATCH_EMBED_SIZE调小用内存换稳定性
召回数量config/config.yaml 的embedding_top_k/rerank_top_k调小减少检索上下文,回答更快

收尾:跑通之后

至此,一台不碰外网的机器上已跑起完整的 WeKnora 私有化链路:文档解析、向量检索、模型推理全部本地完成,数据不出机器。

接下来值得做的两件事:给data-files数据卷挂独立磁盘并定期备份;把 Ollama 指向内网里显存最大的那台机器,做模型负载分担。

延伸阅读:

  • 部署脚本与全部子命令:scripts/start_all.sh
  • 配置模板(含逐项注释):.env.example
  • 常见问题与运维手册:docs/QA.md

【免费下载链接】WeKnoraOpen-source LLM knowledge platform: turn raw documents into a queryable RAG, an autonomous reasoning agent, and a self-maintaining Wiki.项目地址: https://gitcode.com/GitHub_Trending/we/WeKnora

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询