一个金融服务团队每周花费大量时间,根据季度报告、合规文档和市场分析手动创建客户 PowerPoint 演示文稿。每份演示文稿都需要阅读数百页内容、提取关键数据点、构建幻灯片结构并生成配套视觉素材。本文将带您使用 Amazon Bedrock AgentCore 构建一个自动完成此工作流的 AI 智能体系统,在我们内部测试中可在 90 秒内完成。这种方法缩短了演示文稿创建时间,同时使内容立足于源文档。该解决方案在 AgentCore runtime(Amazon Bedrock AgentCore 的一项功能)上部署监督者智能体,并使用 Strands Agents 框架来编排文档生成和摘要工具。Anthropic Claude Sonnet 4.6(可在 Amazon Bedrock 上使用)负责内容创作,Amazon Titan Text Embeddings v2 为向量搜索提供支持,Stability AI Stable Image Inpaint(可在 Amazon Bedrock 上使用)生成幻灯片图像。本文包含一个带有代码资产的公开代码仓库。
解决方案概览
该解决方案在 Amazon Bedrock AgentCore runtime 上部署单个监督者智能体,根据用户请求在文档生成和摘要工具之间进行选择。检索增强生成(RAG)管道使用 Amazon OpenSearch Serverless 进行向量存储和多模态内容的语义搜索。
该解决方案包含一个使用 .NET 8 minimal APIs 构建的 REST API,因此您可以通过标准 HTTP 调用与现有企业应用集成。AWS Lambda 提供无服务器计算,包括用于 PowerPoint 生成的容器化函数。该解决方案通过 Amazon Virtual Private Cloud (Amazon VPC) 隔离、 AWS Key Management Service (AWS KMS) 加密以及 AWS Identity and Access Management (IAM) 最小权限访问控制来保障实现的安全。
关键概念
本节介绍与本解决方案相关的 AgentCore runtime、RAG 和内容安全防护机制。
使用 Amazon Bedrock AgentCore 进行智能体编排
一个从大型知识库生成文档的单一 AI 智能体必须检索内容、构建大纲、生成文本、创建图像并组装文件。该解决方案没有在单一整体式函数中实现这些相互竞争的职责,而是采用基于工具的架构,由监督者智能体将请求路由到专门的工具。
Amazon Bedrock AgentCore runtime 提供了一个平台,可使用任何框架或模型大规模构建、连接和优化智能体。智能体代码在隔离的容器中运行,具备会话管理、内置身份和可观测性。该解决方案使用 Strands Agents 框架(一个用于构建 AI 智能体的开源 SDK)来实现监督者逻辑。
监督者智能体暴露两个工具:
- generate_pptx: 通过调用 PPTX Generator Lambda 函数创建 PowerPoint 演示文稿,该函数从知识库检索内容、生成幻灯片大纲、创建 AI 图像并组装最终文档。
- generate_summary: 使用 RAG 从知识库中提取并综合信息,以提供准确、有据可依的响应。
智能体会判断请求是需要文档生成、内容摘要,还是两者兼有,然后调用相应的工具。您可以通过在智能体代码中定义新工具来添加新功能,而无需修改现有工具。
用于企业知识的检索增强生成(RAG)
RAG 解决了 AI 系统中的一个根本挑战:提供立足于企业数据的准确、最新信息,而不是仅依赖模型的训练数据。该实现使用 Amazon Bedrock Knowledge Bases,它将向量搜索与大语言模型(LLM)相结合,在生成响应之前检索相关上下文。
RAG 管道的工作流程如下:
- 您将企业文档上传到 Amazon Simple Storage Service (Amazon S3).
- 系统对文档进行分块和解析,并对表格、图表和图像等多模态内容进行特殊处理。
- Amazon Titan Text Embeddings v2 将每个分块转换为捕捉语义的高维向量。
- Amazon OpenSearch Serverless 存储这些向量,创建可搜索的向量数据库。
- 在查询时,系统将用户的请求转换为嵌入向量,并执行相似性搜索以检索相关的文档分块。
- 检索到的分块为语言模型提供上下文,语言模型据此生成以源材料为基础的响应。
这种方法通过将生成的文档与企业知识库中的源信息相结合,旨在帮助减少幻觉内容。
注意: Amazon OpenSearch Serverless 集合数据平面必须保持公开可访问,因为 Amazon Bedrock Knowledge Bases 是从 AWS 托管的基础设施访问 Amazon OpenSearch Serverless,而不是通过客户 VPC 端点。IAM 数据访问策略保护该集合,而仅限 VPC 的访问会限制 Amazon OpenSearch Serverless 控制台。
用于内容安全的 Amazon Bedrock Guardrails
企业 AI 应用需要内容审核,以满足组织标准和合规要求。 Amazon Bedrock Guardrails 提供内置的内容过滤和安全机制,并集成于整个文档生成流程中。
Guardrails 在多个阶段运行:
- 输入处理: 过滤用户请求,帮助防止注入问题及不当内容。
- 输出生成: 监控模型输出,以验证其符合内容策略。
- 个人身份信息(PII)处理: 检测并对 PII 进行匿名化处理或予以阻止。
该实现通过 AWS Cloud Development Kit (AWS CDK)创建自定义 guardrails,并配置了针对企业文档创建量身定制的特定策略。该代理在模型调用层面应用 guardrails,从而提供一致的内容安全性,无需为每次部署进行手动配置。
解决方案架构
下图展示了基于代理的文档生成系统。
图 1:Amazon Bedrock AgentCore RAG 演示文稿生成系统的架构
数据流始于通过 Amazon API Gateway到达的用户请求,后者将请求路由到运行于 AWS Lambda上的基于 .NET 的 Chat API。该 API 在 Amazon DynamoDB中维护会话状态。随后它调用托管在 Amazon Bedrock AgentCore runtime 上的监督代理。
监督代理分析请求并选择合适的工具。对于文档生成,它调用 PPTX Generator Lambda(一个容器化的 Python 函数)。对于摘要生成,监督代理调用 Summary Generator Lambda,后者通过 retrieve_and_generate API 查询知识库。
系统使用 Amazon Titan Text Embeddings v2 对存储在 Amazon S3 中的文档进行处理、分块和向量化。Amazon OpenSearch Serverless 对向量进行索引,以实现快速语义搜索。当工具查询知识库时,Amazon OpenSearch Serverless 检索相关分块,然后将其作为上下文提供给 Anthropic Claude Sonnet 4.6(在 Amazon Bedrock 上),以生成有据可依的响应。
系统将生成的文档存储在 Amazon S3 中,并返回预签名 URL 以供安全下载。安全措施包括:
- AWS WAF ,其具有托管规则集,并在 Amazon API Gateway 上实施基于 IP 的速率限制。
- Amazon Cognito 并使用 Plus 功能计划以及用于威胁保护的高级安全模式。
- 通过 AWS CDK 预置的 Amazon Bedrock Guardrails,用于一致的内容过滤。
- Amazon DynamoDB,具备时间点恢复、删除保护和客户管理的 AWS KMS 加密。
- Amazon S3 存储桶,具备版本控制、服务器访问日志记录和阻止公开访问。
- AWS X-Ray 对 Lambda 函数进行追踪,以实现分布式调试。
- 基于正则表达式的租户 ID 和会话 ID 验证的输入校验。
- 通过以下方式实现租户隔离: AWS Security Token Service (AWS STS) 每个租户的角色代入。
先决条件
在部署之前,您需要在环境中配置以下工具和访问权限:
- AWS 环境:
- 一个活跃的 AWS 账户,具有部署基础设施的权限。
- 已配置凭证的 AWS Command Line Interface (AWS CLI)。
- 具有适当服务访问策略的 IAM 角色。
- 开发工具:
- .NET SDK 8 并全局安装了 Amazon.Lambda.Tools。
- Python 3.12 或更高版本 用于 AWS CDK 和 Lambda 函数。
- Node.js 以及 AWS CDK CLI 用于基础设施部署。
- Docker 或 Finch 用于构建容器镜像(需要支持 ARM64)。
- AWS 服务访问:
- Amazon Bedrock,并已获得 Anthropic Claude Sonnet 4.6、Amazon Titan Text Embeddings v2 以及 Stability AI Stable Image Inpaint 的模型访问权限(可通过 Amazon Bedrock 获取)。有关各区域的模型可用性,请参阅 Amazon Bedrock 中各 AWS 区域支持的模型.
- 您的账户中已启用 Amazon Bedrock AgentCore 访问。
- Amazon API Gateway Regional REST API 集成超时时间配置为至少 300 秒。默认值为 29 秒。更多信息,请参阅 API Gateway 配额.
- 一个带有私有子网的现有 Amazon VPC。
- 一个用于部署制品的 Amazon S3 存储桶。
设置解决方案
设置过程包括配置部署参数和初始化 AWS CDK 环境。
- 克隆代码仓库 并导航到项目目录:
git clone https://github.com/aws-samples/sample-generating-powerpoint-presentations-with-amazon-bedrock.git - 创建配置文件
pipeline-params.ini位于仓库根目录:environment=dev awscliprofile= ContainerRegistry=lambda-pptx-gen AgentContainerRegistry=agentcore-supervisor BucketDev=<amzn-s3-demo-bucket> VpcId=<your-vpc-id> ParsingInferenceProfileId=us.anthropic.claude-haiku-4-5-20251001-v1:0 AgentInferenceProfileId=us.anthropic.claude-sonnet-4-6 EmbeddingModelId=amazon.titan-embed-text-v2:0 ImageGenerationModelId=stability.stable-image-inpaint-v1:0 PPTXGenImageTag=latest AgentImageTag=latest将
awscliprofile设置为您的 AWS CLI 配置文件名称,或留空以使用环境变量凭证。 - 引导 AWS CDK (每个账户和区域仅需一次):
cdk bootstrap这将创建 AWS CDK 部署所需的 AWS CloudFormation CDKToolkit 堆栈。
- 使构建脚本可执行:
chmod +x ./pipeline-build.sh chmod +x ./pipeline-deploy.sh chmod +x ./deploy-agentcore.sh
构建和部署
部署过程分为三个阶段:构建制品、部署基础设施以及部署 AgentCore 运行时代理。
构建阶段
构建阶段编译应用程序代码并打包部署工件。运行构建脚本:
./pipeline-build.sh
此脚本编译 .NET 项目(Chat API)并将其打包为 Lambda 部署包。它使用 Docker 或 Finch 构建 PPTX Generator 容器镜像,并与 Amazon Elastic Container Registry (Amazon ECR)进行身份验证。然后推送容器镜像,并将构建工件存储在 asset-output 目录中。
基础设施部署阶段
基础设施部署创建 AWS 资源并配置服务集成。运行部署脚本:
./pipeline-deploy.sh
该部署按依赖顺序创建四个 AWS CloudFormation 堆栈:
- VPCEndpointsStack: 为包括 Amazon Bedrock AgentCore 在内的 AWS 服务配置 Amazon VPC 端点。
- OpensearchStack: 预置用于向量存储的 Amazon OpenSearch Serverless 集合。
- AgentCoreStack: 创建防护机制、Lambda 函数、IAM 角色,并将配置存储在 AWS Systems Manager Parameter Store.
- ChatApiStack: 部署 Amazon API Gateway 和 Chat API Lambda。
AgentCore 运行时部署
在基础设施堆栈部署完成后,将 supervisor 代理部署到 AgentCore 运行时:
./deploy-agentcore.sh
此脚本构建 supervisor 代理容器(ARM64),将其推送到 Amazon ECR,创建 AgentCore 运行时和端点,并使用端点的 Amazon Resource Name (ARN) 更新 Systems Manager 参数。Chat API 引用该端点 ARN 将请求路由到代理。
部署完成后,AWS CloudFormation 输出包括 Amazon API Gateway 端点 URL 和资源标识符。
配置
该解决方案提供了多个配置点:
Agent 指令
编辑 agent/app.py 以修改 supervisor agent 的系统提示词和行为。该 Agent 使用 Strands Agents,并在其中定义了两个工具: agent/tools.py:
- generate_pptx: 调用 PPTX Generator Lambda 进行文档创建。
- generate_summary: 调用 Summary Generator Lambda 进行知识库查询。
模型选择
在 pipeline-params.ini中,调整模型标识符:
ParsingInferenceProfileId:用于知识库文档解析的模型(推荐使用 Anthropic Claude Haiku 4.5 以提高成本效率)。AgentInferenceProfileId:用于 Agent 推理的模型(推荐使用 Anthropic Claude Sonnet 4.6)。EmbeddingModelId:用于向量搜索的嵌入模型(Amazon Titan Text Embeddings v2)。ImageGenerationModelId:用于幻灯片图像生成的模型(Stability AI Stable Image Inpaint)。
使用推理配置文件而非直接模型 ID,请求将利用更广泛的多区域容量池,从而提高吞吐量,并有助于在负载下保持一致的性能。
Lambda 配置
在堆栈文件中调整计算资源:
- Chat API: 128 MB 内存,29 秒超时,100 保留并发(在
api.py). - PPTX Generator: 900 MB 内存,300 秒超时,50 保留并发(在
pptx_gen.py). - Summary Generator: 512 MB 内存,300 秒超时,50 保留并发(在
sum_gen.py).
结果
在使用一份 90 页的 Amazon 2024 Annual Report PDF 进行的内部测试中,该解决方案产生了以下性能指标:
- 演示文稿生成时间: 端到端 70–90 秒(包括知识库检索、内容生成、图像创建和文件组装)。
- 幻灯片数量: 六张幻灯片,包含标题、要点、图文、纯图片和要点总结等格式。
- 图像生成: 每次演示使用 Stability AI Stable Image Inpaint 生成两张 AI 图像。
- 每次生成成本: 撰写本文时,在 us-east-1 区域的模型调用成本约为 $0.04(包括文本和图像生成,其中图像生成占成本的大部分)。
- 知识库摄取: 摄取一个 1.3 MB 的 PDF 文档用时不到 2 分钟。
PowerPoint 演示文稿
以下图表显示了生成的演示文稿中的示例幻灯片。
图 2:生成的标题幻灯片,具有可自定义的品牌标识
图 3:生成的包含要点的幻灯片
图 4:生成的将文本与 AI 生成图像相结合的幻灯片
图 5:生成的总结盈利指标的幻灯片
图 6:生成的包含 AI 视觉效果的纯图片幻灯片
图7:生成的要点总结幻灯片
生成的演示文稿包括:
- 带有可自定义品牌标识的标题幻灯片。
- 带有项目符号和结构化文本的内容幻灯片。
- 带有由 Stability AI Stable Image Inpaint(基于 Amazon Bedrock)生成的AI视觉图像的图片幻灯片。
- 带有演讲指导的演讲者备注。
- 基于企业模板的一致格式。
摘要
提供给知识库的摘要输出包括:
- 知识库内容的简明综合。
- 对源文档的引用追踪。
- 突出显示关键点的结构化格式。
API响应
Chat API 返回:
- 用于实时用户反馈的流式响应。由于内部测试显示演示文稿生成需要70–90秒(超过了 Amazon API Gateway 默认的29秒集成超时时间),Chat API 采用了异步调用模式。请使用流式传输或轮询来接收最终结果,而不是等待同步 REST 调用。
- 跨多轮对话的上下文维护。
- 用于文档下载的 Amazon S3 预签名 URL(5分钟过期)。
生成的内容在交付前会经过 Amazon Bedrock Guardrails 验证,以确保符合内容策略。
清理
为避免产生持续费用,请删除已部署的资源:
- 删除 AgentCore 运行时 和端点:
aws bedrock-agentcore-control delete-agent-runtime-endpoint \ --agent-runtime-id <runtime-id> \ --agent-runtime-endpoint-id <endpoint-id> aws bedrock-agentcore-control delete-agent-runtime \ --agent-runtime-id <runtime-id> - 关闭 Amazon DynamoDB 删除保护 (删除堆栈前必须执行):
aws dynamodb update-table --table-name chat-sessions-dev --no-deletion-protection-enabled aws dynamodb update-table --table-name tenant-table-dev --no-deletion-protection-enabled - 按相反的依赖顺序删除 AWS CloudFormation 堆栈 :
aws cloudformation delete-stack --stack-name ChatApiStack aws cloudformation delete-stack --stack-name AgentCoreStack aws cloudformation delete-stack --stack-name OpensearchStack aws cloudformation delete-stack --stack-name VPCEndpointsStack - 删除前清空 Amazon S3 存储桶 (AWS CloudFormation 无法删除非空存储桶):
aws s3 rm s3://amzn-s3-demo-bucket --recursive - 删除包含容器镜像的 Amazon ECR 仓库 :
aws ecr delete-repository --repository-name lambda-pptx-gen --force aws ecr delete-repository --repository-name agentcore-supervisor --force - 删除租户知识库子堆栈 (由租户配置器创建):
aws cloudformation delete-stack --stack-name bedrock-kb-<tenant-id>
安全注意事项
此解决方案使用 Lambda 环境变量来存储配置值,例如模型 ID、Amazon S3 存储桶名称和护栏 ID。这些是资源标识符,而非机密信息。对于生产环境部署,请使用 AWS Secrets Manager 来存储敏感的配置值,例如 API 密钥和数据库凭证。
AgentCore 运行时代理在具有会话级隔离的隔离容器中运行。每个用户会话都在专用的环境中运行,有助于防止跨会话的数据污染。
结论
在本文中,您使用 Amazon Bedrock AgentCore 构建了一个 AI 代理系统,用于自动执行企业文档生成。部署在 AgentCore 运行时上的主管代理将请求路由到用于文档创建和摘要的专用工具,在内部测试中将演示文稿的创建时间缩短至约 90 秒。
RAG 流水线使生成的内容基于源文档,并且 Amazon Bedrock Guardrails 验证内容合规性。您可以将此架构应用于金融服务的自动化报告生成、工程团队的技术文档,或销售组织的方案创建。
要开始使用,请克隆 GitHub 仓库 并按照设置说明操作。有关所使用服务的更多信息,请参阅 Amazon Bedrock AgentCore 文档, Strands Agents SDK以及 AWS CDK 开发人员指南.
