要使用 AI 代理批量提取文档数据,将模式写入提示,指向一个文件夹,并在最后要求提供异常列表。GroupDocs.Parser.Mcp 服务器在 Docker 容器中本地读取,因此每个文件都经过相同的提取工具,且没有文档离开机器。LLM 决定工作顺序;引擎读取文件。

对于文档文件夹中的每个 PDF:提取表格为 JSON,汇总 amount 列,并给我一个包含文件名、总计、页数的表格。

带有配置和故障排除的逐步版本位于文档中:一次性从文件夹中的文档提取数据.

手动提取为何会产生不一致的数据?

当人们一次只从文档中复制一个值时,每个文件的处理方式略有不同:有人包括税费,有人不包括,第三个人会跳过布局奇特的文件。直到比较总计时,这种不一致才会显现。工作流通过明确规则并以相同方式应用于每个文件来解决此问题。使用代理时,规则写在一个提示中,提取工具在第一个文件和第二百个文件上表现完全相同。

如何构建工作流?

将文件夹挂载到容器的 /data,设置 GROUPDOCS_MCP_STORAGE_PATH=/data,并给代理以下步骤。

  1. 检查许可证。 提示:“运行 get_license_status 并告诉我模式。” 未授权的提取受到限制,对整个文件夹的部分读取会产生悄然错误的数据集。
  2. 对文件夹进行分流。 提示:“对于每个文件,报告格式、页数以及文本提取是否返回任何内容。” get_document_info 提供类型、页数和大小,单页的 extract_text 调用显示是否存在文本。
  3. 修正模式。 提示:“对于每个可读取的文件,将明细表提取为 JSON。列:item、quantity、amount。汇总 amount 列。” 这使用 extract_tables。
  4. 显式收集失败。 提示:“列出所有失败、受密码保护或未返回表格的文件,并说明原因。” 只报告成功的批次会隐藏异常。
  5. 写入输出。 提示:“在输出文件夹中将每个文件写入一行 CSV。”

文件在容器内部通过名称解析,因此代理传递的是 invoice-014.pdf,而不是主机路径。

代理决定什么,引擎执行什么?

步骤 代理决定 引擎执行
分流 要从哪些文件提取 报告类型、页数和大小;extract_text 显示是否存在文本
捕获 每个文件需要使用的工具 返回文件中的文本或表格行
验证 总计是否与文本匹配 无;代理进行比较
异常 哪些文件列入列表 返回错误文件的失败信息
输出 CSV 的结构 无;代理写入

划分点就在此。捕获数值是确定性的引擎工作;判断和组装则是代理的职责。

示例会话(节选):

You:    Check the license, triage the folder, then extract line items from every readable PDF and list the exceptions.
Agent:  [calls get_license_status, get_document_info x12, extract_text, extract_tables x10]
        License mode: evaluation. Results below are a smoke test.
        12 files: 10 with a text layer, 1 scan, 1 password-protected.
        Totals written for 10 files. Exceptions: scan-007.pdf (no text layer), hr-020.pdf (password required).

不符合条件的文件会怎样?

扫描件没有文本层,因此表格提取会返回空。可以将其放置一旁,或在页面包含追踪号或订单码时让代理分支到 extract_barcodes。该兜底列表同时充当档案中哪些部分是扫描件的清单。受密码保护的文件会在调用时失败,因此让代理报告并继续;当你拥有密码时,工具接受 password 参数。

如何保持大规模运行的成本可控?

  • 按页限制 当数据位于已知位置时,例如每张发票的第一页。
  • 批量避免使用 extract_images。 它会为每个图像写入一个文件,包含插图的报告文件夹会产生数百个文件。
  • 关注计量使用。 在计量许可下,每次调用都会计费处理,因此有针对性的扫描比全面扫描成本更低。

限制是什么?

没有许可证时,提取受到限制;具体限制请参见库的 许可页面。服务器没有 OCR,因此无法捕获扫描文本。它仅以 Docker 镜像形式提供;没有 dnx 命令。

如何注册服务器?

针对 Cursor、Claude Desktop 或 Windsurf 的最小手动条目,使用来自 Parser 配置文档的容器路径:

{
  "mcpServers": {
    "groupdocs-parser": {
      "command": "docker",
      "args": ["run", "--rm", "-i",
               "-v", "/path/to/documents:/data",
               "-e", "GROUPDOCS_MCP_STORAGE_PATH=/data",
               "ghcr.io/groupdocs-parser/parser-net-mcp:latest"]
    }
  }
}

常见问题

我可以在不上传的情况下使用 AI 处理发票文件夹吗?
是的。容器读取挂载的文件夹并通过 stdio 与您的客户端通信,因此发票保留在您的机器上。

如何在本地批量提取 PDF 文本?
让代理遍历文件夹,对每个文件调用 extract_text,对长文档逐页提取,因为非常大的输出会被标记截断。

代理能自动从文档中录入数据吗?
它可以将提取的行组装成 CSV 或汇总表。在将任何数据输入其他系统之前,请先检查异常列表。

深入了解