

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Strands Agents SDK 和 AWS Fargate 部署 Multi-Agent 会议情报平台
<a name="deploy-meeting-intelligence-strands-agents-fargate"></a>

*Aishita Batra 和 Muskan。，Amazon Web Services*

## Summary
<a name="deploy-meeting-intelligence-strands-agents-fargate-summary"></a>

这种模式部署了多代理会议情报平台 AWS Fargate ，该平台可自动从会议记录中生成结构化会议记录、执行摘要、音频旁白和格式化的 PDF 报告。该解决方案使用 Strands Agents SDK 来编排四个专门的人工智能代理，Amazon Bedrock 用于语言模型推断，Amazon Polly 用于文本到语音的转换。

用户通过 Streamlit Web 界面上传会议记录，系统通过协调的代理管道异步处理这些记录。该基础设施通过 Actions w GitHub ith AWS AWS Cloud Development Kit (AWS CDK) 自动部署，包括内置监控、自动扩展和高可用性。

## 先决条件和限制
<a name="deploy-meeting-intelligence-strands-agents-fargate-prereqs"></a>

*先决条件*
+  AWS 账户 具有管理权限的活跃用户
+ AWS CDK 已安装版本 2.114.1 或更高版本
+ AWS CLI 已安装并配置了相应的 AWS Identity and Access Management (IAM) 权限
+ Node.js 18 或更高版本
+ Python 3.12 或更高版本
+ Git 已安装
+ 已安装 Docker（可选，用于本地测试）
+ 配置了存储库密钥的 GitHub 账户：`AWS_ACCESS_KEY_ID`和 `AWS_SECRET_ACCESS_KEY`
+ Amazon Bedrock 可在你所在的地区启用 Anthropic Claude 3 Sonnet 模型
+ 已启用 Amazon Polly 访问权限（大多数地区默认启用）
+ 亚马逊简单存储服务 (Amazon S3)、亚马逊弹性容器服务 (Amazon ECS)、Fargate、Elastic Load Balancing、亚马逊虚拟私有云（亚马逊 VPC）的 IAM 权限
+ 亚马逊 VPC、IAM CloudWatch、亚马逊和亚马逊简单通知服务 (Amazon SNS) Simple Notification Service

*限制*
+ 每次会议的处理时间为 2-7 分钟，具体取决于笔录的复杂程度。
+ 每个请求的最大笔录长度为 50,000 个字符。
+ 音频摘要会自动压缩为 3,000 个字符（Amazon Polly 字符数限制）。
+ 亚马逊 Bedrock Claude 3 Sonnet 的可用性因而异。 AWS 区域
+ Job 状态存储在内存中，除非您配置了持久性，否则不会在容器重启后 S3-based 保持不变。
+ 直接上传仅支持`.txt`文件。
+ Application Load Balancer 强制要求处理请求的超时时间为 15 分钟。
+ 有些 AWS 服务并非全部可用 AWS 区域。有关区域可用性，请参阅[按地区划分的AWS 服务](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/)。有关特定端点，请参阅[服务端点和配额](https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html)页面，然后选择相应服务的链接。

## 架构
<a name="deploy-meeting-intelligence-strands-agents-fargate-architecture"></a>

**目标架构**

该解决方案使用Strands Agents SDK部署了 AWS Fargate 具有以下架构的多代理人工智能系统：

![](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/dfd870ca-7a7d-48cc-a62a-b14c8c3c7bb6/images/8f9c0497-153f-4361-80cd-791dc0fec8c5.png)


1. 用户通过托管在本地或远程服务器上的 Streamlit Web 应用程序上传会议记录。

1. 公共子网中的 Application Load Balancer 将流量分发到两个可用区 Fargate 服务。

1. Fargate 任务在具有 NAT 网关访问权限的私有子网中运行，并托管 FastAPI 后端和 Strands 代理编排逻辑。

1. Strands 多代理系统通过四个连续代理处理笔录：结构化会议记录生成、简洁摘要生成、音频旁白和 PDF 报告创建。

1. Amazon Bedrock 提供会议纪要的语言模型推理（Claude 3 Sonnet）和摘要生成代理。

1. Amazon Polly 将简明摘要转换为 MP3 音频旁白。

1. Amazon S3 使用生命周期管理策略存储上传的笔录、生成的输出文件和任务状态。

1. 亚马逊通过 Amazon SNS 通知 CloudWatch 提供集中日志、CPU 和内存警报以及服务运行状况监控。

1. GitHub Action CI/CD s 通过运行状况 AWS CDK 验证测试提供自动部署。

*自动化和扩展*
+ **ECS** Fargate **自动缩**放 — 基于 70% 的 CPU 和内存利用率阈值，自动将容器从 1 个实例扩展到 3 个。
+ CloudWatch**监控** — CPU (65%)、内存 (80%) 和服务运行状况警报与 Amazon SNS 通知集成。
+ A@@ **pplication Load Balancer** — 流量分布，每 60 秒进行一次运行状况检查，长时间运行的 AI 处理任务的空闲超时时间为 15 分钟。
+ **后台任务处理** — 使用 FastAPI 进行异步会议分析 BackgroundTasks ，实现并发任务执行。
+ **S3-based 任务持久性** — Amazon S3 中的永久任务状态存储，可确保容器重启和扩展事件期间的作业连续性。
+ **GitHub 操作 CI/CD** — 带有 CDK 基础架构配置和运行状况验证测试的自动部署管道。

## 工具
<a name="deploy-meeting-intelligence-strands-agents-fargate-tools"></a>

*AWS 服务*
+ Amazon Bedrock — 为会议分析和摘要代理提供语言模型推理（Claude 3 Sonnet）。参见 [Amazon Bedrock 文档](https://docs.aws.amazon.com/bedrock/)。
+ Amazon CloudWatch — 监控容器性能，捕获应用程序日志，并触发 CPU、内存和服务运行状况阈值警报。参见 [Amazon CloudWatch CloudWatch 文档](https://docs.aws.amazon.com/cloudwatch/)。
+ 亚马逊弹性容器服务 (Amazon ECS) Service — 通过运行状况检查和服务发现来编排 Fargate 容器任务。参见 [Amazon ECS 文档](https://docs.aws.amazon.com/ecs/)。
+ Amazon Polly — 将简洁的会议摘要转换为 MP3 音频旁白。参见 [Amazon Polly 文档。](https://docs.aws.amazon.com/polly/)
+ 亚马逊简单通知服务 (Amazon SNS) Simple Notification — 通过监控发送警报通知。 CloudWatch 参见 [Amazon SNS 文档。](https://docs.aws.amazon.com/sns/)
+ Amazon Simple Storage Service (Amazon S3) — 通过生命周期管理存储上传的笔录、生成的输出文件和任务状态。参见[亚马逊 S3 文档](https://docs.aws.amazon.com/s3/)。
+ AWS CDK — 将所有基础架构定义并部署为代码。参见[AWS CDK 文档](https://docs.aws.amazon.com/cdk/)。
+ AWS Fargate — 无需管理服务器即可运行容器化应用程序工作负载，可从 1 个实例自动缩放到 3 个实例。参见[AWS Fargate 文档](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)。
+ Elastic Load Balancing — 跨可用区将传入流量分配给 Fargate 任务。见 [Elastic Load Balancing 文档](https://docs.aws.amazon.com/elasticloadbalancing/)。

*其他工具*
+ **Docker** — 为本地测试构建容器镜像。请参阅 [Docker 文档](https://docs.docker.com/)。
+ **FastAPI** — 为作业提交、状态检查和文件操作提供 REST API 后端。请参阅 [FastAPI 文档](https://fastapi.tiangolo.com/)。
+ **GitHub 操作**-自动执行 CI/CD 部署管道。请参阅[GitHub 操作文档](https://docs.github.com/en/actions)。
+ **ReportLab**— 根据结构化会议纪要生成格式化的 PDF 报告。参见[ReportLab 文档](https://docs.reportlab.com/)。
+ **Strands Agents SDK** — 使用装饰器模式，用最少的代码编排多代理工作流程。`@tool`请参阅 [Strands SDK 文档](https://strandsagents.com/)。
+ **Streamlit** — 提供基于 Web 的用户界面，用于脚本上传和输出下载。请参阅 [Streamlit 文档](https://docs.streamlit.io/)。

*代码存储库*

此模式的代码可在 s GitHub [ample-ai-meeting-minuting-minutes-generator 存储库](https://github.com/aws-samples/sample-ai-meeting-minutes-generator)

## 最佳实践
<a name="deploy-meeting-intelligence-strands-agents-fargate-best-practices"></a>
+ 为每位代理使用清晰、有针对性的系统提示，以确保一致的输出格式和专业的会议文档。
+ 实施 Amazon S3 生命周期管理，保留期为 90 天，以优化成本并自动清理文件。
+ 使用 Amazon S3-based 任务跟踪来维护容器重启和扩展事件的状态，以实现可靠的处理。
+ 使用 Amazon SNS 通知配置 CPU、内存和服务运行状况 CloudWatch 警报，以便进行主动监控。
+ 在处理之前对文件上传和内容格式进行验证和审查，以防止出现系统错误和安全问题。
+ 遵循最低权限原则，并授予执行任务所需的最低权限。有关详情，请参阅 IAM 文档中的[授予最低权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege)和[安全最佳实践](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)。
+ 考虑 AWS AgentCore 需要托管编排和简化运营开销的生产部署。当您需要进一步自定义代理交互和专门的工作流程控制时，Strands SDK 是首选。
+ 根据人工生成的会议记录对代理输出进行系统评估，以持续改善系统提示和座席绩效。

## 操作说明
<a name="deploy-meeting-intelligence-strands-agents-fargate-epics"></a>

### 部署基础设施
<a name="deploy-the-infrastructure"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 克隆存储库 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-meeting-intelligence-strands-agents-fargate.html)<pre>git clone https://github.com/aws-samples/sample-ai-meeting-minutes-generator.git<br /></pre>[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-meeting-intelligence-strands-agents-fargate.html)<pre>cd meeting-minutes-app<br /></pre> | AWS DevOps | 
| 创建自己的 Git 仓库 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-meeting-intelligence-strands-agents-fargate.html)<pre>git remote set-url origin https://<your-git-platform>.com/<your-username>/<your-repo-name>.git<br /></pre>[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-meeting-intelligence-strands-agents-fargate.html)<pre>git push -u origin main<br /></pre> | 应用程序开发人员 | 
| 为配置存储库密钥 CI/CD。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-meeting-intelligence-strands-agents-fargate.html) | DevOps 工程师 | 
| 使用 CI/CD 工作流程部署基础架构。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-meeting-intelligence-strands-agents-fargate.html)<pre>git add .<br />git commit -m "Deploy multi-agent meeting intelligence platform"<br />git push origin main<br /></pre>[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-meeting-intelligence-strands-agents-fargate.html) | DevOps 工程师 | 
| 验证基础设施部署。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-meeting-intelligence-strands-agents-fargate.html) | DevOps 工程师、云管理员 | 

### 配置并启动应用程序
<a name="configure-and-launch-the-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 设置本地开发环境 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-meeting-intelligence-strands-agents-fargate.html)<pre>cd meeting_minutes_agent/app<br /></pre>[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-meeting-intelligence-strands-agents-fargate.html)<pre>python -m venv venv<br />source venv/bin/activate  # Linux/Mac<br /># Or on Windows: venv\Scripts\activate<br /></pre>[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-meeting-intelligence-strands-agents-fargate.html)<pre>pip install -r requirements.txt<br />pip install streamlit<br /></pre> | 应用程序开发人员 | 
| 检索后端服务 URL。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-meeting-intelligence-strands-agents-fargate.html) | 云管理员 | 
| 启动应用程序并验证连通性。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-meeting-intelligence-strands-agents-fargate.html)<pre>BACKEND_URL="http://<your-service-url>.us-east-1.elb.amazonaws.com" streamlit run meeting_minutes_agent/app/streamlit_app.py<br /></pre>[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-meeting-intelligence-strands-agents-fargate.html) | 应用程序开发人员 | 

### 验证解决方案
<a name="verify-the-solution"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 处理会议记录并验证输出。 | [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-meeting-intelligence-strands-agents-fargate.html) | 应用程序开发人员 | 

## 问题排查
<a name="deploy-meeting-intelligence-strands-agents-fargate-troubleshooting"></a>


| 问题 | 解决方案 | 
| --- | --- | 
| 亚马逊 Bedrock 模型访问错误 | 确认您所在的地区启用了 Anthropic Claude 3 Sonnet 模型。**打开 Amazon Bedrock 控制台，选择**模型访问权限**，然后确认 Claude 3 Sonnet 显示已授予访问权限。** | 
| CDK 引导失败 |  部署前`cdk bootstrap aws://<account-id>/<region>`手动运行。验证您的 AWS CLI 证书是否具有 Amazon S3 和 IAM 的权限。 CloudFormation | 
| [See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/deploy-meeting-intelligence-strands-agents-fargate.html) |  请查看 Amazon ECS 控制台，了解已停止的任务的详细信息。常见原因包括 IAM 角色权限不正确、缺少 Amazon Bedrock 访问权限或 VPC 配置问题。查看任务的 CloudWatch 日志。 | 
| 处理超时（ALB 超时 15 分钟） | Application Load Balancer 的空闲超时时间为 15 分钟。对于很长的脚本，请将输入大小减少到 50,000 个字符以下，或者在 CDK 配置中增加 ALB 超时。 | 
| 音频生成失败 | Amazon Polly 的字符限制为 3,000 个。简洁的摘要代理会自动将内容压缩到此限制以下。如果音频生成仍然失败，请确认您所在的地区已启用 Amazon Polly 访问权限。 | 
| GitHub 操作部署失败 | 验证`AWS_ACCESS_KEY_ID`并正确配置`AWS_SECRET_ACCESS_KEY`存储库密钥。检查 IAM 用户是否有权部署 CDK（CloudFormation、Amazon ECS、Amazon S3、IAM）。 | 
| 后端未连接（Streamlit 显示已断开连接） | 验证`BACKEND_URL`环境变量是否与 “输出 CloudFormation ” 选项卡中的 serviceUrl 相匹配。在 Amazon ECS 控制台中确认 Fargate 服务已运行且运行正常。 | 
| 容器重启后 Job 状态丢失 | 通过配置`S3_JOB_TRACKING`环境变量来启用 Amazon S3-based 任务持久性。否则，任务状态仅存储在内存中，容器重启时会丢失。 | 

## 相关资源
<a name="deploy-meeting-intelligence-strands-agents-fargate-resources"></a>

*参考*
+ [Amazon Bedrock 用户指南](https://docs.aws.amazon.com/bedrock/latest/userguide/)
+ [Amazon Polly 开发者指南](https://docs.aws.amazon.com/polly/latest/dg/)
+ [亚马逊 ECS 开发者指南](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/)
+ [AWS Fargate 用户指南](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)
+ [AWS CDK CDK 开发者指南](https://docs.aws.amazon.com/cdk/v2/guide/)
+ [Elastic Load Balancing 用户指南](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/)

*工具*
+ [Strands 代理 SDK 文档](https://strandsagents.com/)
+ [FastAPI 文档](https://fastapi.tiangolo.com/)
+ [Streamlit 文档](https://docs.streamlit.io/)
+ [GitHub 操作文档](https://docs.github.com/en/actions)

## 附加信息
<a name="deploy-meeting-intelligence-strands-agents-fargate-additional-information"></a>

*Multi-agent 处理工作流程*

该解决方案通过四个在 Fargate 任务中按顺序运行的专业代理来协调会议处理。为每个作业分配一个唯一的作业 ID，并以异步方式执行，以实现可扩展性和故障隔离。

1. **结构化会议记录生成器** (`generate_structured_minutes`) — 将原始会议记录和标题作为输入。使用 Amazon Bedrock Claude 3 Sonnet 制作全面的会议纪要，包括会议信息、议程项目、讨论摘要、包含任务人和截止日期的行动项目以及后续步骤。将输出保存为纯文本文件。

1. **简明摘要生成器** (`concise_minutes_agent`)-将 Agent 1 的完整结构化会议记录作为输入。使用 Amazon Bedrock Claude 3 Sonnet 创建不到 3,000 个字符的执行摘要，用于生成音频和快速阅读。

1. **音频生成器** (`audio_generator_agent`)-将 Agent 2 中的简洁分钟作为输入。使用带有 Amazon Polly 的 Strands `speak` 工具生成 MP3 音频文件，讲述简洁的摘要。

1. **PDF 报告生成器** (`create_comprehensive_pdf`)-将 Agent 1 的完整结构化会议记录作为输入。使用该 ReportLab 库生成包含自定义标题样式、章节标题、可读文本布局和元数据的专业 PDF 报告。

*数据流*

1. **用户上传** — 通过 Streamlit 用户界面或直接 API 调用上传的会议记录。

1. **任务初始化** — FastAPI 创建唯一的任务 ID 并立即返回以进行异步处理。

1. **后台处理** — 四步的 Strands 代理工作流程按顺序执行。

1. **文件管理**-生成的文件使用预签名的下载网址上传到 Amazon S3。

1. **Job 完成** — 使用所有生成输出的下载链接更新状态。

*未来的增强注意事项*
+ 使用 Amazon DynamoDB 进行持续的任务跟踪，确保跨容器的可靠性
+ Multi-format 输入支持（`.docx`、`.pdf`、音频转录文件）
+ Real-time WebSocket 进度更新

**End-to-End 处理流程**
+ 该解决方案通过在 Fargate 任务中运行的一系列协调专业代理来协调会议处理。
+ 为每个作业分配一个**唯一的作业 ID**，并以异步方式执行，以确保可扩展性和故障隔离。
+ 工作流程包括**记录提取 → 生成结构化会议纪要 → 执行摘要 → 音频旁白 → 创建 PDF 报告**，每个步骤都**经过验证并**实时登录。

**Four-Step 代理处理**

1. **结构化会议纪要生成器** — 生成详细的会议纪要。

1. **简明摘要生成器** — 创建执行摘要，便于快速查看和音频旁白。

1. **音频生成器**-生成摘要的 MP3 旁白。

1. **PDF 报告生成器 — 生成**精美的、格式化的 PDF 报告。

**自动文件管理和云集成**
+ **自动上传输出：**结构化文本、音频和 PDF 报告会自动上传到 **Amazon S3**，并**按作业 ID 进行适当的分区**。
+ **完整性检查和生命周期管理：**记录上传确认、文件验证和清理，确保操作的透明度和可靠性。
+ **FastAPI** 后台任务管理异步作业的执行。

**用户界面集成和输出**
+ Streamlit 用户界面显示后端连接、笔录输入区域和通过 **S3 Pre-signed URL** 上传会议记录以启动任务后生成会议记录。  
![](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/dfd870ca-7a7d-48cc-a62a-b14c8c3c7bb6/images/f608a187-91bf-4524-a849-907eb5efb182.png)
+ 处理完成后，结构化文本、音频和 PDF 输出可通过 **Pre-signed S3 URL** 下载，可通过用户界面中的可点击按钮进行访问。  
![](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/dfd870ca-7a7d-48cc-a62a-b14c8c3c7bb6/images/b4fa32f4-32c3-43ae-b140-0f6a58ebe245.png)  
![](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/dfd870ca-7a7d-48cc-a62a-b14c8c3c7bb6/images/eb878259-f90e-4d9f-8a4d-42627d04bdd1.png)