AWS Machine Learning Blog

Build interactive PDF text extraction from Amazon S3

8.5内容质量
Build interactive PDF text extraction from Amazon S3

TL;DR · AI 摘要

AWS 提供了一种基于 MCP 的实时 PDF 文本提取方案,适用于需要即时访问 S3 中 PDF 内容的场景。

核心要点

  • AWS 提供的 MCP 方案支持实时 PDF 文本提取,适合开发和概念验证场景。
  • 与 Amazon Textract 相比,MCP 更适合处理标准格式的文本 PDF,且成本更低。
  • 该方案适用于合规、法律和财务团队,可快速获取文档中的关键信息。

结构提纲

按章节快速跳转。

  1. 文章介绍了在 AWS 上构建实时 PDF 文本提取的必要性。

  2. 文章提出了一种基于 MCP 的实时 PDF 文本提取方案。

  3. 该方案适用于合规、法律和财务团队等需要即时文档访问的场景。

  4. 文章比较了 MCP 和 Amazon Textract 的适用场景和性能。

  5. 文章介绍了如何设置服务器并运行交互式文档查询。

思维导图

用一张图看清主题之间的关系。

查看大纲文本(无障碍 / 无 JS 友好)
  • AWS 实时 PDF 文本提取
    • 适用场景
      • 合规与法律团队
      • 财务服务团队
      • 高管团队
    • 技术方案
      • 基于 MCP 的实时提取
      • 与 Amazon Textract 的对比

金句 / Highlights

值得收藏与分享的关键句。

  • Interactive PDF text extraction from Amazon S3 gives you real-time answers from your documents without batch pipelines or heavy infrastructure.

    第 3 段

    ⬇︎ 下载 PNG𝕏 分享到 X
  • This MCP-based option works well for text-based PDFs in development and proof of concept settings.

    第 4 段

    ⬇︎ 下载 PNG𝕏 分享到 X
  • Amazon Textract remains the recommended choice for complex document processing like optical character recognition (OCR).

    第 4 段

    ⬇︎ 下载 PNG𝕏 分享到 X
#AWS#PDF#机器学习#S3#文档处理
打开原文

从 Amazon S3 构建交互式 PDF 文本提取 | 人工智能

设想一下:在审计期间,合规官员需要一份特定的条款;律师在客户等待电话时需要合同条款;财务分析师在会议开始前 10 分钟需要上一季度报告中的数字。在每种情况下,等待计划任务完成都不切实际。你需要按需访问 PDF 中的文本。

在本文中,你将构建一个服务器,实时从 Amazon S3 中的 PDF 文件中提取文本。这种基于协议的方法提供了程序化的文档访问方式。你将逐步了解架构,设置服务器,并运行交互式文档查询。在此过程中,你将比较这种方法与 Amazon Textract,以便决定哪种工具更适合你的工作负载。

在与多个团队合作后,我们构建了这个解决方案,这些团队都面临相同的困扰:他们的文档存储在 Amazon S3 中,但按需提取文本意味着要么编写自定义脚本,要么等待批量流水线处理。这种 MCP 服务器方法正好介于两者之间,只需极少的设置即可提供交互式访问。从 Amazon S3 进行交互式 PDF 文本提取,可以在不使用批量流水线或重型基础设施的情况下,从文档中实时获取答案。

这种基于 MCP 的方法非常适合开发和概念验证场景中的基于文本的 PDF。对于需要光学字符识别(OCR)、表单提取和布局分析等复杂文档处理任务,Amazon Textract 仍然是推荐的选择。

哪些人能从这种方法中受益

这个解决方案适用于几种常见的角色。如果这些场景听起来像你每天的工作内容,请继续阅读。

合规和法律团队:在时间紧迫的审查过程中,你需要在一份 200 页的政策文件或合同中找到一个特定的条款。手动搜索耗时太长。使用此解决方案,你只需用自然语言提问,几秒钟内就能得到相关段落。

金融服务团队:在审计过程中,你需要立即访问内部风险政策或监管文件的确切措辞。此解决方案允许你直接从 Amazon S3 文档存储库中提取这些信息,而无需离开终端。

高管团队:在战略规划会议中,当有人询问上一季度收益报告中的某个数据点时,你可以立即查询 PDF。无需翻阅纸质副本,也无需在会议结束后等待某人查找。

这些场景有一些共同点:它们涉及实时信息需求,批量处理速度太慢;基于文本的 PDF 文档,具有标准格式;在开发和概念验证环境中对成本敏感;以及与现有 AWS 工作流程和工具的集成需求。

基于 MCP 的方法解决的是一个互补的场景:让 AI 助手能够与 PDF 中已编码的文本进行交互式、按需访问。选择这种模式的条件是:你的文档是基于文本的 PDF(不需要 OCR)、你的工作流程是交互式而非批量处理、你正在开发或概念验证环境中工作,并且你希望 AI 助手与源文档之间有尽可能少的基础设施。对于其他所有情况,包括任何可以从 OCR 或结构化提取中受益的文档处理,应将工作路由到 Amazon Textract。

解决方案的工作原理

使用此解决方案,你可以将 AI 助手直接连接到 Amazon S3 中的 PDF 文档,并能快速获得答案。在幕后,该解决方案使用 Model Context Protocol(MCP),这是一种开放标准,提供了一种结构化的方式来访问外部数据源。MCP 在你的应用和数据之间充当通信层。该架构包括四个组件:作为用户界面的命令行接口、用于通信的 MCP 层、用于 PDF 处理的自定义 MCP 服务器,以及由 AWS Identity and Access Management(AWS IAM)保护的 Amazon S3 用于文档存储。

成本比较

选择适合你预算和需求的方法。在概念验证环境中,每月大约处理 10,000 页基于文本的 PDF,两种方法的比较如下:

这两个数字是不同功能集的价格点,不应被解读为直接的价格对比。使用它们来选择适合工作负载的工具,而不是仅仅以美元为优化目标。如果你的工作负载涉及扫描文档、表格、复杂布局或生产 SLA,Amazon Textract 是合适的选择,其附加功能也体现在其价格中。

Amazon Textract 的范围:页面级处理、OCR 准备、表单和表格提取、布局理解、企业级 SLA

月度成本示例:Amazon Textract 处理约 15 美元,Amazon S3 存储 2 美元,AWS Lambda 计算 1 美元,大型语言模型(LLM)令牌处理约 5 至 10 美元,总计约 23 至 28 美元。

MCP 服务器的范围:直接从文本已编码的 PDF 中提取文本;不涉及任何托管处理服务

月度成本示例:Amazon S3 存储 2 美元,数据传输 0.50 美元,总计约 2.50 美元。

所有成本数字仅为示例,可能会发生变化。请参阅官方 AWS 定价页面以获取最新价格。

架构概述

以下序列图说明了从 Amazon S3 存储的 PDF 中提取文本的端到端工作流程。该过程从 AI 客户端通过 CLI 发起 PDF 提取请求开始。系统将此请求转发到 MCP 服务器,该服务器使用提供的存储桶和对象密钥从 Amazon S3 获取 PDF 文件。

MCP 服务器获取 PDF 后,将其传递给 PDF 解析组件。该组件处理文档并提取文本内容。然后,MCP 服务器将提取的文本返回给客户端,客户端将其显示给用户。

分步实现

按照以下步骤设置和配置 PDF 文本提取解决方案。首先确认你已具备所需的先决条件。

先决条件

在开始之前,请确认你已准备好以下内容。你还需要对 Python 编程和 AWS 服务有基本的了解。

  • 一个具有 Amazon S3 读取权限的 AWS 账户。
  • 已安装 Python 3.10 或更高版本。
  • 已配置 AWS 命令行界面(AWS CLI),并使用有效的凭证。
  • 已安装 Kiro CLI。
  • 运行 pip install boto3 PyPDF2 mcp 安装依赖。

安装

本节将指导你完成安装 MCP 服务器及其依赖项的过程。该过程包括创建 Python 虚拟环境、安装所需包以及创建服务器文件。请按顺序执行以下步骤。在终端中运行每个命令。

在开始之前,你需要:

  • 在你的机器上安装 Python 3.10 或更高版本。
  • 安装并登录 Kiro CLI。
  • 在你的机器上设置 AWS 凭证(如果没有设置,运行 aws configure)。
  • 一个包含至少一个 PDF 文件的 S3 存储桶。

步骤 1 — 为项目创建一个文件夹

在终端中运行以下两个命令:

code
mkdir ~/s3-pdf-extractor

步骤 2 — 进入项目文件夹

运行以下命令:

code
cd ~/s3-pdf-extractor

步骤 3 — 创建 Python 虚拟环境

code
python3 -m venv venv

步骤 4 — 激活虚拟环境

code
source venv/bin/activate

执行完此步骤后,终端提示符的开头将显示 (venv)。请保持终端打开。在接下来的步骤中,你需要保持在这个虚拟环境中。

步骤 5 — 安装所需的 Python 包

运行以下命令:

code
pip install mcp boto3 PyPDF2

等待其完成。完成后应该显示“Successfully installed...”。

步骤 6 — 创建服务器文件

~/s3-pdf-extractor 文件夹中,创建一个名为 s3_pdf_extractor.py 的新文件。

将以下代码粘贴到该文件中并保存:

步骤 7 — 测试服务器是否启动

在终端中(仍然在 s3-pdf-extractor 文件夹中,并且虚拟环境已激活),运行以下命令:

code
python s3_pdf_extractor.py

终端似乎会“暂停”,没有输出。这是正确的。这意味着服务器正在运行并等待请求。按 Ctrl+C 停止它。

如果你看到错误,请重新检查步骤 2 和 3。

code
from mcp.server import Server
from mcp.types import Tool, TextContent
import boto3
from PyPDF2 import PdfReader
import tempfile
import os
import logging

# 为生产环境配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

server = Server("s3-pdf-extractor")

@server.list_tools()
async def list_tools():
    return [
        Tool(
            name="extract_s3_pdf_text",
            description="从存储在 Amazon S3 中的 PDF 提取文本内容",
            inputSchema={
                "type": "object",
                "properties": {
                    "bucket": {"type": "string", "description": "S3 存储桶名称"},
                    "key": {"type": "string", "description": "S3 对象键"}
                },
                "required": ["bucket", "key"]
            }
        )
    ]

@server.call_tool()
async def call_tool(name: str, arguments: dict):
    if name == "extract_s3_pdf_text":
        bucket = arguments["bucket"]
        key = arguments["key"]

        try:
            # 使用现有的 AWS 凭证和 IAM 权限
            s3_client = boto3.client('s3')

            with tempfile.NamedTemporaryFile(delete=False, suffix='.pdf') as tmp_file:
                s3_client.download_file(bucket, key, tmp_file.name)
                tmp_path = tmp_file.name

使用 PyPDF2 提取文本

python
reader = PdfReader(tmp_path)
text = ""
for page in reader.pages:
    text += page.extract_text() + "\n"

logger.info(f"成功从 {bucket}/{key} 提取文本")
return [TextContent(type="text", text=text)]

except Exception as e:
    logger.error(f"处理 {bucket}/{key} 时出错: {str(e)}")
    raise
finally:
    # 确保清理临时文件
    if 'tmp_path' in locals():
        os.unlink(tmp_path)

if __name__ == "__main__":
    server.run()

步骤 8 — 查找或创建 Kiro CLI 配置文件

Kiro CLI 使用 JSON 配置文件来了解可用的 MCP 服务器。你需要将服务器添加到此文件中。

Kiro CLI 的 MCP 配置文件位于以下位置:

code
~/.kiro/settings/tools/mcp.json

如果该文件不存在,请在终端中运行以下命令来创建它:

code
mkdir -p ~/.kiro/settings/tools
nano ~/.kiro/settings/tools/mcp.json

步骤 9 — 添加 MCP 服务器配置

将以下 JSON 粘贴到文件中。将 /path/to/s3_pdf_extractor.py 替换为步骤 1 中的实际路径(例如,~/s3-pdf-extractor/s3_pdf_extractor.py):

code
{
    "mcpServers": {
        "s3-pdf-extractor": {
            "command": "python",
            "args": ["/path/to/s3_pdf_extractor.py"]
        }
    }
}

要获取完整的绝对路径,请在终端中运行 echo ~/s3-pdf-extractor/s3_pdf_extractor.py,并将输出结果用于 args 字段。

步骤 10 — 保存配置文件

按下 Ctrl+O,然后按 Enter 保存文件。

步骤 11 — 关闭文件编辑器

按下 Ctrl+X 退出 nano。

步骤 12 — 重启 Kiro CLI

重启 Kiro CLI 以加载新配置。关闭并重新打开 Kiro CLI,或者运行:

code
kiro --restart

步骤 13 — 验证 MCP 服务器连接

通过在 Kiro CLI 中运行测试提取来验证连接:

code
extract text from s3://your-bucket-name/sample.pdf

安全性考虑

安全性从一开始就集成,而不是事后添加。以下是解决方案的处理方式:

  • IAM 集成:解决方案使用您现有的 AWS 凭据。您不需要创建或管理单独的 API 密钥。
  • 最小权限访问:您仅授予 Amazon S3 读取权限,范围限定在包含 PDF 文档的特定存储桶。不授予其他权限。
  • 临时存储:服务器在处理完成后会自动删除下载的文件。PDF 数据不会残留在本地文件系统上。
  • 无数据持久性:文本提取按需进行,不存储结果。
  • 审计跟踪:AWS CloudTrail 记录您账户的 Amazon S3 访问请求。

性能和限制

以下是关于性能的预期:

  • 服务器实时处理文档。对于典型的 50 页文本 PDF,结果通常在几秒内可用,使其适用于交互式工作流程,您可以在其中提出后续问题。
  • 处理时间与文档大小成线性关系。10 页文档的处理速度大约是 50 页文档的 5 倍。
  • 内存使用与文档大小成比例。对于大多数 100 页以下的文本 PDF,内存消耗远低于典型开发机器的限制。

这种方法有明确的限制。在投入使用之前,请了解这些限制:

  • 仅支持基于文本的 PDF。如果您的文档是扫描的图像或纸质文件的照片,服务器无法读取这些内容。Amazon Textract 通过 OCR 本机处理这些情况。
  • 没有 OCR 功能。服务器从 PDF 文件格式中读取嵌入的文本,无法解释图像中的像素。
  • 布局理解有限。服务器执行简单的文本提取,无法重建表格、列或复杂的页面布局。Amazon Textract 本机处理这些功能。
  • 没有表单处理功能。如果 PDF 包含可填写的表单字段或结构化数据,服务器无法提取这些元素。Amazon Textract 本机处理这些功能。

实际应用场景

这些功能可以直接转化为各行各业可衡量的结果。无论是法律团队在通话中快速检索合同条款,合规官员在审计期间快速定位政策语言,还是高管实时提取收益数据,该解决方案消除了手动文档搜索的摩擦。以下示例展示了不同团队如何应用该方案。

法律服务公司

一家中型法律公司采用该解决方案进行合同审查。他们的律师过去在客户通话中需要花费 15 到 20 分钟搜索 PDF 合同以找到特定的赔偿条款,这意味着需要让客户等待或承诺稍后回拨。现在他们只需在 Kiro CLI 中输入一个问题,几秒钟内就能得到相关段落。该公司报告称,客户通话期间的研究时间显著减少。

金融服务合规

一家区域性银行部署该解决方案用于监管审查。在审计期间,合规官员需要快速定位特定的政策语言。以前,他们需要手动在数十个 PDF 文件中创建书签,这在政策变更时容易出错且难以维护。现在通过将 MCP 服务器连接到他们的 S3 文档存储库,他们可以实时调出审查人员询问的特定段落。

企业战略团队

一家企业的领导团队在季度战略会议中使用该解决方案。当董事会成员询问上一季度收益报告中的特定指标时,团队可以直接在 PDF 中查询,而不是翻阅纸质副本。这使得讨论更加高效,并基于实际数据进行。

扩展与增强选项

该解决方案只是一个起点。随着需求的增长,您可以对其进行扩展。如果团队频繁访问相同文档,可以从缓存开始。如果需要同时处理数百个文档,可以考虑批量处理。当关键字匹配不再足够时,可以添加向量搜索。

具体来说,您可以按以下方式扩展该解决方案:

  • 使用 Amazon DynamoDB 为频繁访问的文档添加缓存。
  • 使用 Amazon Simple Queue Service (Amazon SQS) 实现批量操作的批量处理。
  • 通过 Amazon OpenSearch Service 集成向量搜索,实现语义文档发现。
  • 创建混合工作流,自动将复杂文档路由到 Amazon Textract。
  • 使用 Amazon CloudWatch 添加监控,以跟踪使用模式和错误率。

清理

当您完成测试或想要删除该解决方案时,请按照以下步骤操作,以避免产生不必要的费用。

  • 停止 MCP 服务器:在运行服务器的终端中按 Ctrl+C。
  • 删除 MCP 配置 打开 Kiro CLI 的 MCP 配置文件( ~/.kiro/settings/tools/mcp.json ),并删除 s3-pdf-extractor 条目。保存并关闭文件。
  • 删除项目文件 删除项目目录及其所有内容: rm -rf ~/s3-pdf-extractor 警告:此命令会永久删除目录中的所有文件,且不会进行确认。在继续操作之前,请确保已保存所有修改。
  • 清理 S3 资源(可选) 如果您为了本次操作而在 Amazon S3 中特别创建了测试 PDF 文件,请使用 Amazon S3 控制台或 AWS CLI 删除测试文件或测试存储桶: aws s3 rm s3://your-bucket-name/test-file.pdf 仅删除您为测试创建的资源。
  • 检查 IAM 权限(可选) 导航到 IAM 控制台,并删除为此解决方案特别添加的任何 S3 读取权限。保留其他工作流依赖的权限。
  • 确认清理 检查目录是否已不存在: ls ~/s3-pdf-extractor 预期输出: No such file or directory

清理后,您将不再为已删除的资源产生 S3 存储和数据传输费用。如需详细的价格信息,请参阅 Amazon S3 定价。如果您以后想重新部署,请重复安装步骤。所有代码和配置示例仍保留在本文档中。

结论

在本文中,您构建了一个 MCP 服务器,它能够实时从 Amazon S3 中的 PDF 文件中提取文本。您了解了架构,与 Amazon Textract 的成本进行了比较,并看到三个不同的团队如何应用这种方法。该模式遵循一个清晰的策略:将您的 AI 助手连接到文档,保持基础设施的最小化,并仅在工作负载需要时进行扩展。

总之,MCP 服务器模式是 Amazon Textract 的一个专注且交互式的补充。当 AI 助手需要实时读取基于文本的 PDF 文件时,使用它。当您的需求包括 OCR、表单、表格或生产规模的处理时,Amazon Textract 是专为此类工作设计的 AWS 服务,这两种方法可以很好地结合在一起。这正是本文前面提到的混合工作流选项中展示的模式。

下一步:

  • 将您的使用案例与“此方法与 Amazon Textract 的配合使用”部分中的标准进行比较。
  • 按照本文的安装部分,在您的开发环境中部署该解决方案。使用 5 到 10 个代表性的文档进行测试,以建立基准性能。
  • 探索 Amazon Textract 的 OCR 功能,或随着需求的变化,了解更多关于 Kiro CLI 集成的信息。
  • 如果您尝试了此解决方案或将其适配到自己的使用案例中,我们很乐意在评论中听到您的反馈。

如需了解更多,请查看以下资源:

  • Amazon Textract 。
  • Amazon Comprehend 。
  • Amazon S3 。
  • Kiro CLI 。
  • AWS Identity and Access Management (IAM) 。
  • AWS CloudTrail 。
  • Model Context Protocol (MCP) 。

作者简介

'."