[Bug]: MinerU 3.x /file_parse upload ignores the pipeline context and stays open after the run is cancelled

该问题通常出现在 RAGFlow 摄入流程使用 MinerU 3.x 服务( /v1/health 返回 404,因而走 /file_parse 分支)解析 PDF 时:取消任务或断开客户端后, /file_parse 上传请求仍会保持打开,直到远端响应或 30 分钟超时。优先排查 MinerU 3

快速结论:该问题通常出现在 RAGFlow 摄入流程使用 MinerU 3.x 服务(/v1/health 返回 404,因而走 /file_parse 分支)解析 PDF 时:取消任务或断开客户端后,/file_parse 上传请求仍会保持打开,直到远端响应或 30 分钟超时。优先排查 MinerU 3.x 分支的请求上下文是否绑定到摄入运行的 ctx。

适用环境:Issue 已确认涉及 RAGFlow 的 Go 摄入组件 internal/ingestion/component/pdf_vision_dispatch.go,以及 MinerU 3.x 服务(/file_parse、/v1/health 返回 404)。Issue 未提供操作系统、Python、CUDA、显卡及依赖版本信息,此处不做推断。

最快修复方案:升级到包含 #21573 合并修复的 RAGFlow 版本。该修复将 /file_parse 上传请求绑定到运行上下文,而不是默认 client,取消运行时会中止上传。若使用源码部署,合并 #21573 后重新构建部署。

注意事项:Issue 未给出具体版本号,升级前请确认目标版本确实包含 #21573 的合并提交。30 分钟超时上限在修复后仍作为未取消运行的外层边界保留,因此正常长耗时解析不会因此被提前中断。该问题与 #21570(pdf_parser_mineru.go 轮询循环)和 #21535(SoMark/Docling)不是同一处代码。

问题场景

在 RAGFlow 中配置指向 MinerU 3.x 服务的 OCR 模型并解析 PDF 时,dispatchMinerUPDF 会走 MinerU 3.x 的 /file_parse 上传分支。此时如果用户取消摄入任务、客户端断开连接或服务器关闭,上传请求不会被中止,而是继续等待远端 MinerU 响应或 30 分钟超时。相比之下,同文件中的 MinerU 4 V1 分支会立即响应取消。

报错原文

[Bug]: MinerU 3.x /file_parse upload ignores the pipeline context and stays open after the run is cancelled

ctx, cancel := context.WithTimeout(context.Background(), 30*time.Minute)

with the current code the test times out after cancellation
expected: errors.Is(err, context.Canceled)

原因分析

最可能的原因是:dispatchMinerUPDF 虽然持有摄入运行的 ctx,但 MinerU 3.x 分支调用的 mineruStreamParse 没有 ctx 参数,而是用 context.Background() 自行创建 30 分钟超时上下文。因此上传请求的上下文并不派生自运行上下文,任务取消无法传递到 /file_parse 请求,摄入 worker goroutine 和远端解析槽位会被持续占用。Issue 中的复现测试 TestDispatchPDFMinerUStreamHonoursCancellation 也显示:当前代码在取消后测试超时,将上下文透传后则立即返回 context.Canceled。

环境排查

  • 确认 RAGFlow 版本或代码是否已包含 #21573 的合并修复。
  • 确认 OCR 模型指向的 MinerU 服务版本:请求 /v1/health,若返回 404,则 MinerUSupportsV1 会选择 3.x 的 /file_parse 分支,问题只在此分支出现。
  • 检查 internal/ingestion/component/pdf_vision_dispatch.go 中 mineruStreamParse 是否仍使用 context.Background() 构造超时。
  • Issue 未涉及 Python、CUDA、PyTorch、显卡或节点版本依赖,无需按这些方向排查。

解决步骤

  1. 确认当前部署版本是否包含 #21573 修复;如为源码部署,更新到包含该合并 PR 的分支或提交。
  2. 重新构建并部署 RAGFlow 摄入服务,确保 /file_parse 上传请求绑定到运行 ctx,而非默认 client。
  3. 如暂时无法升级,可先避免在 MinerU 3.x 场景下依赖取消机制(可优先尝试);此仅为规避思路,Issue 中未将其作为已验证修复方案。
  4. 部署后按原复现步骤验证:启动 PDF 解析、等待 /file_parse POST 到达,然后取消运行上下文。

验证方法

取消摄入运行后,dispatchMinerUPDF 应立即返回,返回错误应满足 errors.Is(err, context.Canceled),且不再继续等待远端响应;未取消的运行仍受 30 分钟上限约束。可运行 TestDispatchPDFMinerUStreamHonoursCancellation,修复后该测试应在取消后立即返回,而不是超时。

参考来源

infiniflow/ragflow #21572

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 31415

发表回复

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