issue: `fetch_url` doesn’t work with Playwright in Offline Mode (missing `averaged_perceptron_tagger_eng` NLTK resource)

用户通过 Docker 部署 Open WebUI v0.9.6,配合独立的 Playwright 容器(mcr.microsoft.com/playwright:v1.58.0-noble),且设置了以下离线模式相关环境变量:

issue: `fetch_url` doesn't work with Playwright in Offline Mode (missing `averaged_perceptron_tagger_eng` NLTK resource)

issue: `fetch_url` doesn’t work with Playwright in Offline Mode (missing `averaged_perceptron_tagger_eng` NLTK resource)

快速结论:在 Open WebUI 离线模式下(`OFFLINE_MODE=True`, `HF_HUB_OFFLINE=1`),调用 `fetch_url` 工具时,内部使用的 Python NLTK 库无法自动下载 `averaged_perceptron_tagger_eng` 资源,导致 Playwright 抓取页面后处理失败,返回空结果。优先确认容器内是否已预装此 NLTK 资源包。

问题场景

用户通过 Docker 部署 Open WebUI v0.9.6,配合独立的 Playwright 容器(mcr.microsoft.com/playwright:v1.58.0-noble),且设置了以下离线模式相关环境变量:

  • OFFLINE_MODE=True
  • HF_HUB_OFFLINE=1
  • RAG_EMBEDDING_MODEL_AUTO_UPDATE=False

当聊天调用 fetch_url 工具时,Playwright 成功获取页面内容,但 LLM 收到空结果,容器日志中出现 Python 堆栈跟踪。

报错原文

inability to download an NLTK tagger taggers/averaged_perceptron_tagger_eng/

原因分析

NLTK 的 averaged_perceptron_tagger_eng 是一个词性标注模型数据包。在离线模式下,NLTK 默认会尝试联网自动下载缺失的语料库/模型包,但被 HF_HUB_OFFLINE=1 或网络策略阻断,导致下载失败。fetch_url 工具底层依赖 Playwright(通过 SafePlaywrightURLLoader)对页面内容进行结构化解析,该流程会调用 NLTK 进行文本处理,因而报错。即使临时关闭离线模式也无法绕过——因为资源文件尚未被缓存到容器本地。

可能原因:Open WebUI 的 Docker 镜像或 Playwright 容器镜像中,默认未包含 averaged_perceptron_tagger_eng 的预下载缓存。

环境排查

  • Docker 镜像版本:ghcr.io/open-webui/open-webui:v0.9.6
  • Playwright 容器版本:mcr.microsoft.com/playwright:v1.58.0-noble(Playwright npm 包 v1.58.0)
  • Python NLTK 版本:Open WebUI 内嵌版(并非独立安装)
  • 确认配置项:OFFLINE_MODE, HF_HUB_OFFLINE, RAG_EMBEDDING_MODEL_AUTO_UPDATE

解决步骤

  1. 进入 Open WebUI 容器终端(或修改 Dockerfile 重新构建镜像):
    docker exec -it <openwebui-container-id> /bin/bash
  2. 手动下载缺失的 NLTK 资源包
    python -m nltk.downloader averaged_perceptron_tagger_eng

    (此操作需要临时网络连接,或提前在内网可访问的机器上下载后导入。)

  3. 确认资源下载位置:通常位于 /root/nltk_data/home/playwright/nltk_data,可将其打包为持久化卷或嵌入镜像。
  4. 持久化解决(推荐):在 Docker Compose 配置中,将 NLTK 数据目录挂载为卷,或构建自定义镜像时预先 download:
    # Dockerfile 示例(基于 open-webui 基础镜像)
    FROM ghcr.io/open-webui/open-webui:v0.9.6
    RUN python -m nltk.downloader averaged_perceptron_tagger_eng
  5. 如果仍失败,可考虑对 fetch_url 工具禁用 NLTK 依赖(仅当 Open WebUI 提供相应配置开关,但 Issue 中未提及此选项,此为推测方案)。

验证方法

执行以下 Python 命令,确认不再报错:

python -c "import nltk; nltk.data.find('taggers/averaged_perceptron_tagger_eng')"

随后在 Open WebUI 中恢复离线模式,向聊天发送带 URL 的 fetch_url 工具调用,检查容器日志无 NLTK 相关异常,且 LLM 正确返回页面内容摘要。

参考来源

open-webui/open-webui #26198

相关 Issue:#24393 — bug: PPTX/DOC file processing hangs at status=pending in fresh container — averaged_perceptron_tagger_eng NLTK resource not bundled(相同根因)

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 9275

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注