可易

用 Amazon Bedrock AgentCore 生成演示文稿

可易团队阅读约 12 分钟

本文说明如何在 Amazon Bedrock AgentCore 上部署主管智能体,用检索增强生成锚定企业文档并生成演示文稿,包含架构、命令、配置、成本与清理。

目录

#用 Amazon Bedrock AgentCore 生成演示文稿

金融服务团队每周要花大量时间,根据季度报告、合规文档和市场分析手工制作客户 PowerPoint 演示文稿。每一份演示文稿都要阅读数百页、提取关键数据点、组织幻灯片并生成配套视觉材料。本文带你构建一套使用 Amazon Bedrock AgentCore(https://aws.amazon.com/bedrock/agentcore/)的人工智能(artificial intelligence, AI)智能体(agent)系统,以自动化该工作流;在我们的内部测试中,完成时间不到 90 秒。这种方法在缩短演示文稿制作时间的同时,把内容锚定在源文档上。该解决方案把一个主管智能体(supervisor agent)部署在 AgentCore 运行时(runtime)上。AgentCore 运行时是 Amazon Bedrock AgentCore 的一项能力,并使用 Strands Agents(https://strandsagents.com/)框架编排文档生成与摘要工具。Anthropic Claude Sonnet 4.6(可在 Amazon Bedrock 上使用)负责内容创作,Amazon Titan Text Embeddings v2 提供向量(vector)搜索,Stability AI Stable Image Inpaint(可在 Amazon Bedrock 上使用)生成幻灯片图像。本文附带一个包含代码资产的公开仓库。

解决方案概述

该解决方案在 Amazon Bedrock AgentCore 运行时上部署单个主管智能体,根据用户请求在文档生成工具与摘要工具之间选择。一条检索增强生成(Retrieval Augmented Generation, RAG)流水线使用 Amazon OpenSearch Serverless 做向量存储,并在多模态(multimodal)内容上做语义搜索。

该解决方案包含用 .NET 8 最小 API(minimal APIs)构建的 REST API,因此你可以通过标准 HTTP 调用与现有企业应用集成。AWS Lambda 提供无服务器计算,包括用于生成 PowerPoint 的容器化函数。该解决方案用 Amazon Virtual Private Cloud(Amazon VPC)(https://docs.aws.amazon.com/vpc/)隔离、AWS Key Management Service(AWS KMS)(https://docs.aws.amazon.com/kms/)加密,以及 AWS Identity and Access Management(IAM)(https://docs.aws.amazon.com/iam/)最小权限(least-privilege)访问控制来保护实现。

关键概念

本节说明 AgentCore 运行时、RAG 以及内容安全护栏(guardrails)在本解决方案中的用法。

使用 Amazon Bedrock AgentCore 编排智能体

单个 AI 智能体要从大型知识库(knowledge base)生成文档,必须检索内容、组织大纲、生成文本、创建图像并组装文件。本解决方案没有把这些相互竞争的职责放进一个单体函数,而是采用基于工具的架构,由主管智能体把请求路由到专用工具。

Amazon Bedrock AgentCore 运行时提供一个平台,可用任意框架或模型大规模构建、连接并优化智能体。智能体代码运行在带会话管理、内置身份和可观测性的隔离容器中。本解决方案使用 Strands Agents 框架(一个用于构建 AI 智能体的开源 SDK)实现主管逻辑。

主管智能体暴露两个工具:

  • generate_pptx: 通过调用 PPTX Generator Lambda 函数创建 PowerPoint 演示文稿。该函数从知识库检索内容、生成幻灯片大纲、创建 AI 图像并组装最终文档。
  • generate_summary: 使用 RAG 从知识库提取并综合信息,以交付准确、有依据的响应。

智能体判断请求需要文档生成、内容摘要,还是两者都需要,然后调用相应工具。你可以在智能体代码中定义新工具来增加能力,而无需修改现有工具。

面向企业知识的检索增强生成(RAG)

RAG 应对 AI 系统中的一个根本挑战:交付准确、最新、锚定在企业数据上的信息,而不是只依赖模型的训练数据。该实现使用 Amazon Bedrock Knowledge Bases(https://docs.aws.amazon.com/bedrock/latest/userguide/knowledge-base.html),把向量搜索与大语言模型(large language models, LLMs)结合起来,在生成响应之前检索相关上下文。

RAG 流水线的工作方式如下:

  1. 你把企业文档上传到 Amazon Simple Storage Service(Amazon S3)(https://docs.aws.amazon.com/s3/)。
  2. 系统对文档分块(chunk)并解析,对包括表格、图表和图像在内的多模态内容做专门处理。
  3. Amazon Titan Text Embeddings v2 把每个分块转换成捕捉语义的高维向量。
  4. Amazon OpenSearch Serverless(https://docs.aws.amazon.com/opensearch-service/latest/developerguide/serverless.html)存储这些向量,形成可搜索的向量数据库。
  5. 查询时,系统把用户请求转换成嵌入(embedding),并做相似度搜索以检索相关文档分块。
  6. 检索到的分块为语言模型提供上下文,模型据此生成锚定在源材料上的响应。

这种方法通过把生成的文档锚定在企业知识库的源信息上,旨在帮助减少幻觉(hallucinated)内容。

注意: Amazon OpenSearch Serverless 集合的数据平面必须保持可公开访问,因为 Amazon Bedrock Knowledge Bases 从 AWS 托管基础设施访问 Amazon OpenSearch Serverless,而不是通过客户的 VPC 端点。IAM 数据访问策略保护该集合,仅 VPC 访问则限制 Amazon OpenSearch Serverless 控制台。

用于内容安全的 Amazon Bedrock Guardrails

企业 AI 应用需要内容审核,以满足组织标准和合规要求。Amazon Bedrock Guardrails(https://aws.amazon.com/bedrock/guardrails/)提供内置内容过滤和安全机制,并贯穿文档生成流水线。

护栏在多个阶段运行:

  • 输入处理: 过滤用户请求,以帮助防止注入问题和不适当内容。
  • 输出生成: 监视模型输出,以核验其符合内容策略。
  • 个人可识别信息(personally identifiable information, PII)处理: 检测并匿名化或阻止 PII。

该实现通过 AWS Cloud Development Kit(AWS CDK)(https://docs.aws.amazon.com/cdk/v2/guide/cli.html)创建自定义护栏,并配置针对企业文档创建的具体策略。智能体在模型调用层应用护栏,从而提供一致的内容安全,而无需为每次部署做手工配置。

解决方案架构

下图展示基于智能体的文档生成系统。

图 1:Amazon Bedrock AgentCore RAG 演示文稿生成系统的架构。图中请求经 Amazon API Gateway 与 AWS Lambda 进入主管智能体,并在 VPC 内到达知识库与存储。

数据流从经 Amazon API Gateway(https://docs.aws.amazon.com/apigateway/)到达的用户请求开始。API Gateway 把请求路由到运行在 AWS Lambda(https://docs.aws.amazon.com/lambda/)上、基于 .NET 的 Chat API。该 API 在 Amazon DynamoDB(https://docs.aws.amazon.com/dynamodb/)中维护对话状态,然后调用托管在 Amazon Bedrock AgentCore 运行时上的主管智能体。

主管智能体分析请求并选择合适的工具。对于文档生成,它调用 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(presigned URL)供安全下载。安全措施包括:

  • 在 Amazon API Gateway 上使用 AWS WAF(https://docs.aws.amazon.com/waf/),并配合托管规则集和基于 IP 的速率限制。
  • 使用 Amazon Cognito(https://docs.aws.amazon.com/cognito/)的 Plus 功能计划和高级安全模式做威胁防护。
  • 通过 AWS CDK 预置 Amazon Bedrock Guardrails,以做一致的内容过滤。
  • Amazon DynamoDB 启用时间点恢复、删除保护和客户托管的 AWS KMS 加密。
  • Amazon S3 存储桶启用版本控制、服务器访问日志记录,并阻止公共访问。
  • 在 Lambda 函数上使用 AWS X-Ray(https://docs.aws.amazon.com/xray/)跟踪,以便分布式调试。
  • 用基于正则表达式的租户(tenant)ID 和会话 ID 核验做输入验证。
  • 通过 AWS Security Token Service(AWS STS)(https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html)按租户代入角色,实现租户隔离。

前提条件

部署之前,你需要在环境中配置以下工具和访问权限:

  • AWS 环境:
  • 一个有效的 AWS 账户,并具有部署基础设施的权限。
  • 已用凭证配置的 AWS Command Line Interface(AWS CLI)。
  • 具有适当服务访问策略的 IAM 角色。
  • 开发工具:
  • .NET SDK 8(https://learn.microsoft.com/en-us/dotnet/core/whats-new/dotnet-8/overview),并全局安装 Amazon.Lambda.Tools。
  • Python 3.12 或更高版本(https://docs.python.org/3/),用于 AWS CDK 和 Lambda 函数。
  • Node.js(https://nodejs.org/docs/latest/api/)和 AWS CDK CLI(https://docs.aws.amazon.com/cdk/v2/guide/cli.html),用于基础设施部署。
  • Docker(https://docs.docker.com/)或 Finch(https://runfinch.com/),用于构建容器镜像(需要 ARM64 支持)。
  • AWS 服务访问:
  • Amazon Bedrock,并已开通 Anthropic Claude Sonnet 4.6、Amazon Titan Text Embeddings v2 和 Stability AI Stable Image Inpaint(可通过 Amazon Bedrock 使用)的模型访问。关于各区域的模型可用性,见 Amazon Bedrock 中按 AWS 区域列出的受支持模型(https://docs.aws.amazon.com/bedrock/latest/userguide/models-regions.html)。
  • 账户中已启用 Amazon Bedrock AgentCore 访问。
  • Amazon API Gateway 区域级 REST API 集成超时至少配置为 300 秒。默认值为 29 秒。更多信息见 API Gateway 配额(https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-execution-service-limits-table.html)。
  • 一个已有的、带私有子网的 Amazon VPC。
  • 一个用于部署构件的 Amazon S3 存储桶。

设置解决方案

设置过程包括配置部署参数和初始化 AWS CDK 环境。

  1. 克隆仓库并进入项目目录:
git clone https://github.com/aws-samples/sample-generating-powerpoint-presentations-with-amazon-bedrock.git
  1. 在仓库根目录创建配置文件 pipeline-params.ini。把 awscliprofile 设为你的 AWS CLI 配置文件名称,或留空以使用环境变量凭证:
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
  1. 引导 AWS CDK(每个账户和区域一次)。这会创建 AWS CDK 部署所需的 AWS CloudFormation(https://docs.aws.amazon.com/cloudformation/)CDKToolkit 堆栈:
cdk bootstrap
  1. 使构建脚本可执行:
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)(https://docs.aws.amazon.com/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(https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-parameter-store.html)。
  • ChatApiStack: 部署 Amazon API Gateway 和 Chat API Lambda。

AgentCore 运行时部署

基础设施堆栈部署完成后,把主管智能体部署到 AgentCore 运行时:

./deploy-agentcore.sh

该脚本构建主管智能体容器(ARM64),将其推送到 Amazon ECR,创建 AgentCore 运行时和端点,并用端点的 Amazon Resource Name(ARN)更新 Systems Manager 参数。Chat API 引用该端点 ARN,以便把请求路由到智能体。

部署之后,AWS CloudFormation 输出包括 Amazon API Gateway 端点 URL 和资源标识符。

配置

该解决方案提供若干配置点:

智能体指令

编辑 agent/app.py 以修改主管智能体的系统提示(system prompt)和行为。该智能体使用 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:用于智能体推理的模型(建议使用 Anthropic Claude Sonnet 4.6)。
  • EmbeddingModelId:用于向量搜索的嵌入模型(Amazon Titan Text Embeddings v2)。
  • ImageGenerationModelId:用于生成幻灯片图像的模型(Stability AI Stable Image Inpaint)。

使用推理配置文件(inference profile)而不是直接的模型 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 年度报告(https://ir.aboutamazon.com/annual-reports-proxies-and-shareholder-letters/default.aspx)PDF 所做的内部测试中,该解决方案得到以下性能指标:

  • 演示文稿生成时间: 端到端 70–90 秒(包括知识库检索、内容生成、图像创建和文件组装)。
  • 幻灯片数量: 六张,版式包括标题、要点、图像加文本、仅图像和要点总结。
  • 图像生成: 每份演示文稿使用 Stability AI Stable Image Inpaint 生成两张 AI 图像。
  • 每次生成成本: 撰写时在 us-east-1 的模型调用成本大约为 0.04 美元(文本与图像生成,其中图像生成占成本的大部分)。
  • 知识库摄取: 单个 1.3 MB PDF 文档不到 2 分钟。

PowerPoint 演示文稿

以下各图展示一份生成演示文稿中的示例幻灯片。

图 2:生成的标题幻灯片,文字为 “Amazon: From Startup to Empire”,品牌可定制。

图 3:生成的要点幻灯片,标题为 “1997: The Rocket Ship Launches”,并含早期增长指标。

图 4:生成的幻灯片,标题为 “2024: A Diversified Revenue Engine”,把收入文本与一张 AI 生成图像放在一起。

图 5:生成的要点幻灯片,标题为 “Profitability Takes Center Stage”,并含盈利指标。

图 6:仅图像幻灯片,含一张 AI 生成的送货卡车与包裹插图。

图 7:生成的要点总结幻灯片,标题为 “Important Takeaways”,含四列摘要。

生成的演示文稿包括:

  • 品牌可定制的标题幻灯片。
  • 带要点和结构化文本的内容幻灯片。
  • 带有来自 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 验证,以核验其符合内容策略。

清理

为避免持续计费,删除已部署的资源:

  1. 删除 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>
  1. 关闭 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
  1. 按相反的依赖顺序删除 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
  1. 删除前清空 Amazon S3 存储桶(AWS CloudFormation 无法删除非空存储桶):
aws s3 rm s3://amzn-s3-demo-bucket --recursive
  1. 删除包含容器镜像的 Amazon ECR 仓库:
aws ecr delete-repository --repository-name lambda-pptx-gen --force
aws ecr delete-repository --repository-name agentcore-supervisor --force
  1. 删除租户知识库子堆栈(由租户预置程序创建):
aws cloudformation delete-stack --stack-name bedrock-kb-<tenant-id>

安全注意事项

本解决方案使用 Lambda 环境变量存放模型 ID、Amazon S3 存储桶名称和护栏 ID 等配置值。这些是资源标识符,不是机密。对于生产部署,对 API 密钥和数据库凭证等敏感配置值使用 AWS Secrets Manager。

AgentCore 运行时智能体运行在具有会话级隔离的隔离容器中。每个用户会话在专用环境中运行,有助于防止跨会话数据污染。

结论

在本文中,你使用 Amazon Bedrock AgentCore 构建了一套自动化企业文档生成的 AI 智能体系统。部署在 AgentCore 运行时上的主管智能体把请求路由到用于文档创建和摘要的专用工具,在一次内部测试中把演示文稿创建缩短到大约 90 秒。

RAG 流水线把生成内容锚定在源文档上,Amazon Bedrock Guardrails 核验内容合规。你可以把该架构用于金融服务中的自动报告生成、工程团队的技术文档,或销售组织的提案创建。

要开始使用,克隆 GitHub 仓库(https://github.com/aws-samples/sample-generating-powerpoint-presentations-with-amazon-bedrock)并按照设置说明操作。关于所用服务的更多信息,参阅 Amazon Bedrock AgentCore 文档(https://docs.aws.amazon.com/bedrock-agentcore/)、Strands Agents SDK(https://strandsagents.com/)和 AWS CDK 开发人员指南(https://docs.aws.amazon.com/cdk/)。

PRIMARY_SOURCE: https://aws.amazon.com/blogs/machine-learning/generate-presentations-with-amazon-bedrock-agentcore

  • #AgentCore
  • #演示文稿
  • #RAG
  • #部署
  • #护栏