会议转录和分析工具DIY

本文分享一个由 AI 驱动的音频转录和分析工具,它是我使用几个 Python 文件,利用来自领先 AI 供应商的 API构建的。

会议转录和分析工具DIY

你是否曾迷失在会议记录的海洋中,努力记住所说的一切以及关键要点?市面上有一些 SaaS 产品可以帮助你解决这个问题,但借助我们触手可及的 AI 功能,您可能会发现构建自己的解决方案同样富有成效。

我正在分享一个由 AI 驱动的音频转录和分析工具,它是我使用几个 Python 文件构建的(项目源代码在 github 上)。利用来自领先 AI 供应商的 API,该工具使复杂的 AI 功能变得出奇地易于访问。我将向你展示如何将这些 API 拼接在一起,以创建一个有凝聚力且有价值的工具,该工具可输出可在你自己的团队内共享的文档。

1、它有什么用?

此工具使用名为 Whisper 的 OpenAI 模型转录录音。然后使用 OpenAI 或 Anthropic 提供的 API 分析该转录本。然后,该应用程序将这些见解汇编成一个简洁的 markdown 文档。由于分析的独特之处在于找到正确的提示来指导 AI 分析并从您的特定会议记录中提供可操作的见解,因此有很大的修改空间。

以下是本文介绍的应用程序的组成部分

  • 使用 OpenAI Whisper 转录音频:以最小的努力从你的录音中提取准确的转录。
  • 使用 GPT 模型分析转录:该工具可配置为与不同的 AI 模型一起使用,允许比较它们的输出。
  • 组装 Markdown 文档:将我们多个分析提示的输出编译成用户友好的格式。
  • 成本估算:根据token使用情况提供每个 AI 供应商的成本估算,帮助我们做出明智的决定,确定未来分析使用哪种模型

使用此工具作为模板,我希望传达将高级 AI 功能集成到你的项目中是多么容易,从而使复杂的任务更易于管理且更具成本效益。

2、使用 OpenAI Whisper 转录音频

首先,让我们谈谈转录。OpenAI 的 Whisper 技术可以非常轻松地将音频录音转换为文本,并且准确度令人印象深刻。无论你处理的是清晰的语音还是带有一点背景噪音的录音,根据我目前的经验,Whisper 都能出色地完成工作。

有几种方法可以在你的代码中运行 Whisper。以下示例均设计为在你自己的计算机上运行。

OpenAI 确实有一个 API 服务,你可以通过互联网将音频文件(最多 25 兆字节)发送到他们的托管服务 - 在此处阅读有关它的信息。但是,对于我们的应用程序,我们将运行本地转录过程,而不是通过网络发送文件。

我们将首先从最常见的 Whisper Python 库开始,它也由 OpenAI 提供。要开始,需要安装 OpenAI Whisper 库。请务必先阅读“设置”部分。需要注意的是,Whisper 要求你在计算机上安装 ffmpeg 工具。

安装后,转录音频文件非常简单 - 这里有加载 Whisper 模型并在指定路径转录音频文件并将转录结果返回为文本的函数:

import whisper

def transcribe_audio(audio_file_path):
    model = whisper.load_model("medium.en")
    result = model.transcribe(str(audio_file_path)) 
    return result["text"]

transcribed_text = transcribe_audio("path/to_your/audio/file.mp3")

2.1 方案优/缺点

优点:

  • 准确性。Whisper 提供高度准确的转录,即使是在没有高端麦克风或专业设备的情况下制作的具有挑战性的录音也是如此。
  • 成本(免费!)。Whisper 库和模型是 OpenAI 发布的开源工具集的一部分。当你从自己的硬盘运行 Whisper 模型时,不需要 OpenAI API 密钥,也不需要支付任何额外费用。后面描述的分析步骤将需要API密钥,需要付费
  • 灵活性。它支持多种音频格式,可灵活适用于不同的用例。旧的 mp3 或 wav 录音?可以。新的 m4a?也可以。

挑战:

  • 速度。开箱即用,感觉相对较慢。如果你在自己的计算机上运行此程序,可能会听到风扇启动的声音,并注意到整个过程需要一段时间。我在一台 32 GB 内存的 MacBook Pro M2 Max 上运行,代码库示例文件夹中 60 分钟长的音频文件需要 22 分钟才能完成。

我们可以通过几种方法解决速度这个问题。

2.2 推理速度的解决方案 1

如果你使用的是运行 Apple 芯片(M1、M2、M3……)的 Mac,你会很高兴知道他们已经发布了一个 MLX 库,可以显著加快此类 AI/ML 操作的速度。

让我们看看我们之前的示例,这次经过修改以用于 mlx 库。首先,按照这些说明安装 mlx-whisper 库。ni 会看到编程接口几乎相同。但是,性能上的差异是惊人的——现在使用 mlx-whisper 转录相同的 60 分钟源音频文件只需要 3 分钟,而不是使用第一个例子的 22 分钟。

这是与之前相同的示例,略作修改以使用 Apple 的更快代码。

import mlx_whisper

def transcribe_audio(audio_file_path):
    result = mlx_whisper.transcribe(
        str(audio_file_path), 
        path_or_hf_repo="mlx-community/whisper-medium.en-mlx-8bit",
        verbose=True
    )
    return result["text"]


transcribed_text = transcribe_audio("path/to_your/audio/file.mp3")

2.3 推理速度的解决方案 2

如果你没有使用 Apple Silicon,或者由于其他原因你无法运行 mlx-whisper 库,还有另一个名为 whisper.cpp 的工具可供查看。

根据我的经验,whisper.cpp 比 python openai-whisper 库快得多,但没有 mlx-whisper 库快。

自己运行 whisper-cpp 的最佳方法是从 github 下载并编译它。

如果你使用的是 Mac,可以选择 Homebrew 来下载它 - 请注意,homebrew 版本似乎不是最新版本。Whisper.cpp 可以在 Windows 上构建和运行,但我没有第一手经验。

另一种选择是从浏览器中运行 Whisper cpp,但是在这里,我发现这种方法并不比原始的 python openai-whisper 库快多少。

3、挑战:重复怪癖

有时我发现在音频文件中,在我们耳朵里听起来大部分是无声的东西可能会被 Whisper 模型解释为单词。在这些偶尔出现的沉默或音频断断续续的时刻,我猜它会试图解释不存在的单词,并可能重复这些单词。

我见过“OK”这个词连续重复 10 次,甚至从未说过的短语也一遍又一遍地重复。这是我在 github 项目中包含的一个示例。使用浏览器的“查找”功能,搜索“所有人都反对吗?”,你会在记录中找到连续重复 26 次的短语。

3.1 解决方案 1

这时,拥有一个基本的音频编辑器会有所帮助。

在我对音频文件进行转录处理之前,我会修剪会议记录中不相关的任何部分。通常这是人们聚集开会但还没有人说话的那段时间——只需删除这段时间即可。而且,如果在录音中间恰好有一段很长的时间,小组会休息一下,也将其剪掉。当你在音频编辑器中打开音频文件时,通常这些没有人说话的时间段会在文件中显示为一条直线。

如果你的编辑器允许你选择,你可以在这些安静的区域上使用选择工具,然后只需按删除/剪切键(对我来说,它是键盘上的“后退”键)。我不会为此使用任何花哨的软件。看看免费的 Audacity。看看你用来录制会议的软件,因为它可能也包含这些非常基本的编辑功能。如果你使用的是 Mac,GarageBand 可能已经可供你使用。点击这里查看其他可供跨平台音频编辑器使用的选项。

3.2 解决方案 2

Whisper 出现这样的扭曲相当罕见,但一旦发生,很容易修复。在转录的文本文件经过 Whisper 运行后,查看一下。用视觉检查文本,看看是否有重复的相同单词或短语。当发生这种情况时,在文件中很容易看到。模式就出来了。只需剪下这些并再次运行分析阶段即可。

4、挑战:谁在说话?

当 Whisper 将音频转录为文本时,请查看它生成的文本。你可能会注意到它只是一大块文本。没有段落分隔符。甚至没有换行符!所有文本都排成一行。

这没关系,因为我们对这里的可读性不感兴趣。在这个应用程序中,我们只是将记录输入 AI 进行一些分析。但是,说话者之间没有任何停顿,这有点奇怪。无论是一个人在会议上发言还是五十个人,这块单词每次看起来都一样。只有当我们需要知道谁在什么时候说了什么时,这才会变得奇怪。只要我一直在运行这个软件,我就对 AI 分析步骤能够仅根据它遇到的对话来弄清楚发生了什么印象深刻。然而,有时我发现如果它知道谁说了什么会很好。

4.1 解决方案

我将在这里提供几个链接,但我需要说明的是,我自己还没有测试过这些链接。

首先,有一个开源(免费)解决方案,但设置起来会花一些时间,在计算机上运行也可能需要更长的时间。请查看 Hugging Face 的这个教程,其中介绍了这个确切的场景。该解决方案使用另一个名为 pyannote-audio 的 Python 库。该教程包括一些额外的拼接,以便获得具有不同说话者声音的记录以供分析。

第二个选项是使用 AssemblyAI 提供的服务付费,但这将我们引向了我想在本演示中避免的方向。

5、使用 GPT 模型分析转录文本

现在我们的转录文本已经创建,我们可以运行分析了。这才是真正的价值所在,因为分析提供的见解不仅仅是转录文本中记录的单词。我们工具的主要目的是比较多个生成式 AI 模型的分析输出。

我们能够配置在运行时使用哪个 AI 模型,让我们可以灵活地在 OpenAI 和 Anthropic 的顶级模型之间进行选择。这不仅有助于比较输出,还有助于了解每个模型的优势,当我们还考虑每个模型的成本时,这一点尤其有价值。

5.1 什么是分析?

我鼓励你查看 prompts.py 文件以查看分析所需的确切提示。要求 AI 进行的分析包括:

  • 总结:描述会议背景的几个简短段落。
  • 要点:按重要性从高到低的顺序列出主题,并详细说明每个主题,突出显示会议中讨论的关键行动要点。
  • 行动项目:任何需要跟进的项目。如果你的团队使用票单系统,这将特别有用
  • 关键引言:找出一些确切的短语,强调会议的重点,强调重要的陈述。
  • 情绪分析:这次会议的氛围如何?

对于此示例代码,每个分析提示都是一次一个地提出,独立于其他提示。这意味着 AI 服务会重新考虑每个问题,而不是参考先前提出/提示的问题的上下文。这为我们带来了一些优势。

  • 我们可以在每次提示中传递一份大型会议记录,而不必担心提供超出请求允许大小的会议上下文
  • 让每个分析独立进行提供了一种自检机制——如果摘要摘要说主题 A 很重要,但要点将主题 A 排在列表的第三位,则可能意味着我们需要对输出进行更多的人工分析。
  • 通过一些额外的编程,我们可以让一个 AI 模型对一个提示进行分析,第二个(或第三个)模型根据我们首选的模型对其他提示进行分析,以确定每个响应的准确性或成本。
  • 根据我们想要的分析输出类型,混合搭配现有提示或添加新提示。

正如我们将在下面看到的,来自 AI 模型的响应被组合成一个文档。如果你习惯编辑代码,可以修改每次会议要求的提示集。例如,在每日状态会议中,情绪分析步骤可能有点多,而如果你每周对多个会议进行总结,可能需要进行情绪分析,甚至需要一个新的分析提示,例如涵盖“做出的关键决定”。

5.2 设置

在运行此软件之前,你需要一些东西

  • 一个可以运行 Python 3.9+ 的环境我一直在使用 Python 3.12,没有问题。这是一个命令行工具,没有 GUI
  • OpenAI API 密钥(请参阅 OpenAI 快速入门指南中的“帐户设置”)
  • Anthropic API 密钥(阅读 Anthropic 快速入门指南中的“访问 Claude”)

在系统内使用密钥的最简单方法是将它们导出为环境变量。运行这些命令以注册它们:

export OPENAI_API_KEY=your_openai_api_key
export ANTHROPIC_API_KEY=your_anthropic_api_key

5.3 运行

假设你已将代码下载到你的机器上,并安装了 openai-whisper 或 mlx-whisper 库以及前面描述的 ffmpeg,您就快完成了。只需安装其他几个库。

你需要安装 OpenAI Python API 库,如 pip install openai。你还需要 Anthropic Python API 库,如 pip install anthropic

5.3 音频文件去哪里了?

该项目对于其输出将写入何处有自己的看法。

假设你的音频文件(如 mp3 或 m4a)位于名为 /audio 的文件夹中,则此 python 项目将在名为 /transcript/summary 的对等目录中写入另外两个文件。

我在 github 项目的“示例”文件夹中包含了一个此分析文件结构的示例。简而言之,该结构如下所示:

my-project/
|---- audio/
|     |---- meeting-recording.mp3
|
|---- summary/
|     |---- meeting-recording.openai.md
|     |---- meeting-recording.anthropic.md
|
|---- transcript/
      |---- meeting-recording.txt

5.4 运行时配置

该应用程序设置为一次对一个音频文件和一个生成式 AI 模型运行分析。我们可以像这样运行我们的应用程序,其中“summarizer”参数可以是一个 OpenAI [‘openai’、‘4o’、‘turbo’] 或 Anthropic [‘anthropic’、‘opus’、‘sonnet’] 模型。

python app/main.py --audio-path my-project/audio/meeting-recording.mp3 --summarizer openai

一个重要的功能 — 如果音频转录本已存在于转录本文件夹中,则除非包含 --force-transcribe,否则不会再次运行使用 Whisper 的转录步骤。你还可以将其他一些配置作为参数传递给程序。我在 github 上的 README 文件中对它们进行了更深入的描述。在使用一个分析器(如“openai”)运行该工具后,可以使用“anthropic”再次运行它,以便比较输出差异。

5.5 组装输出文档

转录文件的内容将包含在 AI 服务的分析提示中。这些 AI 调用的输出将作为符合提示中定义的模板样式的文本返回。格式称为 markdown。这种格式很灵活。它允许我们创建一个易于阅读和与他人共享的文档。输出可以单独阅读,或者还有其他工具可以将 markdown 转换为 HTML - 非常适合 wiki 或其他在线文档工具。还有其他工具可以转换为 PDF。我在 github 项目中包含了 markdown 输出文件的示例。

5.6 比较见解

如果你已经运行分析器两次,一次使用“openai”,一次使用“anthropic”,则有两个输出文件可供比较。进行一些比较并查看哪个模型提供了你认为最有价值的见解是有益的。例如,你可能会发现 Anthropic 的模型提供了更丰富、更详细的摘要,而 OpenAI 的模型提供了更快、更具成本效益的结果。

在你考虑将此工具用于未来会议分析时,花在这个早期比较上的时间很重要。为什么你会选择一个模型而不是另一个?我认为这归结为这两个主要因素。

  • 准确性:如果你听过或参加过会议,阅读分析的输出,哪个 AI 提供商最准确地捕获了会议?
  • 成本:Anthropic Opus 模型的成本是 OpenAI 4o 模型的 3 倍。值得额外花费吗?

5.7 真人在环

有时,我会惊讶于人工智能通过这几个简单的提示提供的分析的准确性。通常,它是如此准确,我发现自己想知道它是如何能够如此完美地将一切拼凑在一起的。

但是,也有一些时候,我看到人工智能产生幻觉。

在一个例子中,一个人工智能模型提供了对我和我商业伙伴之间对话的分析。我们当时正在谈论小企业的想法。人工智能分析器给出了我们谈话的要点细节,包括在特拉华州成立 C 公司,这是一个从未讨论过的细节。这个糟糕的分析例子让我印象深刻,因为在我运行这段代码的几周里,这是我见过的唯一真正令人震惊的错误。这让我更加坚信,我们仍处于一个人工智能模型可以做一些非常了不起的事情的时期,但它们并不完美,需要大量的监督。

我看到的另一个常见错误是对请求的输出格式的误解。我采用了一些技巧,让 AI 以特定方式返回格式化的文本,以便将其与其他响应拼接成一份干净的业务文档。但是,即使有关于应该返回和不应该返回的内容的额外说明,仍然偶尔会出现错误。在将文档发送给团队之前,我需要快速扫描它以删除不需要的格式伪像。

5.8 成本估算

OpenAI 和 Anthropic 均根据处理的令牌数量收费。该软件中使用的 Anthropic 模型是他们的旗舰模型“Claude Opus”,他们称该模型是最强大的。Anthropic Claude Opus API 每发送一百万个令牌(提示)收费 15 美元,每返回一百万个令牌(分析)收费 75 美元。另一方面,OpenAI 旗舰模型“GPT-4o”的成本只有后者的三分之一——每发送一百万个 token 收费 5 美元,每返回一百万个 token 收费 15 美元。

Anthropic“Claude 3.5 Sonnet”怎么样?该模型比 Opus 快得多,成本与 GPT-4o 相同。速度和成本的提高是向前迈出的一大步。在我早期的测试中,Opus 的结果仍然优于 3.5 Sonnet,因此本文的其余部分仍将重点放在 Opus 的分析上。幸运的是,您可以通过运行带有“sonnet”作为 --summarizer 选项的应用程序来自己测试这一点。你更喜欢哪个 Anthropic 输出?

我很难理解 token 是什么,更不用说我可能会通过这些堆叠的提示发送或接收多少个 token,尤其是当这些 token 最初是录音时。幸运的是,Anthropic 和 OpenAI 都会在他们的 API 响应中告诉我们我们使用了多少 token。我在应用程序中内置了一个小计算器,它将打印确切的 token 数量。对我们来说,分析的成本。使用我在项目中分享的示例音频文件(1977 年的一场长达一小时的市议会会议)以下是每个供应商的成本明细。

Cost for Anthropic Model claude-3-opus-20240229
 prompt $0.91
 answer $0.12 +
 -------------- 
 TOTAL  $1.03


Cost for OpenAI Model gpt-4o
 prompt $0.28
 answer $0.02 +
 -------------- 
 TOTAL  $0.30

通过将成本估算纳入工作流程,我们可以平衡分析质量和可用预算。例如,如果你发现 Anthropic 提供的结果略好,但成本是 OpenAI 的 3 倍,你可能会选择 OpenAI 执行常规任务,并保留 Anthropic 进行关键分析。但是,就像在这个例子中一样,如果 3 倍的成本意味着只多花 70 美分,如果你发现分析更符合你的喜好,也许额外的花费是值得的。你会选择哪一个?查看 github 项目示例文件夹中 Anthropic(opus 摘要sonnet 摘要)和 OpenAI(gpt-4o 摘要)的输出,看看你是否找到了更合你心意的输出。

6、最后的想法

当我参加专为头脑风暴而设计的会议,或者在看似如此流畅的会议中——从一个话题跳到另一个话题——时,很难记住讨论的所有内容。通常,我在会议期间会错过一些细微差别,这些细微差别可能会丢失。我喜欢做笔记。我的桌面上随时都有多支笔和笔记本。但试图同时做笔记和参与对话几乎是不可能的。当我试图同时倾听和回忆(用笔和纸)时,我的大脑的左半球和右半球会发生冲突。知道会议正在被记录,并且人工智能可以在结束时运行总结和分析任务,让我继续积极参与会议,并专注于正在讨论的主题。我可以停留在当下,让分析稍后再进行。

我希望你觉得这个工具很有用。但我也希望它能证明构建自己的 AI 音频转录和分析工具不仅是可能的,而且可能比从另一个供应商那里购买 SaaS 服务更有益。您可以保留对数据的控制权,灵活地选择所需的分析类型,并能够根据自己的需要在 AI 供应商之间切换。通过利用 OpenAI 和 Anthropic 的 API,你可以创建一个强大的工具,在不花太多钱的情况下提供巨大的价值。通过准确的转录、有见地的分析和明确的成本估算,你将拥有增强企业工具包所需的一切。

你可能想知道,哪种模型最适合这项任务?我偏爱 Anthropic 的 Opus 模型。我希望它的成本不是 3 倍。但是,因为这只是一个几分钱的问题,我发现这是我愿意接受的成本,因为它为我们的会议提供了始终如一的高质量摘要和分析。


原文链接:Build Your Own AI Meeting Transcription and Analysis Tool

汇智网翻译整理,转载请标明出处