PDF 是一种结构复杂的文件格式。FastGPT 内置的 PDF 解析器使用 pdfjs 库进行解析,这种基于逻辑的解析方式在处理简单文本时表现良好,但在遇到图片、表格、公式等复杂内容时,往往无法达到理想的解析效果。
为了更好地处理这些复杂内容,我们可以选择其他解析方案。例如 Marker[1] 项目,它采用 Surya 模型进行基于视觉的解析,能够有效提取 PDF 中的图片、表格、公式等复杂内容。为了让用户能够方便地在 FastGPT 中使用 Marker,我们开发了一个自定义解析的扩展 Demo。
从 FastGPT 4.8.15 版本开始,你可以通过配置环境变量来替换系统默认的解析器,实现自定义的文档解析服务。需要注意的是,该功能目前处于 Demo 阶段,后续的配置方式和交互规则可能会有所调整。
为了使用 Marker 进行 PDF 解析,我们首先需要安装 Marker 模型。你可以参考 Marker 安装教程[2] 进行完整安装。我们已经将 API 封装并适配了 FastGPT 的自定义解析服务,使其能够无缝集成。
下面介绍一个最简单的安装方法 - 使用 Docker 快速部署:
docker pull crpi-h3snc261q1dosroc.cn-hangzhou.personal.cr.aliyuncs.com/marker11/marker_images:latest
docker run --gpus all -itd -p 7231:7231 --name model_pdf_v1 crpi-h3snc261q1dosroc.cn-hangzhou.personal.cr.aliyuncs.com/marker11/marker_images:latest
要启用自定义解析服务,需要在 FastGPT 中配置以下环境变量:
CUSTOM_READ_FILE_URL=http://xxxx.com/v1/parse/file
CUSTOM_READ_FILE_EXTENSION=pdf
完成配置后,你可以通过以下步骤验证解析效果:
1. 在知识库中上传一个 PDF 文件并确认上传
2. 查看系统日志(需要将 LOG_LEVEL 设置为 info 或 debug 级别)
[Info] 2024-12-05 15:04:42 Parsing files from an external service
[Info] 2024-12-05 15:07:08 Custom file parsing is complete, time: 1316ms
3. 你会发现通过 Marker 解析的 PDF 文件中包含了完整的图片链接,这表明解析成功
为了直观展示 Marker 的解析能力,我们以清华大学发表的论文 ChatDev: Communicative Agents for Software Development[3] 为例进行测试。下面是解析结果的对比展示:
通过对比可以发现,Marker 不仅能够准确提取文本内容,还能很好地识别和保留文档中的图片、公式和表格等复杂元素,解析效果相当出色。
需要特别说明的是,Marker[4] 采用 GPL-3.0 开源协议,在使用时请务必遵守相关协议规定。
[1]
Marker: https://github.com/VikParuchuri/marker
[2]
Marker 安装教程: https://github.com/labring/FastGPT/tree/main/python/pdf-marker
[3]
ChatDev: Communicative Agents for Software Development: https://arxiv.org/abs/2307.07924
[4]
Marker: https://github.com/VikParuchuri/marker