[Bug]: Bug Report: Base64 Image String Being Split into Individual Characters

用户在本地通过 Docker Compose 部署 RAGFlow v0.20.0-slim(commit 14012003),配置了 ollama/qwen2.5vl:7b 视觉模型,并通过 litellm 提供 OpenAI 兼容接口。当调用图像转文本功能时,传入的 Base64 图片字符串被错

[Bug]: Bug Report: Base64 Image String Being Split into Individual Characters

[Bug]: Bug Report: Base64 Image String Being Split into Individual Characters

快速结论:当你在 RAGFlow 本地部署中使用视觉模型(如 qwen2.5vl)进行图像转文本时,Base64 图片字符串被错误地拆分成单个字符,每个字符被当作独立的 image_url 对象发送。优先检查 RAGFlow 版本是否低于 v0.20.0-slim,并升级到包含 PR #9220 修复的版本(2025-08-05 之后发布)。

问题场景

用户在本地通过 Docker Compose 部署 RAGFlow v0.20.0-slim(commit 14012003),配置了 ollama/qwen2.5vl:7b 视觉模型,并通过 litellm 提供 OpenAI 兼容接口。当调用图像转文本功能时,传入的 Base64 图片字符串被错误解析。

报错原文

{
  "model": "ollama/qwen2.5vl:7b",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "text": "请用中文详细描述一下图中的内容,比如时间,地点,人物,事情,人物心情等,如果有数据请提取出数据。",
          "type": "text"
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/jpeg;base64,i"
          }
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/jpeg;base64,V"
          }
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "data:image/jpeg;base64,B"
          }
        }
        // ... continues for each character
      ]
    }
  ]
}

原因分析

该 Bug 由 RAGFlow 处理 Base64 图片字符串的方式导致:当图片以 字符串 形式传入时,代码将其视为可迭代对象,逐字符拆分,每个字符被单独包装为一个 image_url 对象。这在 Issue #9302 中被确认为已知 Bug,并在 PR #9220(2025-08-05 合并)中修复。修复方式是将单字符串图片输入包装为列表后再进行处理,从而避免拆分。

本地部署版本(v0.20.0-slim, commit 14012003)不包含此修复,而官方演示站点运行的是更新版本,因此本地复现但官方正常。

环境排查

  • RAGFlow 镜像版本:确认是否为 v0.20.0-slim 或更早版本
  • RAGFlow workspace code commit ID:14012003(受影响的版本)
  • 模型配置:ollama/qwen2.5vl:7b,通过 litellm 提供 OpenAI 兼容接口
  • 部署方式:Docker Compose 本地部署
  • API 调用方式:检查传入的 images 参数是否为字符串而非列表

解决步骤

  1. 升级 RAGFlow 版本:将 RAGFlow 镜像升级到 2025-08-05 之后发布的版本(如 v0.21.0 或更高),包含 PR #9220 的修复。建议执行 docker pull 获取最新镜像,并更新 docker-compose 配置。
  2. 临时工作区(如果不能立即升级):在调用 API 时,将 Base64 图片字符串包装为列表。例如,将 images="data:image/jpeg;base64,..." 改为 images=["data:image/jpeg;base64,..."],避免字符串被按字符迭代。
  3. 验证 API 请求体:在发送请求前,打印或记录最终传递给模型的 content 数组,确保 image_url.url 字段是完整的 Base64 字符串,而非被拆分的片段。

验证方法

升级后或应用临时工作区后,重新执行图像转文本功能。检查输出的 API 请求 payload(可通过日志或抓包确认),确保 image_url.url 中只有一个包含完整 Base64 字符串的 image_url 对象,而不是数百个字符级别的对象。同时验证模型能正常解析图片并返回文本结果。

参考来源

infiniflow/ragflow #9302

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 14755

发表回复

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