侧边栏壁纸
博主头像
龍騰博客 博主等级

行动起来,活在当下

  • 累计撰写 167 篇文章
  • 累计创建 31 个标签
  • 累计收到 7 条评论

目 录CONTENT

文章目录

Open WebUI 知识库能力补全教程:文档解析依赖 + bge-m3 中文嵌入

管理员
2026-07-09 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

目标:解决 .docx/.doc 上传失败问题,并让知识库检索对中文更准确

适用范围:你现有的两套 Open WebUI ——

  • open-webui-llamacpp(项目 llama-local,接 Qwythos/Qwen36)

  • open-webui(项目 ollama,接 HA 那套)

两套配置思路完全一样,本教程以 open-webui-llamacpp 为主线演示,最后一节说明另一套怎么照做。


第一部分:修复 .docx/.doc 上传报错(自定义镜像)

1.1 为什么要自定义镜像,而不是直接在容器里装

官方镜像默认缺两个东西:

  • python-docx 库 —— 解析 .docx 文件必需

  • LibreOffice —— 转换老版本 .doc/.xls/.ppt 到新格式必需

直接 docker exec 进容器手动装能临时解决,但容器一旦被重建(升级、fnOS 面板"构建"、reset 等操作)就会消失,得反复装。正确做法是把这两个依赖写进一个自定义镜像,一劳永逸。

1.2 建立自定义镜像的工作目录

mkdir -p /vol3/1000/docker/llama/openwebui-custom
cd /vol3/1000/docker/llama/openwebui-custom

1.3 创建 Dockerfile

nano Dockerfile

粘贴以下内容:

FROM ghcr.io/open-webui/open-webui:main

RUN pip install python-docx --break-system-packages \
    && apt-get update \
    && apt-get install -y --no-install-recommends libreoffice-writer \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

只装 libreoffice-writer 而不是完整 LibreOffice 套件,能省下几百 MB 体积和大量安装时间,因为你只需要它处理 Word 文档转换。

保存退出(Ctrl+O 保存,Ctrl+X 退出)。

1.4 构建镜像

docker build -t open-webui-custom:latest .

这一步会花几分钟(要下载安装 LibreOffice 组件),耐心等待,看到最后一行 Successfully tagged open-webui-custom:latest 说明构建成功。

1.5 修改 compose 文件,切换成自定义镜像

编辑你的 docker-compose.llama.yml

cd /vol3/1000/docker/llama          # 换成你实际存放 compose 文件的路径
nano docker-compose.llama.yml

找到 open-webui 这个服务,把 image 那一行改掉:

  open-webui:
    image: open-webui-custom:latest    # 原来是 ghcr.io/open-webui/open-webui:main
    container_name: open-webui-llamacpp
    restart: always
    ...(其他内容不用动)

保存退出。

1.6 重新部署,生效

docker compose up -d --force-recreate open-webui

1.7 验证依赖装上了

docker exec open-webui-llamacpp python3 -c "import docx; print('python-docx OK')"
docker exec open-webui-llamacpp soffice --version

两条都能正常输出(不报 No module namedcommand not found),说明依赖到位了。


第二部分:配置 bge-m3 中文嵌入模型

2.1 先在 Ollama 里拉取模型(只需要做一次)

docker exec -it ollama ollama pull bge-m3

bge-m3 装在 Ollama 容器里,你现有两套 Open WebUI 共用同一个 Ollama,这一步不用为每套 WebUI 重复执行。

拉取完确认一下:

docker exec -it ollama ollama list

能看到 bge-m3 在列表里即可。

2.2 在 open-webui-llamacpp 里配置

浏览器打开 http://NAS的IP:8088,用管理员账号登录。

  1. 左下角头像 → 管理员面板

  2. 左侧 设置 → 文档

  3. 找到 Embedding Model 相关设置区域,按下面填:

项目

填写内容

嵌入模型引擎

Ollama

API 地址

http://192.168.0.188:11434

嵌入模型

bge-m3

混合搜索

建议打开

  1. 拉到页面底部,点击 保存

2.3 验证配置生效

进一个已有的知识库(或新建一个测试用的),随便上传一个中文 .txt 或刚才装好依赖后的 .docx 文件,等状态变成"已处理",然后在聊天框里用 # 号引用这个知识库提问,看能不能正确检索到内容。


第三部分:⚠️ 换嵌入模型前必须知道的风险

如果你之前已经用默认嵌入模型上传过文档,换成 bge-m3 之后,新旧文档的向量维度会对不上,导致:

  • 旧文档在列表里还能看到,但语义搜索匹配不到内容

  • 后续上传新文档也可能连带报错

解决方式:换完模型后,回到 管理员面板 → 设置 → 文档,拉到最下面,点击 「重置向量存储/知识」,然后把之前的文档重新上传一遍

这一步会清空知识库里已有的向量索引,操作前请确认:

  • 如果知识库文档不多,现在做代价最小

  • 如果文档已经积累不少,评估一下重新整理的工作量,或者先小范围测试确认效果满意后再动手清空


第四部分:另一套 open-webui(项目 ollama)怎么配

如果你也想让接 HA 的那套 Open WebUI 支持同样的文档解析和中文检索能力,重复以下操作即可:

4.1 文档解析依赖(如果这套也需要上传 docx/doc)

同样的思路,找到这个项目的 compose 文件(路径根据你实际情况调整,可以用 find / -name "docker-compose.yml" 2>/dev/null | grep -v llama 找一下),把 image 换成第一部分构建好的同一个 open-webui-custom:latest,重新部署即可——不需要重新构建镜像,两套 WebUI 可以共用你已经 build 好的这一个自定义镜像。

4.2 bge-m3 嵌入配置

登录这套 WebUI(http://NAS的IP:8081),同样走 管理员面板 → 设置 → 文档,填一模一样的三项配置(引擎 Ollama、地址 http://192.168.0.188:11434、模型 bge-m3),保存即可。

不需要再执行一次 ollama pull bge-m3——模型已经在 Ollama 里了,两套 WebUI 都能直接调用。


快速检查清单

检查项

命令

python-docx 装好了吗

docker exec open-webui-llamacpp python3 -c "import docx"

LibreOffice 装好了吗

docker exec open-webui-llamacpp soffice --version

bge-m3 模型在不在

docker exec -it ollama ollama list | grep bge-m3

自定义镜像是否生效

docker inspect open-webui-llamacpp --format='{{.Config.Image}}',应显示 open-webui-custom:latest

0

评论区