这是一个非常经典的问题,根据社区中类似的讨论(特别是该用户自己在另一个帖子 /t/topic/683 中的反馈),主要原因是 标准的文档提取器(Doc Extractor)节点默认不支持对扫描版 PDF(纯图片 PDF)进行 OCR 文字识别。
以下是针对此问题的分析和建议方案:
核心原因分析
- 扫描版 PDF 没有文本层:用户上传的是扫描件,本质上是一张张图片打包成的 PDF。
- 提取器限制:Dify 内置的“文档提取器”节点(Document Extractor)在处理 PDF 时,通常默认使用
pypdfium2等工具,这些工具只能提取文件中的可选文本,无法对图片进行 OCR 识别。 - 结果:提取器输出的
text变量为空字符串。 - LLM 的反应:因为传入 Prompt 的变量内容为空,LLM 确实“没有看到”任何内容,所以它的回答(“未收到任何上传的文档”)是完全诚实且正确的。
建议解决方案
请建议用户不要使用内置的“文档提取器”节点,而是采用以下替代方案之一:
方案一:使用 Unstructured 插件(推荐)
Dify 插件市场(Marketplace)中提供了 Unstructured 插件,它支持更高级的解析策略。
- 在工作流中删除原有的“文档提取器”。
- 在右侧“插件”或“工具”中搜索并添加 Unstructured 插件。
- 在配置插件时,确保启用或选择支持 OCR 的策略(例如
hi_res或配置 OCR 相关的参数)。 - 注意:这通常需要用户自行部署 Unstructured 服务或使用其 API Key,并在 Dify 的设置中正确配置凭证。
方案二:使用专门的 OCR 插件
如果不使用 Unstructured,也可以在插件市场搜索 OCR 相关的工具(如 General OCR, Aliyun OCR 等),先将文件传入 OCR 工具获取文本,再将 OCR 输出的文本传递给 LLM。
总结给用户的回复示例
您可以这样回复用户:
这个问题的原因已经定位:Dify 内置的“文档提取器”节点默认不支持对扫描版 PDF(纯图片)进行 OCR 文字识别。因此提取出的
text实际上是空的,LLM 确实没有收到任何文字内容。解决方法:
请去 插件市场 (Marketplace) 寻找支持 OCR 功能的插件来替代原有的文档提取器节点。
- 推荐尝试 Unstructured 插件(需要配置相应的服务或 API)。
- 或者搜索其他 OCR 类的插件。
您自己在另一个帖子 (Topic 683) 中其实已经触及到了核心原因,即本地部署的 ETL 配置主要用于知识库,而不直接作用于工作流中的内置节点。工作流中处理扫描件必须显式使用支持 OCR 的工具节点。
相关文档与讨论:
- Unstructured 插件 - Dify Marketplace
- 相关社区讨论:/t/dify/683 (用户自己的另一个相关提问)