![[Bug]: Bug Report: Base64 Image String Being Split into Individual Characters](https://www.chat-gpts.plus/wp-content/uploads/2026/07/9302-a8607eee.jpg)
[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 参数是否为字符串而非列表
解决步骤
- 升级 RAGFlow 版本:将 RAGFlow 镜像升级到 2025-08-05 之后发布的版本(如 v0.21.0 或更高),包含 PR #9220 的修复。建议执行
docker pull获取最新镜像,并更新 docker-compose 配置。 - 临时工作区(如果不能立即升级):在调用 API 时,将 Base64 图片字符串包装为列表。例如,将
images="data:image/jpeg;base64,..."改为images=["data:image/jpeg;base64,..."],避免字符串被按字符迭代。 - 验证 API 请求体:在发送请求前,打印或记录最终传递给模型的
content数组,确保image_url.url字段是完整的 Base64 字符串,而非被拆分的片段。
验证方法
升级后或应用临时工作区后,重新执行图像转文本功能。检查输出的 API 请求 payload(可通过日志或抓包确认),确保 image_url.url 中只有一个包含完整 Base64 字符串的 image_url 对象,而不是数百个字符级别的对象。同时验证模型能正常解析图片并返回文本结果。



