通过使用 Amazon Chime SDK 会议摘要解决方案,利用视频会议的转录和摘要来提升生产力

提升视频会议效率,借助 Amazon Chime SDK 会议摘要解决方案

作者 Adam Neumiller Jason Cai Chris Lott Edgar Costa Filho Court Schuett Hang Su日期 2024年6月4日分类 高级 (300),Amazon Bedrock,Amazon Transcribe,人工智能永久链接 评论

关键要点

视频会议平台日益成为企业沟通与协作的重要工具。Amazon Chime SDK 会议摘要解决方案可帮助自动化会议录音及信息提取,从而提升效率和决策质量。本文还探讨了如何进行有效的提示工程,以优化语音到文本的转录和汇总。

如今,企业在有效沟通、协作和决策方面高度依赖视频会议平台。尽管这些平台提供了便利,但在将其与现有工作流无缝集成方面,企业仍面临诸多挑战。其中一个主要问题是缺乏全面的工具来自动化会议加入、录音和提取可操作的见解。这种差距导致了效率低下、机会的流失和有限的生产力,从而妨碍了企业内部信息流通和决策过程。

为了应对这一挑战,我们开发了基于 Amazon Chime SDK 的会议摘要应用程序,并通过 Amazon Cloud Development Kit (AWS CDK) 部署。该应用程序利用 Amazon Chime SDK SIP 媒体应用、Amazon Transcribe 和 Amazon Bedrock 无缝加入会议,录制会议音频,并对其进行转录和摘要处理。通过 AWS CDK 程序化集成这些服务,我们希望简化会议工作流程,使用户能够获取可操作的见解,从而推动更好的决策成果。我们的解决方案目前支持与多个流行平台集成,如 Amazon Chime、Zoom、Cisco Webex、Microsoft Teams 和 Google Meet。

除了部署解决方案外,本帖还将教您提示工程的细致入微,包括如何解决信息提取的解析和提取挑战,如说话者区分、电话调度、摘要和转录清理。我们将通过详细的指引和针对每个用例的结构化方法,展示 Amazon Bedrock 和 Anthropic Claude 模型的有效性。

解决方案概述

下面的基础设施图提供了用于创建会议摘要机器人的 AWS 服务概述。该解决方案所使用的核心服务包括:

服务描述Amazon Chime SDK SIP 媒体应用用于拨打会议并录制会议音频Amazon Transcribe用于对录制音频进行语音转文本处理,包括说话者区分Anthropic Claude 模型用于识别姓名,提高转录质量,并提供会议详细摘要

有关解决方案的详细说明,请参阅 Amazon Chime 会议摘要文档 。

快鸭加速器免费版永久

前置条件

在开始项目设置之前,请确保满足以下要求:

Yarn Yarn 必须安装在您的计算机上。AWS 账户 您需要一个有效的 AWS 账户。启用 Claude Anthropic 模型 这些模型应在您的 AWS 账户中启用。有关更多信息,请参见 模型访问。启用 Amazon Titan Amazon Titan 应在您的 AWS 账户中激活。有关更多信息,请参见 Amazon Titan 模型 。

请参考我们的 GitHub 存储库 获取关于如何部署此解决方案的逐步指南。

通过 Amazon Chime SDK 访问会议

为了捕捉会议音频,Amazon Chime SDK SIP 媒体应用将使用会议提供商的拨号号码拨打会议。Amazon Chime SDK SIP 媒体应用SMA是一种可编程的电信服务,可以通过公共交换电话网络PSTN拨打电话并捕捉音频。SMA 使用 请求/响应模型 以及 AWS Lambda 函数 来处理操作。在此演示中,采用 [CreateSipMediaApplicationCall](https//docsawsamazoncom/chime/latest/APIReference/APICreateSipMediaApplicationCallhtml) API 发起外拨电话,这将导致 Lambda 函数被调用,并接收 [NEWOUTBOUNDCALL](https//docsawsamazoncom/chimesdk/latest/dg/pstninvocationshtml) 事件。

因为大多数会议拨入机制需要 PIN 或其他身份认证,SMA 将使用 [SendDigits](https//docsawsamazoncom/chimesdk/latest/dg/senddigitshtml) 操作向会议提供商发送双音多频音DTMF数字。当应用程序加入会议后,它将通过 [Speak](https//docsawsamazoncom/chimesdk/latest/dg/speakhtml) 操作自我介绍,然后使用 [RecordAudio](https//docsawsamazoncom/chimesdk/latest/dg/recordaudiohtml) 操作录制音频。该音频将以 MP3 格式保存到 Amazon 简单存储服务 (Amazon S3) 桶中。

使用 Amazon Transcribe 进行说话者区分

由于 SMA 作为与会者加入会议,音频将包含所有参与者的单声道。为了处理此音频文件,将使用 Amazon Transcribe 的 ShowSpeakerLabels 设置:

javascriptconst response = await transcribeClientsend( new StartTranscriptionJobCommand({ TranscriptionJobName jobName IdentifyLanguage true MediaFormat wav Media { MediaFileUri audioSource } Settings { ShowSpeakerLabels true MaxSpeakerLabels 10 } OutputBucketName {BUCKET} OutputKey {PREFIXTRANSCRIBES3}/ }))

借助 说话者区分,Amazon Transcribe 可以在 转录输出 中区分不同的说话者。所生成的 JSON 文件将包括转录文本及相关条目,并按说话者进行分组,同时包含开始和结束时间戳。通过解析这些信息,可以生成逐轮转录,结果将更易于阅读。以下是示例:

spk0 嘿,Court,近来怎么样?spk1 嘿,Adam,挺好的。你呢?spk0 不好意思,感谢你今天参加这个电话会议。我很高兴能与你聊聊在 AWS 上的架构。spk1 太棒了!谢谢你的邀请。spk0 你能告诉我一下你们目前在本地使用的服务器吗?spk1 当然。我们目前有四台运行着四个GB RAM 和两个 CPU 的 Web 服务器,我们现在使用的是 Linux 操作系统。spk0 噢,你们用什么数据库?spk1 我们目前有一个 200GB 的 MySQL 数据库,但我忘了版本。不过,我们的数据库有时会卡顿,所以我们真的在找寻一个更快的选项。spk0 你在读取时有感到延迟吗,还是写入时?spk1 是读取时。spk0 是的。你听说过读取副本吗?spk1 我没有。spk0 噢,那可能是你问题的潜在解决方案。如果你不介意,我会稍后给你发一些相关信息供你和你的团队参考。spk1 噢,谢谢你,Adam。任何能够帮助的都非常有用。spk0 最后一个问题,在我让你离开之前。你在改善本地数据的安全性上做了些什么?spk1 首先,我们确实遇到了一些 SQL 注入攻击。我们有 Palo Alto 防火墙,但无法完全实现层级服务器保护。因此,我们需要一个更好的选项。spk0 过去你们有遇到过 MySQL 攻击或 SQL 注入吗?spk1 有。spk0 好吧,太好了。好的,Court,谢谢你提供的背景信息。我会尽快通过邮件联系你,期待下周再聊。spk1 好的,听起来不错,谢谢你,Adam。spk0 再见。spk1 再见。

在这里,发言者是根据说话顺序进行标识的。接下来,我们将展示如何通过名称进一步增强这份转录,而不是用 spk0、spk1 等通用标签。

使用 Anthropic Claude 和 Amazon Bedrock 强化解决方案

该应用程序使用大语言模型LLM完成以下任务:

说话者姓名识别转录清理电话会议摘要会议邀请解析

针对说话者姓名识别的提示工程

首要任务是通过为说话者标签分配姓名来增强转录。这些姓名在转录文本中提取,通常是在某人自我介绍时提及。然后,返回为 JSON 格式的输出。

在只有一个说话者被识别的情况下,将提供特殊指令,以保持响应结构的一致性。遵循这些指令后,LLM 将处理会议转录并准确提取说话者的姓名,而不会增加额外的单词或空格。如果 LLM 未识别出姓名,我们会提示模型返回 Unknown 标签。

在本演示中,提示将使用 Anthropic Claude Sonnet 作为 LLM。您可能需要调整提示以修改解决方案,使用 Amazon Bedrock 上的其他可用模型。

人类 你是一个会议转录名称提取器。请检查转录并提取其中的姓名。按照以下指令进行操作 {transcript} 按如下示例提取姓名 spk0 “name1” spk1 “name2”。 仅提取姓名,格式如上,无需添加其他单词 响应应只包含“发言者”及其相关姓名,格式为用“”隔开的{} 如果仅识别出一个发言者,则用 {} 包围答案 格式应为 {“spk0” “Name” “spk1 “Name2” },不要增加不必要的空格

助手 我还需添加其他内容吗?人类 只需返回 JSON 格式的响应,其中包含姓名及其对应的说话者标签。请勿添加其他单词,不要包含引导性句子。

当说话者被识别并以 JSON 格式返回后,我们可以用相应的说话者姓名替换转录中通用的说话者标签,生成更加完备的转录:

Adam 嘿,Court,近来怎么样?Court 嘿,Adam,挺好的。你呢?Adam 谢谢你今天的参与。我很兴奋能与你讨论在 AWS 上的架构。Court 太棒了!谢谢你的邀请。Adam 你能否告诉我一下目前在本地使用的服务器情况?Court 当然。我们目前有四台 RAM 4GB、CPU 2 的 Web 服务器,使用的操作系统为 Linux。

转录继续

但如果某个发言者未能通过自我介绍被识别,到那时我们希望 LLM 将其标识为 unknown,而不是硬性地或者尝试生成一个标签。

我们可以在指令中添加以下内容:

如果找不到发言者的姓名,使用 UNKNOWNX,其中 X 为说话者标签数字。

如下转录显示了三个说话者,但仅有两个被识别。LLM 必须将未识别的说话者标为 UNKNOWN,而不是对其迫使生成姓名或其他响应。

spk0 是的。spk1 感谢你加入我们的会议,我是 AWS 这边的客户执行经理。参会的还有我们的解决方案架构师 Adam,Adam 可以做个自我介绍吗?spk2 大家好,Court,见到你很高兴。我是 AWS 的专属解决方案架构师,我的职责是协助你们的每一步云旅程。我的工作包括帮助你们了解在 AWS 上的架构及云的最佳实践。spk0 很高兴见到你,Adam。我叫 Court,是某公司的工程副总,听说测试 AWS 体验非常不错,我对此很期待。spk1 谢谢,Court。我们上次谈过你迁移到 AWS 的目标。今天请 Adam 来是想更好地了解你的基础架构和其他技术要求。spk2 能否请你告诉我你们目前在本地部署的情况?spk1 当然。我们spk0 我们正在本地运行一个三层的 Web 应用。

当我们给 Claude Sonnet 提供选项不去强制标识名称后,得到的结果如下:

{“spk0” “Court” “spk1” “UNKNOWN1” “spk2” “Adam”}

针对转录清理的提示工程

现在,转录已经使用说话者姓名进行区分,我们可以利用 Amazon Bedrock 清理转录。清理任务包括消除扰人的填充词,识别和纠正因音同字异而导致的误文,以及处理由音质差所产生的任何区分错误。关于使用 Anthropic Claude Sonnet 模型完成这些任务的提示如下:

人类 你是转录编辑器,请遵循 标签。 {transcript} 包含分配说话者的转录文本 检查转录并删除所有填充词。例如 “um uh er well like you know okay so actually basically honestly anyway literally right I mean” 对于可能由于音同字异而产生的转录错误,根据句子的上下文进行修正。例如,“one” 替代 “won” 或者 “high” 替代 “hi”。 此外,请修正转录中因区分错误而产生的不准确情况。例如,某些情况下句子被两个发言者切分。在这种情况下,请推断实际说话者并归属于他们。

请参考以下示例:

输入示例Court Adam,你说错了。Adam 嗯,你是说,Court吗?

通过使用 Amazon Chime SDK 会议摘要解决方案,利用视频会议的转录和摘要来提升生产力

输出Court Adam,你说错了。Adam 你是说,Court吗?

在响应中,仅返回完整清理后的转录,包括填充词的删除和修正后的说话者区分。仅返回转录,不要包含引导或尾随句子。你不是在总结,而是在清理转录。不包括任何 XML 标签 ltgt助手

转录处理

在初始转录传递给 LLM 后,它将返回一个没有错误的精简转录。以下是转录的摘录示例:

说话者识别

输入

spk0 嘿,Court,近来怎么样?spk1 嘿,Adam,挺好。你呢?spk0 最近如何?谢谢你今天的参与,我很期待与您讨论 AWS 上的

机会风险与延迟成本 云企业战略博客

延误的机会风险与成本文章重点严谨的分析和尽职调查对于管理者至关重要,但过度的分析可能会带来价值损失。每延误一天,企业便可能面临机会成本与实际现金支出,影响股东价值。企业在考虑云端转型时需考量机会风险,...