[Bug]:Ollama vision models cannot be used to parse datasets

用户使用 RAGFlow v0.20.3 版本,通过 Docker Compose 部署(带 GPU 支持)。在数据集解析步骤中,期望通过 API 设置 chunk_method: "picture" 和 parser_config.layout_recognize: "qwen2.5vl:7b-q

[Bug]:Ollama vision models cannot be used to parse datasets

[Bug]:Ollama vision models cannot be used to parse datasets

快速结论:该问题发生在 RAGFlow 使用 Ollama 视觉模型(如 qwen2.5vl)进行 PDF 数据集解析时。优先排查点:RAGFlow 的 picture 分块逻辑始终会应用一个 OCR 长度截断,只有提取的文本足够短时才会调用视觉模型;且视觉模型选择受全局 IMAGE2TEXT 配置控制,而不是数据集级别的 parser_config。

问题场景

用户使用 RAGFlow v0.20.3 版本,通过 Docker Compose 部署(带 GPU 支持)。在数据集解析步骤中,期望通过 API 设置 chunk_method: "picture"parser_config.layout_recognize: "qwen2.5vl:7b-q4_K_M@Ollama" 来让 RAGFlow 调用 Ollama 视觉模型对 PDF 进行图片级解析(image2text),但实际运行时:

  • 任务心跳显示 parser_id: "picture",但 executor 在调用视觉模型前崩溃;
  • Ollama 日志中仅出现 /api/embeddings 请求,未出现 /api/generate/api/chat
  • 当尝试在界面选择 qwen2.5vl 模型作为解析器时,系统默认回退到 naive 解析器,并报整数/字符串类型错误;
  • 上传 UI 本地文件限制为 8MB(S3 上传被禁用)。

报错原文

[executor crash before any vision call]
Task heartbeat shows parser_id: "picture" and correct layout_recognize/img2txt_id, but the executor crashes before any vision call.

[Ollama logs]
Only /api/embeddings calls; no vision calls.

[Fallback issue]
When I attempt to select the qwen2.5vl model as the Parser, it always defaults to naive, and I get an integer/string error in my chunk.

原因分析

RAGFlow 的 picture 分块代码(rag/app/picture.py)在设计上始终首先应用 OCR 长度截断:如果 OCR 提取的文本过长,则跳过视觉模型(Ollama),直接返回 OCR 输出。这意味着视觉模型仅对极短的图片被调用,且此行为无法通过数据集级别的 API 配置可靠控制。此外,视觉模型的选择仅由系统/租户级别的全局 IMAGE2TEXT 配置决定,parser_config.layout_recognize 的设置不会影响 picture 分块的视觉模型路由。这是代码中的有意设计,而非动态错误或配置错误。

近期更新(PR #9472)修复了 Ollama 视觉模型的 base64 头问题(去掉了 data: URI 前缀),但 OCR 长度截断导致的视觉模型跳过问题仍然存在。此外,如果 API 请求中 parser_idparser_config 等相关字段命名或配置有误,也可能触发回退到 naive 解析器以及整数/字符串错误。

环境排查

  • RAGFlow 镜像版本:v0.20.3-11-g09570c73 slim
  • 部署方式:Docker Compose(带 GPU 支持)
  • 主机 OS:Windows 11 + WSL2 / 容器内 Ubuntu 22.04
  • Ollama 模型:qwen2.5vl:7b-q4_K_M
  • 嵌入模型:nomic-embed-text:latest
  • 数据库/缓存:MySQL + Redis (DB=1)
  • 显卡:NVIDIA Quadro RTX 8000(驱动版本 580.88,CUDA 版本 13.0)

解决步骤

  1. 确认全局 IMAGE2TEXT 配置:在 RAGFlow 的 Model Providers 页面中,确保默认的 image2text 提供者设置为 qwen2.5vl:7b-q4_K_M@Ollama,且 API 地址正确(例如 http://ollama:11434)。
  2. 理解限制:当前设计下,picture 分块会先执行 OCR,仅当 OCR 文本非常短时才调用视觉模型。如果需要视觉模型处理所有图片,可能原因:需要修改源码绕过 OCR 长度截断,或等待后续版本更新。
  3. 检查 API 请求参数:确认 PUT /api/v1/datasets/{dataset_id} 的请求体中 parser_config 字段的名称和嵌套结构是否完全正确,尤其是 layout_recognize 的拼写和格式。可优先尝试仅使用全局配置,而不在数据集级别设置 layout_recognize
  4. 验证 Ollama 服务:单独测试 Ollama 视觉模型是否正常工作(例如通过 docker 或 curl 调用 /api/generate)。
  5. 检查上传限制:如果使用 UI 上传,注意 nightly 版本的本地上传限制为 8MB。可通过 API 上传大文件:POST /api/v1/datasets/{dataset_id}/documents(multipart 格式)。

验证方法

检查 RAGFlow 日志中是否出现 parser_id: "picture" 且有正常的 vision 调用过程,同时检查 Ollama 日志中是否出现 /api/generate/api/chat 请求。如果视觉模型被调用且解析完成,则问题解决。

参考来源

infiniflow/ragflow #9614

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 13485

发表回复

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