
释放代理智能:使用 Bedrock 构建文档摘要器!
- Rifx.Online
- Generative AI , Large Language Models , AI Applications
- 16 Feb, 2025
本博客旨在解释使用 AWS Bedrock 和 AWS Textract 开发智能、代理化和容器化应用程序以总结文档的逐步过程。
来源:由 GoogleDeepMind 提供的图像,来自 Unsplash
所以我们现在处于代理的世界,所有事物都开始朝着代理智能(Agentic AI)发展。甚至萨蒂亚·纳德拉先生预测过 “基于代理的软件将取代 SaaS 应用程序。”
因此,理解代理并获得开发我们代理的能力在这个快速变化的世界中至关重要。本文将帮助您开发自己的“代理智能文档摘要器”。
为什么要花时间阅读这篇文章/博客?
这篇博客将帮助您了解开发自己的 “Agentic Intelligent Document Summarizer” 所需的所有步骤,该工具不仅可以将任何文档作为输入,并且其内容可以通过智能代理进行总结,还可以在任何地方部署(因为容器化)。
每个步骤的代码在博客的相应位置都有解释,在本文的最后提到项目的完整代码链接。
该应用程序将使用以下工具和技术开发:
- AWS Bedrock
- AWS Textract
- AWS S3
- Docker
- FastAPI
- Python
- REST API 概念
- Generative AI
- Agents
要充分理解这篇文章/博客,您至少需要对上述主题有一定的了解。我强烈建议您仔细阅读下面提到的文章;这将使您熟悉许多上述概念并提升您的信心。它还将解释如何访问一些仅在请求后可用的 AWS Bedrock 模型。
不要被上述提到的名称所压倒;这篇博客将以尽可能简单的方式解释一切,以使您对所有内容感到舒适,并传授足够的知识,以便您能够创建自己的自定义代理来解决即使是最复杂的用例。
开发此应用程序的先决条件
要运行我开发的应用程序,或运行您将要开发的应用程序,您需要以下内容:
- 具有足够权限的 AWS 账户密钥: 用于使用 AWS 服务
- 一个 AWS S3 存储桶: 用于存储需要摘要的文档
- 任何 AWS Bedrock 文本模型: 用于总结内容并作为代理中的 LLM 使用。
- 任何容器执行/编排工具: 如果您希望将应用程序容器化,则需要此工具;否则,您可以直接使用 Python 运行应用程序。如果您选择将应用程序容器化,则可以使用 Docker、Podman、Kubernetes、OpenShift 或任何其他同类云服务。
在提到的所有先决条件下,让我们开始开发“Agentic Intelligent Document Summarizer 应用程序”。
Agentic Intelligent Document Summarizer
通过遵循最佳实践并简化应用程序开发,其代码被划分为模块。让我们为每个模块编写代码。
定义 AWS 客户端
要访问每个 AWS 服务,需要定义相应的 AWS 客户端。
上述代码正在为以下 AWS 服务创建客户端:
- AWS S3: 上传需要汇总的文档。
- AWS Textract: 从文档中提取内容。
- AWS Bedrock: 汇总从文档中提取的内容。
AWS 密钥通过环境变量传递(这是最佳实践)在上述代码中。您可以使用您知道的任何方法来做到这一点;最简单的方法是硬编码,但从安全角度来看,这是最糟糕的方法。如果您使用 Docker 或等效工具对应用程序进行容器化,可以在 Dockerfile 中传递密钥,或者在运行容器时作为环境变量传递(从安全角度推荐)。如果您使用 Kubernetes 或等效工具,则还可以使用秘密。
定义工具
工具是代理用来独立执行操作/行动的助手。每个工具的文档字符串必须包含该工具的目的,因为这是代理决定是否使用特定工具进行操作的唯一依据。
注意 1: 所有工具将使用 langchain 模块中存在的“@tool”装饰器进行定义,这是定义工具的最佳实践。
注意 2: 不用担心运行代码所需导入的库。本文的目的是解释重要的代码,而不是样板代码或运行代码所需的库。完整代码的 GitHub 仓库链接(包括所有内容)在博客的最后提到。
AWS S3 工具
上述代码将创建一个工具,用于将文件上传到 S3,这将被我们在本文后面定义的代理利用。
任何 LangChain 工具不能有超过 1 个参数;然而,这个工具将需要 2 个参数:file_path
和 object_name
(S3 中的目标文件名)来上传文件到 S3。因此,为了实现这一点,使用了一个提示技巧,其中所需的输入格式在工具的文档字符串中定义,代理将根据该格式传递参数。由于参数的格式与提示中提到的相同,上传文档到 S3 所需的两个参数通过 split()
方法获取,并且文档被上传到 AWS S3。
AWS Textract 工具
上述代码将使用 AWS Textract 从 AWS S3 存储桶中的文档提取内容。这个工具也将被我们在本文后面定义的代理利用。
与上述工具(AWS S3 工具)类似,这个工具也需要 2 个参数,并且在这个工具中使用了与上述工具相同的问题及其解决方案。
AWS Bedrock 工具
上述代码将使用 AWS Bedrock 对从 AWS S3 存储桶中的文档提取的内容进行总结。这个工具也将被我们在本文后面定义的代理利用。
定义代理
Agent 是智能实体,它将决定采取哪些行动以及以何种顺序来实现用例/目标,利用其智能。
上述代码定义了代理以满足我们的目标,即对文档进行摘要。它利用了所有已创建的工具,代理将自动决定何时使用哪个工具,并将满足我们的用例。
在代理中使用的 LLM 是具有 80 亿参数的 Llama 3 指令变体,可在 AWS Bedrock 上获得。
定义主要应用程序路由
在这里,定义了主要应用程序路由,该路由负责将文档作为输入,执行所有必要的操作以实现目标,然后在最后返回文档的摘要。
上述代码定义了主要应用程序路由,按顺序执行以下操作:
- 将文档作为输入
- 在应用程序使用的文件系统中创建一个名为“media_files”的目录。如果您在Docker中运行它,则会在Docker容器中创建该目录。
- 将文件(名称与文档名称相同)及其内容保存在本地。
- 调用方法以初始化Agent。
- 以满足我们目标所需的指令调用Agent。
- Agent将利用定义的工具执行所有必要的操作。
- 应用程序返回文档的摘要。
这标志着我们“Agentic Intelligent Document Summarizer”的开发完成。
代理的示例运行!
从维基百科获取关于Generative AI的示例内容,并根据该内容创建PDF文档,然后将该文档传递给应用程序;所有步骤如下所述。
注意:正在使用Postman工具与应用程序的API进行交互。
对应用程序API的输入请求—作者提供的图片!
代理执行步骤 1:利用AWS S3工具—作者提供的图片!
代理执行步骤 2:利用AWS Textract工具—作者提供的图片!
代理执行步骤 3:利用AWS Bedrock工具—作者提供的图片!
代理执行步骤 4:AWS Bedrock工具的输出,最终总结—作者提供的图片!
应用程序API的输出—作者提供的图片!
应用代码的完整链接
完整应用的 GitHub 仓库链接如下;您可以从那里获取代码进行快速测试,或者根据需要自定义以适应您的用例。
应用的即插即用容器镜像!
如果您想直接使用该应用程序或希望快速测试而无需考虑代码,则该应用程序的容器镜像链接如下所示。
https://hub.docker.com/r/harshitdawar/agentic-intelligent-document-summariser
要使用该镜像创建容器,您需要提供以下几个详细信息:
- AWS Keys
- AWS S3 Bucket
使用的命令:
docker run -dit -p <your system available port>:80 -e AWS_ACCESS_KEY="<your aws access key>" -e AWS_SECRET_ACCESS_KEY="<your aws secret access key>" -e S3_BUCKET="<S3 Bucket name to use>" harshitdawar/agentic-intelligent-document-summariser:latest
一旦您的应用程序使用上述命令运行,您可以调用应用程序端点,端点将是 “<your application IP/DNS>:
这篇精彩的博客到此结束。我希望我的文章解释了与主题相关的每一个细节,并提供了所有详细的概念和解释。非常感谢您花时间阅读我的博客并提升您的知识。