快速结论:该问题通常出现在 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、显卡或节点版本依赖,无需按这些方向排查。
解决步骤
- 确认当前部署版本是否包含 #21573 修复;如为源码部署,更新到包含该合并 PR 的分支或提交。
- 重新构建并部署 RAGFlow 摄入服务,确保
/file_parse上传请求绑定到运行ctx,而非默认 client。 - 如暂时无法升级,可先避免在 MinerU 3.x 场景下依赖取消机制(可优先尝试);此仅为规避思路,Issue 中未将其作为已验证修复方案。
- 部署后按原复现步骤验证:启动 PDF 解析、等待
/file_parsePOST 到达,然后取消运行上下文。
验证方法
取消摄入运行后,dispatchMinerUPDF 应立即返回,返回错误应满足 errors.Is(err, context.Canceled),且不再继续等待远端响应;未取消的运行仍受 30 分钟上限约束。可运行 TestDispatchPDFMinerUStreamHonoursCancellation,修复后该测试应在取消后立即返回,而不是超时。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Bug]: MinerU polling ignores cancellation and reports the wait timeout as a missing result](https://www.chat-gpts.plus/wp-content/uploads/2026/10/21570-666056f1-768x403.jpg)
![2024/01/10 19:17:53 [W] [service.go:132] login to server failed: dial tcp 44.237.78.176:7000: connect: connection refused](https://www.chat-gpts.plus/wp-content/uploads/2026/10/6988-22b6a761-768x403.jpg)
