基于Terraform构建AI会议摘要系统

本文详细介绍如何使用Terraform部署基于某中心Bedrock和某中心Transcribe的自动化会议摘要系统。系统采用无服务器架构,包含音频处理、语音转文本、AI摘要生成等完整流程,支持实时处理和高可用性部署,帮助企业从会议录音中提取结构化见解。

构建基于AI的自动化摘要系统

从非结构化数据中提取有意义的见解对许多组织来说存在重大挑战。会议录音、客户互动和访谈包含宝贵的商业智能,但由于手动审查的时间和经济成本过高,这些信息大多无法被有效利用。组织经常难以从这些互动中高效捕获和使用关键信息,这不仅导致生产力差距,还错失了利用关键决策信息的机会。

本文介绍了一种无服务器会议摘要系统,利用某中心Bedrock和某中心Transcribe的先进功能,将音频录音转换为简洁、结构化和可操作的摘要。通过自动化这一过程,组织可以节省大量时间,同时确保关键见解、行动项目和决策被系统化捕获并可供利益相关者访问。

解决方案概述

该综合音频处理系统结合了强大的云服务,为从音频内容中提取见解创建了无缝的端到端解决方案。架构包含两个主要组件:处理用户交互和文件上传的用户友好型前端界面,以及将原始音频转换为有价值结构化信息的后端处理管道。这种无服务器架构促进了可扩展性、可靠性和成本效益,同时提供有洞察力的AI驱动分析能力,无需专业的基础设施管理。

前端工作流程

  • 用户通过基于React的前端上传音频文件,使用某中心CloudFront进行全球分发
  • 某中心Cognito提供安全的用户认证和授权
  • 应用程序通过某中心AppSync GraphQL API检索会议摘要和统计信息,该API调用某中心Lambda函数进行查询

处理流程

  • 音频文件存储在某中心S3存储桶中
  • 当音频文件上传到S3的audio/{user_id}/前缀时,S3事件通知向某中心SQS队列发送消息
  • SQS队列触发Lambda函数,启动处理工作流程
  • 某中心Step Functions以内置错误处理和重试机制协调整个转录和摘要工作流程
  • 某中心Transcribe将语音高精度转换为文本
  • 使用基础模型(特别是Anthropic的Claude)生成全面的结构化摘要
  • 结果同时存储在某中心S3(原始数据)和某中心DynamoDB(结构化数据)中,以实现持久性和快速检索

项目结构

会议音频摘要项目遵循包含前端和后端组件的结构:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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/                                 # 部署和实用脚本
├── deploy.sh                                # 主部署脚本
└── zip-lambdas.sh                           # 压缩所有后端lambda的脚本

基础设施设置Terraform

解决方案使用Terraform以一致和可重复的方式定义和配置云基础设施。主Terraform配置协调各个模块:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 计算模块 - 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工作流程,以具有适当错误处理的弹性方式协调音频文件的处理。工作流程处理语言检测、转录、摘要生成和通知。

某中心Bedrock用于摘要生成

摘要组件由某中心Bedrock提供支持,该服务提供对最先进基础模型的访问。解决方案使用Anthropic的Claude 3.7 Sonnet版本1生成全面的会议摘要:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
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: 客户的主要关注点/请求 讨论的解决方案 验证的重要信息 做出的决策
讨论的关键点(如适用,详细说明每个点):列出所有重要主题和问题 提到的重要细节或数字 解释的任何政策或程序 特殊请求或例外
行动项目和后续步骤(如适用,详细说明每个点):客户需要做什么:需要的立即行动 未来要采取的步骤 重要日期或截止日期 公司将做什么(如适用,详细说明每个点):处理或处理步骤 承诺的跟进行动 完成时间表
附加说明(如适用,详细说明每个点):任何显著问题或关注点 跟进建议 重要提醒
技术要求和资源(如适用,详细说明每个点):讨论/需要的系统或工具 提到的技术规格 所需的访问或权限 资源分配细节"""

前端实现

前端使用React构建,提供以下功能:

  • 使用某中心Cognito进行用户认证和授权
  • 带有进度指示器的音频文件上传界面
  • 带有格式化部分(利益相关者、关键点、行动项目)的摘要查看
  • 跨会议摘要的搜索功能
  • 会议统计信息可视化

前端通过某中心AppSync GraphQL API与后端通信,该API为数据操作提供统一接口。

安全考虑

安全是解决方案的重中之重,通过以下措施解决:

  • 用户认证由某中心Cognito处理
  • API访问通过某中心Cognito用户池保护
  • S3存储桶访问仅限于认证用户
  • IAM角色遵循最小权限原则
  • 数据在静态和传输过程中加密
  • Step Functions提供具有适当错误处理的安全编排

使用某中心Bedrock的优势

某中心Bedrock为会议摘要系统提供了几个关键优势:

  • 访问最先进的模型 - 提供对领先基础模型的访问,无需训练自定义模型即可提供高质量的摘要功能
  • 完全托管的集成 - 与其他云服务无缝集成,实现完全无服务器的架构,可根据需求自动扩展
  • 成本效益 - 按需定价意味着只需为实际处理时间付费,对于可变工作负载具有成本效益
  • 安全性和合规性 - 保持数据隐私和安全,确保敏感的会议内容在云环境中受到保护
  • 可定制的提示 - 制作详细提示的能力允许定制摘要,从会议中精确提取组织需要的信息
  • 多语言支持 - 可以处理多种语言的内容,适用于全球组织
  • 减少开发时间 - 预训练模型最小化了对广泛AI开发专业知识和基础设施的需求
  • 持续改进 - 提供模型选择,用户可以通过单个字符串更改更新现有模型

成本考虑

实施此解决方案时,了解每个组件的成本影响非常重要。基于以下假设分析成本:

  • 每月50小时音频处理
  • 平均会议时长30分钟
  • 100个活跃用户访问系统
  • 每月500万次API查询

大部分成本来自某中心Transcribe(约占总成本的73%,72.00美元),某中心AppSync是第二大成本组件(约20%,20.00美元)。尽管提供了核心AI功能,某中心Bedrock成本约占总成本的3%(3.00美元),某中心DynamoDB、CloudFront、Lambda、Step Functions、某中心SQS和某中心S3构成剩余的4%。

服务 使用量 单位成本 月成本
某中心Bedrock 500K输入token/100K输出token 每百万token 3.00美元/15.00美元 3美元
某中心CloudFront 5GB数据传输 每GB 0.085美元 0.43美元
某中心Cognito 100月活跃用户 免费层 0美元
某中心DynamoDB 5 RCU/WCU, ~1GB存储 每RCU/WCU 0.25美元 + 每GB 0.25美元 2.75美元
某中心SQS 1,000条消息 每百万条0.40美元 0.01美元
某中心S3存储 3GB音频 + 12MB转录/摘要 每GB 0.023美元 0.07美元
某中心Step Functions 1,000次状态转换 每千次0.025美元 0.03美元
某中心AppSync 5M查询 每百万4.00美元 20美元
某中心Lambda 300次调用,5秒平均运行时间,256MB 多种 0.10美元
某中心Transcribe 50小时音频 每小时1.44美元 72美元
总计 98.39美元

后续步骤

会议摘要解决方案的下一阶段将整合几种先进的AI技术,以提供更大的商业价值。改进的转录模型可以通过更好地处理多个发言者、口音和技术术语来提高转录准确性——解决拥有多元化团队的全球组织的一个关键痛点。同时,增强的分析功能可以通过实施自动会议分类、基于角色的摘要定制以及与公司知识库的集成来提供相关上下文,帮助组织提取否则会埋藏在对话中的可操作见解。

添加实时处理功能可以帮助团队在会议期间实时查看关键点、行动项目和决策,从而实现即时澄清并减少后续问题。增强的分析功能可以跟踪多个会议随时间推移的模式,让管理层了解沟通有效性、决策过程和项目进展。通过与现有生产力工具(如日历、每日议程、任务管理系统和通信服务)集成,此解决方案确保会议智能直接流入日常工作流程,最大限度地减少手动信息传输,并确保关键见解推动跨部门的有形业务成果。

结论

会议音频摘要器结合了无服务器技术与生成式AI,解决了一个关键的生产力挑战。它自动转录和总结会议,为组织节省数千小时,同时确保见解和行动项目被系统化捕获并与利益相关者共享。

无服务器架构可轻松应对波动的会议量进行扩展,平均每次会议仅需0.98美元,并最大限度地减少基础设施管理和维护开销。提供企业级AI功能,无需专业的机器学习专业知识或大量的开发资源,基于Terraform的基础设施即代码支持跨环境的快速部署、定制以满足特定的组织要求,以及与现有CI/CD管道的无缝集成。

随着生成式AI领域的不断发展和新的、性能更好的模型的出现,解决方案执行任务的能力将在性能和准确性方面自动改进,无需额外的开发工作,从而增强摘要质量、语言理解和上下文感知。这使得会议音频摘要器成为现代企业优化会议工作流程、增强知识共享和提高组织生产力的越来越有价值的资产。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计