LLM之Agent(二十三)| Agentic-Doc:轻松从复杂文档中提取结构化数据

向量数据库大模型数据中台

agestic-doc 是一个功能强大的 Python 库,可从 PDF 和图像等复杂文档中提取结构化、视觉上基于的数据,使文档自动化变得简单可靠。

picture.image

 您是否曾经为从凌乱的 PDF、扫描的发票或长报告中提取表格、图像或重要数据而苦恼?如果是,那么您并不孤单。


 从复杂的文档中手动提取数据非常耗时,普通的 OCR 工具经常会遗漏结构、位置,有时甚至会遗漏内容。


 Agentic-DocLandingAI 的一个 Python 库,旨在解决这个问题。它由代理文档提取 (ADE) 提供支持,帮助我们从最复杂的文档中提取结构化的、视觉上基于的数据,并以易于使用的 JSONMarkdown 格式返回结果。

一、什么是代理文档提取?

 ADE 是一种人工智能驱动的方法, 超越了简单的 OCR。它不仅仅是阅读文本,而是:
  • 理解视觉布局: 识别表格、图片、标题、段落、图表等。

  • 提供地面实况边界框: 准确显示每个数据块在页面上的位置。

  • 返回结构化输出: 以分层方式组织内容,包括位置和类型信息。

    文档中的数据不仅与文本有关,还与结构、表格、标题和视觉提示有关。ADE 保留所有这些上下文,这对于下游自动化、搜索和 QA 非常有用。

二、什么是 agestic-doc?

 agestic-doc 是 ADE API 的 Python 包装器。它通过以下方式使开发人员更容易提取文档:
  • 支持任何长度的 PDF(甚至 1000+ 页);
  • 在 API 错误或超时时自动重试;
  • 从图像、URL、云存储等中提取;
  • 提供可视化和调试提取的工具;
  • 允许批量和并行处理以提高速度;
  • 以 Markdown 和结构化 JSON 的形式返回数据

总之: 如果您想自动化和扩大文档数据提取 - 这就是适合您的工具!

2.1 流程图:

picture.image

主要功能一览:

📄 所有文件类型: 支持 PDF、图像(png、jpg 等)和 URL。

📚 处理长文档: 自动并行拆分和处理大文件。

🏃 批处理和并行处理: 一次高效地从多个文件中提取。

🧩 结构化输出: 易于使用的 JSON 和 Markdown。

👁️ 可视化调试: 查看每个块的提取位置,以及边界框图像。

🔄 弹性 : 使用智能退避逻辑重试失败的请求。

🛠️ 帮助程序: 处理大多数任务的简单 Python 函数。

⚙️ 灵活配置: 环境变量和 .env 支持批量大小、日志记录、重试。

🌐 云就绪:Google Drive、Amazon S3、本地文件夹、URL 甚至内存中的字节。

2.2 安装和配置

a)前提条件:

b)安装库

  
pip install agentic-doc

c)设置API Key

  
export VISION\_AGENT\_API\_KEY=<your-api-key>

或者将其放在项目文件夹中的 .env 文件中。

三、agestic-doc基本用法

3.1 从单文档获取数据

  
from agentic_doc.parse import parse  
  
result = parse("path/to/document.pdf")  
print(result[0].markdown)   # Extracted data in Markdown  
print(result[0].chunks)     # Extracted data as structured JSON

还可以从 URL 或图像进行解析:

  
result = parse("https://example.com/report.pdf")  
result = parse("path/to/image.png")

3.2 从多文档获取数据

  
file_paths = ["invoice1.pdf", "invoice2.pdf"]  
results = parse(file_paths)  
for r in results:  
    print(r.markdown)

3.3 将结果保存到目录

  
results = parse(file_paths, result_save_dir="output/")  
for r in results:  
    print(r.result_path)  # Each result saved as JSON

3.4 使用 Pydantic 进行现场提取

您可以使用 Pydantic 模型直接提取特定字段:

  
from pydantic import BaseModel, Field  
from agentic_doc.parse import parse  
  
class ExtractedFields(BaseModel):  
    name: str = Field(description="Employee name")      
    amount: float = Field(description="Gross pay")      
    address: str = Field(description="Employee address")  
results = parse("salary_slip.pdf", extraction_model=ExtractedFields)  
fields = results[0].extraction  
meta = results[0].extraction_metadata  
print(f"Name: {fields.name}, Confidence: {meta.name.confidence}")

3.5 连接器:从云端提取

3.5.1 Google Drive 示例:

  
from agentic_doc.parse import parse  
from agentic_doc.connectors import GoogleDriveConnectorConfig  
  
config = GoogleDriveConnectorConfig(  
    client_secret_file="credentials.json",      
    folder_id="your-folder-id"  
)  
results = parse(config)

3.5.2 Amazon S3 示例:

  
from agentic_doc.parse import parse  
from agentic_doc.connectors import S3ConnectorConfig  
  
config = S3ConnectorConfig(  
    bucket_name="my-bucket",      
    region_name="us-east-1"  
)  
results = parse(config)

3.6 本地目录

  
from agentic_doc.parse import parse  
from agentic_doc.connectors import LocalConnectorConfig  
  
config = LocalConnectorConfig(recursive=True)  
results = parse(config, connector_path="docs/")

以原始字节的方式读取

  
with open("document.pdf", "rb") as f:  
    data = f.read()  
results = parse(data)

四、可视化调试和接地

保存每个提取的块的边界框图像:

  
from agentic_doc.parse import parse_documents  
results = parse_documents(["report.pdf"], grounding_save_dir="groundings/")  
# Each chunk's bounding box saved as image in the output folder

整页可视化:

  
from agentic_doc.utils import viz_parsed_document  
images = viz_parsed_document("report.pdf", results[0], output_dir="viz/")  
# Shows bounding boxes and labels on the original document image

五、错误处理和配置

Retries:API/网络错误自动重试(HTTP 408、429、502、503、504)

Backoff & Jitter: 在两次重试之间等待更长的时间,增加随机性以避免“群体”问题

Configurable: 在 .env 中设置 BATCH_SIZE、MAX_WORKERS、MAX_RETRIES 等参数

.env示例:

  
BATCH_SIZE=4  
MAX_WORKERS=2  
MAX_RETRIES=80  
MAX_RETRY_WAIT_TIME=30  
RETRY_LOGGING_STYLE=log_msg

六、性能

超快: 平均文档的中位处理时间为 ~8 秒(而旧 API 为 135 秒)。

可靠: 自动处理非常大的文件、多个文档和网络问题。

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
火山引擎大规模机器学习平台架构设计与应用实践
围绕数据加速、模型分布式训练框架建设、大规模异构集群调度、模型开发过程标准化等AI工程化实践,全面分享如何以开发者的极致体验为核心,进行机器学习平台的设计与实现。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论