构建AI驱动的自动化会议摘要系统
解决方案概述
我们的音频处理系统结合了强大的AWS服务,为从音频内容中提取洞察提供了端到端的解决方案。架构包含两个主要组件:处理用户交互和文件上传的前端界面,以及将原始音频转换为有价值结构化信息的后端处理管道。
前端工作流程
- 用户通过基于React的前端上传音频文件,前端通过Amazon CloudFront全球分发
- Amazon Cognito提供安全的用户认证和授权
- 应用通过AWS AppSync GraphQL API检索会议摘要和统计数据
处理流程
- 音频文件存储在Amazon S3桶中
- 当音频文件上传到S3的audio/{user_id}/前缀时,S3事件通知会向Amazon SQS队列发送消息
- SQS队列触发Lambda函数,启动处理工作流
- AWS Step Functions协调整个转录和摘要工作流,包含内置的错误处理和重试机制
- Amazon Transcribe将语音转换为高精度文本
- 使用基础模型(特别是Anthropic的Claude)生成全面的结构化摘要
- 结果同时存储在Amazon S3(原始数据)和Amazon DynamoDB(结构化数据)中
项目结构
项目采用前后端分离的结构:
sample-meeting-audio-summarizer-in-terraform/
├── backend/
│ ├── functions/ # Lambda函数代码
│ │ ├── audio-processing/ # 音频处理函数
│ │ ├── authentication/ # 认证函数
│ │ ├── data-access/ # 数据访问函数
│ │ ├── queue-processing/ # SQS队列处理函数
│ │ ├── summarization/ # 摘要生成函数
│ │ ├── transcription/ # 转录函数
│ │ └── zipped/ # 用于部署的压缩Lambda函数
│ └── terraform/ # 基础设施即代码
│ ├── modules/ # Terraform模块
│ │ ├── api/ # AppSync GraphQL API
│ │ ├── auth/ # Cognito认证
│ │ ├── compute/ # Lambda函数
│ │ ├── messaging/ # SQS队列和S3通知
│ │ ├── network/ # CloudFront和S3网站
│ │ ├── orchestration/ # Step Functions
│ │ ├── queue-processor/ # 队列处理Lambda
│ │ └── storage/ # S3和DynamoDB
│ ├── main.tf # 主Terraform配置
│ ├── outputs.tf # 输出值
│ ├── variables.tf # 输入变量
│ └── terraform.tfvars # 变量值
├── docs/ # 文档和架构图
├── frontend/ # React Web应用
│ ├── public/ # 公共资源
│ └── src/ # React应用源代码
│ ├── components/ # React组件
│ ├── graphql/ # GraphQL查询和变更
│ ├── pages/ # 页面组件
│ └── services/ # 服务集成
└── scripts/ # 部署和实用脚本
基础设施设置
使用Terraform定义和配置AWS基础设施:
# 计算模块 - Lambda函数
module "compute" {
source = "./modules/compute"
aws_region = var.aws_region
aws_account = data.aws_caller_identity.current.account_id
meeting_statistics_table_name = var.meeting_statistics_table_name
meeting_summaries_table_name = var.meeting_summaries_table_name
cognito_user_pool_id = module.auth.cognito_user_pool_id
iam_roles = module.auth.iam_roles
storage_bucket = module.storage.storage_bucket
model_id = var.model_id
inference_profile_prefix = var.inference_profile_prefix
}
# 编排模块 - Step Functions
module "orchestration" {
source = "./modules/orchestration"
aws_region = var.aws_region
aws_account = data.aws_caller_identity.current.account_id
storage_bucket = module.storage.storage_bucket
iam_roles = module.auth.iam_roles
lambda_functions = module.compute.lambda_functions
}
# 队列处理模块 - ProcessTranscriptionQueueFunction Lambda
module "queue_processor" {
source = "./modules/queue-processor"
storage_bucket = module.storage.storage_bucket
state_machine_arn = module.orchestration.state_machine_arn
lambda_function_transcription_role = module.auth.iam_roles.lambda_function_transcription_role
depends_on = [
module.storage,
module.orchestration
]
}
音频处理工作流
核心是一个Step Functions工作流,协调音频文件的处理过程,包括语言检测、转录、摘要生成和通知。
Amazon Bedrock摘要生成
摘要组件由Amazon Bedrock提供支持,它提供了访问最先进的基础模型的能力。我们的解决方案使用Anthropic的Claude 3.7 Sonnet版本1来生成全面的会议摘要:
prompt = f"""即使这是一个原始的会议讨论记录,缺乏清晰的结构和上下文,包含多个发言者、不完整的句子和离题的内容,请尽可能详细地提供清晰全面的对话分析。不要遗漏任何信息。尽可能多地捕捉信息。在摘要中使用项目符号而不是破折号。重要提示:对于所有部分标题,请使用纯文本,不要使用markdown格式(不要使用#、##、**或*符号)。每个部分标题应全部大写,后跟冒号。例如:"TITLE:"而不是"# TITLE"或"## TITLE"。
关键指令:不要在响应中使用任何markdown格式符号,如#、##、**或*,特别是在TITLE部分。TITLE部分必须以"TITLE:"开头,而不是"# TITLE:"或任何带有markdown符号的变体。
请严格按照以下格式组织响应:
TITLE: 给会议一个2-3个词的简短标题,与会议的整体上下文相关,找到一个独特的名称,如公司名称或利益相关者,并包含在标题中
TYPE: 根据会议的内容、对话、主题和讨论,始终为此摘要分配一个会议类型。允许的会议类型有:客户会议、团队会议、技术会议、培训课程、状态更新、头脑风暴会议、评审会议、外部利益相关者会议、决策会议和问题解决会议。这很重要,不要忽略这一点。
STAKEHOLDERS: 提供会议参与者的列表、他们的公司和相应角色。如果没有提供或未理解姓名,请用"未说明"替换姓名。如果发言者没有自我介绍,则不要将他们包括在STAKEHOLDERS部分中。
CONTEXT: 提供10-15句摘要或上下文信息,包含以下内容:联系的主要原因、提供的解决方案、最终结果,考虑上述所有信息
MEETING OBJECTIVES: 提供会议的所有目标或目的。要彻底和详细。
CONVERSATION DETAILS: 客户的主要关注点/请求 讨论的解决方案 验证的重要信息 做出的决定
DISCUSSED KEY POINTS (如果适用,详细说明每个点): 列出所有重要主题和问题 提到的重要细节或数字 解释的任何政策或程序 特殊请求或例外
ACTION ITEMS & NEXT STEPS (如果适用,详细说明每个点): 客户需要做什么:立即需要的行动 未来需要采取的步骤 重要日期或截止日期 公司将要做什么(如果适用,详细说明每个点): 处理或处理步骤 承诺的后续行动 完成时间表
ADDITIONAL NOTES (如果适用,详细说明每个点): 任何值得注意的问题或关注点 后续建议 重要提醒
TECHNICAL REQUIREMENTS & RESOURCES (如果适用,详细说明每个点): 讨论/需要的系统或工具 提到的技术规格 所需的访问或权限 资源分配详情
前端实现
前端使用React构建,提供以下功能:
- 使用Amazon Cognito的用户认证和授权
- 带有进度指示器的音频文件上传界面
- 带格式化部分(利益相关者、关键点、行动项)的摘要查看功能
- 跨会议摘要的搜索功能
- 会议统计可视化
安全考虑
我们通过以下措施解决安全问题:
- 用户认证由Amazon Cognito处理
- API访问通过Amazon Cognito用户池保护
- S3桶访问仅限于认证用户
- IAM角色遵循最小权限原则
- 数据在传输和静态时都加密
- Step Functions提供安全的编排和适当的错误处理
使用Amazon Bedrock的优势
Amazon Bedrock为我们的会议摘要系统提供了几个关键优势:
- 访问最先进的模型
- 完全托管的集成
- 成本效益
- 安全性和合规性
- 可定制的提示
- 多语言支持
- 减少开发时间
- 持续改进
部署步骤
- 克隆包含Terraform代码的仓库
- 配置AWS凭证
- 安装前端依赖
- 创建配置文件
- 初始化和应用Terraform
- 部署解决方案
- 验证部署
成本考虑
实现此解决方案时,了解每个组件的成本影响很重要。基于以下假设分析成本:
- 每月处理50小时音频
- 平均会议时长30分钟
- 100个活跃用户
- 每月500万次API查询
大多数成本来自Amazon Transcribe(约占总成本的73%,72美元),AWS AppSync是第二大成本组件(约20%,20美元)。尽管提供了核心AI功能,Amazon Bedrock成本约占总成本的3%(3美元),DynamoDB、CloudFront、Lambda、Step Functions、Amazon SQS和Amazon S3构成剩余的4%。
总结
我们的会议音频摘要器结合了AWS无服务器技术和生成式AI,解决了一个关键的生产力挑战。它自动转录和总结会议,为组织节省数千小时,同时确保洞察和行动项被系统地捕获并与利益相关者共享。
无服务器架构可以轻松应对波动的会议量,平均每次会议仅需0.98美元,并最大限度地减少基础设施管理和维护开销。Amazon Bedrock提供企业级AI功能,无需专门的机器学习专业知识或大量开发资源,基于Terraform的基础设施即代码支持跨环境的快速部署、定制以满足特定组织需求,以及与现有CI/CD管道的无缝集成。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码