项目简介
LandingAI 的 Agentic 文档提取 API 能够从视觉复杂的文档(如表格、图片和图表)中提取结构化数据,并返回带有精确元素位置的层次化 JSON。
此 Python 库封装了该 API,提供以下功能:
- 长文档支持 – 单次调用处理 100+ 页的 PDF
特性
- 📦 开箱即用安装:
pip install agentic-doc
– 无需其他依赖 → 参见 安装[1] - 🗂️ 支持所有文件类型: 解析任意长度的 PDF、单张图片或 URL → 参见 支持的文件[2]
- 📚 长文档就绪: 自动拆分并并行处理 1000+ 页 PDF,然后合并结果 → 参见 解析大型 PDF 文件[3]
- 🧩 结构化输出: 返回层次化 JSON 及可直接渲染的 Markdown → 参见 结果模式[4]
- 👁️ 真实可视化: 可选的边界框片段和全页可视化 → 参见 保存定位为图片[5]
- 🏃 批量并行处理: 输入列表;库管理线程和速率限制 (
BATCH_SIZE
, MAX_WORKERS
) → 参见 批量解析多个文件[6] - 🔄 容错性强: 对 408/429/502/503/504 和速率限制触发的请求进行指数退避重试 → 参见 自动处理 API 错误和速率限制[7]
- 🛠️ 即用辅助函数:
parse_documents
, parse_and_save_documents
, parse_and_save_document
→ 参见 主要函数[8] - ⚙️ 通过环境变量/.env 配置: 调整并行性、日志风格、重试上限,无需修改代码 → 参见 配置选项
[9]
- 🌐 原生 API 支持: 高级用户仍可直接调用 REST 端点 → 参见 API 文档[10]
快速开始
安装
ounter(line
pip install agentic-doc
要求
- Python 版本 3.9、3.10、3.11 或 3.12
- LandingAI Agentic AI API 密钥(获取密钥 此处[11])
设置 API 密钥为环境变量
获取 LandingAI Agentic AI API 密钥后,将其设置为环境变量(或放入 .env
文件):
ounter(line
export VISION_AGENT_API_KEY=
支持的文件
该库可从以下文件中提取数据:
- OpenCV-Python(即
cv2
库)支持的图片
基本用法
从单个文档提取数据
运行以下脚本从单个文档提取数据,并以 Markdown 和结构化块的形式返回结果。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from agentic_doc.parse import parse
result = parse("path/to/image.png")
print(result.markdown)
print(result.chunks)
result = parse("https://example.com/document.pdf")
print(result.markdown)
from agentic_doc.parse import parse_documents
results = parse_documents(["path/to/image.png"])
parsed_doc = results[0]
从多个文档提取数据
运行以下脚本从多个文档提取数据。
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from agentic_doc.parse import parse
file_paths = ["path/to/your/document1.pdf", "path/to/another/document2.pdf"]
results = parse(file_paths)
for result in results:
print(result.markdown)
result_paths = parse(file_paths, result_save_dir="path/to/save/results")
使用连接器提取数据
该库支持多种连接器,方便从不同来源访问文档:
Google Drive 连接器
前提条件:首先按照 Google Drive API Python 快速入门[12] 教程设置凭据。
Google Drive API 快速入门将指导您完成:
完成快速入门教程后,可以按以下方式使用 Google Drive 连接器:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from agentic_doc.parse import parse
from agentic_doc.connectors import GoogleDriveConnectorConfig
config = GoogleDriveConnectorConfig(
client_secret_file="path/to/credentials.json",
folder_id="your-google-drive-folder-id"
)
results = parse(config)
results = parse(config, connector_pattern="*.pdf")
Amazon S3 连接器
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from agentic_doc.parse import parse
from agentic_doc.connectors import S3ConnectorConfig
config = S3ConnectorConfig(
bucket_name="your-bucket-name",
aws_access_key_id="your-access-key",
aws_secret_access_key="your-secret-key",
region_name="us-east-1"
)
results = parse(config)
results = parse(config, connector_path="documents/")
本地目录连接器
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from agentic_doc.parse import parse
from agentic_doc.connectors import LocalConnectorConfig
config = LocalConnectorConfig()
results = parse(config, connector_path="/path/to/documents")
results = parse(config, connector_path="/path/to/documents", connector_pattern="*.pdf")
config = LocalConnectorConfig(recursive=True)
results = parse(config, connector_path="/path/to/documents")
URL 连接器
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from agentic_doc.parse import parse
from agentic_doc.connectors import URLConnectorConfig
config = URLConnectorConfig(
headers={"Authorization": "Bearer your-token"},
timeout=60
)
results = parse(config, connector_path="https://example.com/document.pdf")
为什么使用它?
- 简化设置: 无需管理 API 密钥或处理低级别 REST 调用。
- 自动处理大文件: 将大型 PDF 拆分为可管理的部分并并行处理。
- 内置错误处理: 对常见 HTTP 错误自动重试,采用指数退避和抖动策略。
- 并行处理: 高效地同时解析多个文档,可配置并行度。
主要特性
通过此库,您可以实现一些仅使用 Agentic 文档提取 API 难以完成的功能。本节介绍该库提供的一些关键特性。
解析大型 PDF 文件
单个 REST API 调用一次只能处理一定数量的页面(参见 速率限制[13])。此库会自动将大型 PDF 拆分为多个调用,使用线程池并行处理这些调用,并将结果合并为单个结果。
我们已使用此库成功解析了 1000+ 页的 PDF。
批量解析多个文件
您可以通过此库一次性解析多个文件。库会并行处理这些文件。
注意: 可以通过设置 batch_size
来调整并行度。
将定位保存为图片
该库可以提取并保存文档中每个内容块的视觉区域(定位)。这对于可视化文档中被提取的部分以及调试提取问题非常有用。
每个定位代表原始文档中的一个边界框,库可以将这些区域保存为单独的 PNG 图片。图片按页码和块 ID 组织。
使用方法如下:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from agentic_doc.parse import parse_documents
results = parse_documents(
["path/to/document.pdf"],
grounding_save_dir="path/to/save/groundings"
)
for chunk in results[0].chunks:
for grounding in chunk.grounding:
if grounding.image_path:
print(f"定位已保存至: {grounding.image_path}")
此功能适用于所有解析函数:parse_documents
、parse_and_save_documents
和 parse_and_save_document
。
可视化解析结果
该库提供了一个可视化工具,可以创建带注释的图片,显示从文档中提取的每个内容块的位置。这对于以下情况非常有用:
使用方法如下:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from agentic_doc.parse import parse
from agentic_doc.utils import viz_parsed_document
from agentic_doc.config import VisualizationConfig
results = parse("path/to/document.pdf")
parsed_doc = results[0]
images = viz_parsed_document(
"path/to/document.pdf",
parsed_doc,
output_dir="path/to/save/visualizations"
)
viz_config = VisualizationConfig(
thickness=2,
text_bg_opacity=0.8,
font_scale=0.7,
color_map={
ChunkType.TITLE: (0, 0, 255),
ChunkType.TEXT: (255, 0, 0),
}
)
images = viz_parsed_document(
"path/to/document.pdf",
parsed_doc,
output_dir="path/to/save/visualizations",
viz_config=viz_config
)
可视化显示:
自动处理 API 错误和速率限制
REST API 端点对每个 API 密钥施加了速率限制。此库会自动处理速率限制错误或其他间歇性 HTTP 错误,并进行重试。
更多信息,请参见 错误处理[14] 和 配置选项[15]。
错误处理
此库实现了处理 API 失败的重试机制:
- 对以下 HTTP 状态码进行重试:408、429、502、503、504。
- 重试将在
max_retries
次尝试后停止。超过限制会引发异常并导致请求失败。 - 重试等待时间上限为
max_retry_wait_time
秒。 - 重试包含最多 10 秒的随机抖动,以分散请求并避免“惊群”问题。
解析错误
如果 REST API 请求在解析过程中遇到不可恢复的错误(无论是客户端还是服务器端),库会在最终结果的 errors[16] 字段中包含受影响页面的错误信息。每个错误包含错误消息、错误代码和对应的页码。
配置选项
该库使用 `Settings`
[17] 对象管理配置。您可以通过环境变量或 .env
文件自定义这些设置:
以下是自定义配置的示例 .env
文件:
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
BATCH_SIZE=4
MAX_WORKERS=2
MAX_RETRIES=80
MAX_RETRY_WAIT_TIME=30
RETRY_LOGGING_STYLE=log_msg
最大并行度
并行请求的最大数量由 BATCH_SIZE
× MAX_WORKERS
决定。
注意: 此库允许的最大并行度为 100。
具体来说,增加 MAX_WORKERS
可以加速处理单个大文件,而增加 BATCH_SIZE
可以提高处理多个文件时的吞吐量。
注意: 您的任务的最大处理吞吐量可能会受到 API 速率限制的限制。如果速率限制不够高,可能会遇到速率限制错误,库将通过重试自动处理这些错误。
MAX_WORKERS
和 BATCH_SIZE
的最佳值取决于您的 API 速率限制和每个 REST API 调用的延迟。例如,如果您的账户速率限制为每分钟 5 个请求,每个 REST API 调用大约需要 60 秒完成,并且您正在处理单个大文件,则 MAX_WORKERS
应设置为 5,BATCH_SIZE
设置为 1。
您可以在日志中找到 REST API 的延迟。如果想提高速率限制,请安排时间与我们 会面[18]。
设置 RETRY_LOGGING_STYLE
RETRY_LOGGING_STYLE
设置控制库如何记录重试尝试。
log_msg
: 将重试尝试记录为日志消息。每次尝试作为单独的消息记录。这是默认设置。inline_block
: 在同一行打印黄色进度块('█')。每个块代表一次重试尝试。如果不想看到详细的重试日志消息但仍想跟踪重试次数,可以选择此选项。
故障排除与常见问题
常见问题
- API 密钥错误:
确保 API 密钥已正确设置为环境变量。 - 速率限制:
如果触发 API 速率限制,库会自动重试请求。如果频繁遇到速率限制错误,请调整 BATCH_SIZE
或 MAX_WORKERS
。 - 解析失败:
如果文档解析失败,结果中将包含一个错误块,详细说明错误消息和页码。 - URL 访问问题:如果无法从 URL 访问文档,请检查 URL 是否公开可访问并指向支持的文件类型(PDF 或图片)。
关于 include_marginalia
和 include_metadata_in_markdown
的说明
include_marginalia
: 如果为 True,解析器将尝试从文档中提取并包含边注(页脚注释、页码等)。include_metadata_in_markdown
: 如果为 True,输出的 Markdown 将包含元数据。
这两个参数默认为 True。可以将其设置为 False 以从输出中排除这些元素。
示例:使用新参数
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
from agentic_doc.parse import parse
results = parse(
"path/to/document.pdf",
include_marginalia=False,
include_metadata_in_markdown=False
)
项目地址
https://github.com/landing-ai/agentic-doc/blob/main/README.md
参考资料
[1] 安装: #安装
[2] 支持的文件: #支持的文件
[3] 解析大型 PDF 文件: #解析大型-pdf-文件
[4] 结果模式: #结果模式
[5] 保存定位为图片: #保存定位为图片
[6] 批量解析多个文件: #批量解析多个文件
[7] 自动处理 API 错误和速率限制: #自动处理-api-错误和速率限制
[8] 主要函数: #主要函数
[9] 配置选项: #配置选项
[10]
API 文档: https://support.landing.ai/docs/document-extraction
[11] 此处: https://va.landing.ai/account/api-key
[12] Google Drive API Python 快速入门: https://developers.google.com/workspace/drive/api/quickstart/python
[13] 速率限制: https://docs.landing.ai/ade/ade-rate-limits#maximum-pages-per-document
[14] 错误处理: #错误处理
[15] 配置选项: #配置选项
[16] errors: ./agentic_doc/common.py#L75
[17] Settings
: ./agentic_doc/config.py
[18] 会面: https://scheduler.zoom.us/d/56i81uc2/landingai-document-extraction