提高生产力:利用 AWS Gen AI 在几秒钟内总结会议笔记
原文towardsdatascience.com/scale-your-productivity-leveraging-aws-gen-ai-to-summarize-meeting-notes-in-seconds-31f348879dc2https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/807c9ad6957e0668b0bd7f50a53ae5f7.png使用 DALL-E 生成的图像免责声明本文中使用的会议记录完全是虚构的仅用于说明和教育目的。它不反映任何实际的对话、事件或个人。任何与实际个人或事件的相似之处纯属巧合。免责声明本文中概述的项目涉及使用多个亚马逊网络服务AWS特别是亚马逊 S3、亚马逊 API 网关、AWS Lambda 和亚马逊 Bedrock。虽然 AWS 提供免费层可以有限地访问其部分服务但超出这些限制或使用免费层未涵盖的服务将产生费用。了解亚马逊 S3、亚马逊 API 网关、AWS Lambda、亚马逊 Bedrock 以及你计划使用的任何其他 AWS 服务的定价细节至关重要。你将负责在遵循此项目过程中产生的任何费用。请确保你清楚地了解 AWS 定价并监控你的使用情况以避免意外费用。简介你是否曾在工作中遇到过看似重复甚至近乎无意义的会议对于大多数在商业环境中的人来说答案无疑是肯定的。我每周至少会参加一次这样的会议。有些周我的日程表几乎被填满几乎没有时间完成任务。最终我开始在静音状态下工作。偶尔我会错过与我相关的重要信息所以我不得不再次全神贯注。这可能会非常令人沮丧因为在整整一个小时里可能只有几秒钟的对话与你相关。随着生成式 AI 应用的兴起我再也不用担心再次遇到这些情况了在这篇文章中我将向读者介绍如何利用 AWS Bedrock、AWS Lambda、AWS API Gateway 和 AWS S3 构建一个可扩展的管道利用生成式 AI 服务来总结会议记录。为什么选择 AWS假设你已经熟悉了像 ChatGPT 这样的生成式 AI 应用。为什么还要使用 AWS当你可以直接将会议记录复制粘贴到 ChatGPT 并在几秒钟内生成摘要时此外一些应用已经可以做到这一点如果你桌面没有的话你也可以添加。这样做的原因有很多但我将重点介绍其中两个最重要的可扩展性和安全性。可扩展性作为云平台AWS 允许用户、企业、实体等大规模构建应用程序和存储数据。对于本文中讨论的使用案例AWS 中的会议记录摘要应用程序可以扩展到拥有几乎无限数量的最终用户一个内部管道从会议记录的来源直接连接到 AWS并优化存储成本和容量。此外您还可以自定义提示、输出令牌以及许多其他参数。安全性之前我提到过可以使用 ChatGPT 通过复制粘贴会议记录来生成摘要这将违反许多安全最佳实践如果关键数据泄露您在某些情况下甚至可能负有责任。使用 AWS可以设置必要的权限和防护措施以便可以充分利用生成式 AI 应用程序而无需担心内部公司数据穿越公共网络。现在不再多言让我们直接进入这个项目。第一部分创建 S3 存储桶我们将首先创建我们的 S3 存储桶。S3 是 AWS 提供的一种对象存储服务允许用户快速且大规模地存储数据。它还可以与 AWS 的许多其他服务和第三方应用程序集成。要导航到 S3在搜索栏中搜索它点击它旁边的服务菜单或者如果您之前使用过它可以在最近访问的部分找到它。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/011c150cc1b1cbc9eceaa12905222942.png作者提供的图片一旦您进入 S3 页面点击创建存储桶。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/3cae4c71e5839b170b6fe343127adbcb.png作者提供的图片给您的存储桶命名并保持所有其他选项不变。如您在上面的截图中所见我给我的存储桶命名为bedrock-text-summarization。请注意所有存储桶名称必须是全局唯一的这意味着在任何 AWS 账户中两个存储桶都不能有相同的名称。第二部分创建 boto3 层就本文撰写时的情况而言AWS Lambda 没有最新的 boto3 版本这是 Python 的 AWS SDK。因此我们必须创建一个 boto3 层并将其上传到 AWS。这确保了我们拥有调用 AWS Bedrock 所需的正确库。这个过程相对简单然而如果您从未使用过 Windows 命令提示符这个过程可能需要一些时间。请注意以下命令在 Linux 系统上无法使用。要开始打开您的 Windows 命令提示符并逐个运行以下命令。如果您是第一次这样做安装 boto3 包可能需要一些时间。## Make a new directory for your boto3 layermkdir boto3_layer## Set it as the primary directorycd boto3_layer## make a directory called pythonmkdir python## Create a virtual environment within the python directorypython3-m venv venv## Activate the virtual environmentvenv/bin/activate## install boto3 to the environmentpip install boto3-t./python## deactive the virtual environmentdeactivate一旦完成我选择手动按照以下步骤压缩 Python 文件打开文件资源管理器并导航到包含您想要压缩的文件夹的目录在本例中是 boto3_layer 中创建的 python 文件夹。右键点击您想要压缩的 python 文件夹。从上下文菜单中选择*“发送到”*。点击压缩zipped文件夹一旦有了压缩文件夹导航到 Lambda 主页并点击左侧菜单中的层。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1b035f73bfb8b903f080a421f81cb192.png作者提供的图片从现在开始您必须命名您的层并上传您的压缩文件夹。同时请确保您选择了适当的兼容运行时。在这种情况下我将选择 Python 的最新版本然而如果您计划在脚本中包含来自 Python 早期版本的库/函数等您还必须确保这些也已启用。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1a0063cf5d3d0b8936ba2a3e9a7a8861.png作者提供的图片第三部分请求 Bedrock 访问权限Bedrock 是 AWS 中的一个独特服务。简单来说它是一个 API允许用户连接到许多领先 AI 公司的许多基础模型。要使用这些模型中的任何一个您都需要请求访问权限。导航到 Bedrock 主页面并在左下角选择模型访问https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/afaef30de7f684a9fd8d6f7a4263e021.png作者提供的图片一旦进入模型访问页面您必须点击您想要访问的具体模型。在这个项目中我们使用 Anthropic 的Claude。导航到这个部分您应该在每个 Anthropic 提供的方案旁边看到一个链接上面写着*可请求的.*请注意在我下面的屏幕截图中我已经有了访问权限所以您的屏幕可能看起来不一样。点击这个链接并完成必要的步骤。实际的批准过程应该只需几分钟。我建议阅读您使用的任何模型的文档和定价。就我们的目的而言以及撰写本文时我们将使用的 Claude 版本每 1,000 个输入令牌收费 0.008 美元每 1,000 个输出令牌收费 0.024 美元。我们的整个工作流程对于单次使用最多只需花费几美分但请注意如果不加注意任何重复使用都可能迅速增加成本。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/156305d76e101e22bf663a6443cec761.png作者提供的图片第四部分创建 Lambda 函数AWS Lambda 是 AWS 提供的一种无服务器计算服务。它与 AWS 的许多其他服务集成。我认为它是 AWS 的集中式编排工具。例如每当有新数据上传到特定的 AWS S3 存储桶一种云存储服务时您可以配置一个 Lambda 函数将训练作业发送到 AWS SageMaker一种机器学习训练和模型托管服务以启动模型训练作业。这只是 AWS Lambda 无数可能性中的一个。对于这个项目我们将使用 Lambda 将会议摘要转录本作为提示发送给 AWS Bedrock这将生成会议摘要和分配给特定利益相关者的后续行动。Lambda 然后将此生成的摘要发送到我们之前创建的 S3 桶。我将在本节末尾发布完整的 Lambda 函数代码。首先导航到 Lambda 函数页面并点击函数。从那里您只需要命名您的函数并选择必要的运行时在我们的情况下将是 Python 的最新版本。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/a5213e160a088b731d51586b3bdf34fc.png由作者提供的图片您的屏幕现在应该看起来像下面的图片https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/de448230a880c4f085b559df0621bc86.png由作者提供的图片接下来我们将添加我们的 boto3 层。导航到页面底部以查看层部分。点击添加层。这将带您到以下页面https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7d46b1576be0658a58dca43a07894b39.png由作者提供的图片从这里选择自定义层并选择我们上传的 boto3 层。您还将看到一个指定版本的另一个下拉菜单选择1然后点击添加按钮。现在我们已经添加了我们的层您可以导航到代码源窗口开始编写我们的函数。我将在文章末尾链接一个包含完整 Lambda 函数的 GitHub gist然而我将在下面逐步分解它。具有讽刺意味的是我们的 Lambda 函数将结合一系列较小的函数来编排我们的完整工作流程。我们的第一个函数将从我们的文档中提取纯文本。换句话说任何可读文本都将从文档中提取。这是必要的因为文档可能充满了我们不一定需要的噪声。defextract_text_from_multipart(data):msgmessage_from_bytes(data)text_contentifmsg.is_multipart():forpartinmsg.walk():ifpart.get_content_type()text/plain:text_contentpart.get_payload(decodeTrue).decode(utf-8)nelse:ifmsg.get_content_type()text/plain:text_contentmsg.get_payload(decodeTrue).decode(utf-8)returntext_content.strip()iftext_contentelseNone接下来我们将创建一个函数来发送文本和提示以调用 AWS Bedrock。对于实际模型我们将使用 Anthropic 的 Claude V2。请注意您可以轻松编辑提示文本以适应您的特定需求。注意字典body。这是我们指定我们调用的 AI 模型的参数的地方。对这些参数不熟悉不用担心我将在下面进行分解_max_tokens_to_sample*这是应用程序将采样的最大令牌数或者更实际地说模型将读取的最大单个单词和/或数字的数量。_topk对于模型生成的每个令牌它考虑一个最有可能的“下一个”令牌的列表。较低的值将缩小令牌的选择池而较高的值将允许模型考虑更广泛的选择池。_topp与 top_k 非常相似然而它使用概率分布逻辑。例如如果我们选择 0.1模型将考虑最有可能的 10% 的令牌。_ 停止序列*本质上是一个模型的停止点。如果模型遇到您指定的序列它将在该序列之后停止生成。您还可以查看正式文档这里defgenerate_summary_from_bedrock(content:str)-str:prompt_textfHuman: Summarize the following meeting transcript and list the specific follow up actions along with who should take those actions:{content}Assistant:body{prompt:prompt_text,max_tokens_to_sample:5000,top_k:250,top_p:0.2,stop_sequences:[nnHuman:]}try:bedrockboto3.client(bedrock-runtime,region_nameus-east-1,configbotocore.config.Config(read_timeout300,retries{max_attempts:3}))responsebedrock.invoke_model(bodyjson.dumps(body),modelIdanthropic.claude-v2:1)response_contentresponse.get(body).read().decode(utf-8)response_datajson.loads(response_content)summaryresponse_data[completion].strip()returnsummaryexceptExceptionase:print(fError generating the summary:{e})return我们调用的模型响应需要一个位置来发送会议摘要。因此我们将构建一个函数将其发送到 S3 存储桶。## Saves the output to a given S3 bucketdefsave_summary_to_s3_bucket(summary,s3_bucket,s3_key):s3boto3.client(s3)try:s3.put_object(Buckets3_bucket,Keys3_key,Bodysummary)print(Summary saved to s3)exceptExceptionase:print(Error when saving the summary to s3)最后我们将创建我们的Lambda 处理器函数这将是我们的 Lambda 函数的核心。Lambda 处理器在 Lambda 函数被调用时充当入口点因此我们将利用我们在处理器中创建的所有函数。deflambda_handler(event,context):decoded_bodybase64.b64decode(event[body])text_contentextract_text_from_multipart(decoded_body)ifnottext_content:return{statusCode:400,body:json.dumps(Failed to extract content)}summarygenerate_summary_from_bedrock(text_content)ifsummary:current_timedatetime.now().strftime(%H%M%S)#UTC TIME, NOT NECCESSARILY YOUR TIMEZONEs3_keyfsummary-output/{current_time}.txts3_bucketbedrock-text-summarizationsave_summary_to_s3_bucket(summary,s3_bucket,s3_key)else:print(No summary was generated)return{statusCode:200,body:json.dumps(Summary generation finished)}我们的功能可能已经完成然而我们必须进行一些小的配置。当我们调用我们的基础模型时它可能需要几秒钟甚至可能需要一分钟才能生成摘要这取决于我们发送给它的转录本的大小。因此我们将 Lambda 函数的超时时间设置为最多四分钟以确保我们的函数不会超时。为此导航到底部的配置菜单点击左侧的常规配置然后在窗口中点击编辑。之后你应该会看到一个像下面的屏幕。确保超时设置为四分钟。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c36246650e133bc915186a7152302563.png作者提供的图片第五部分创建 API如 AWS API Gateway 主页 上所述我们将在这里为我们的会议转录本摘要生成器构建前门。使用 API Gateway我们将构建一个具有 POST 方法的 API允许我们向 Lambda 函数发送数据。首先导航到 AWS API Gateway 主页并点击创建 API。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/141758f2c97492d474e64861f1853a13.png作者提供的图片接下来在HTTP API窗口中点击 ****构建因为这种类型的 API 将非常适合我们的特定用例。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/2cdb78eb93fb1f117c6661baae67bf7b.png作者提供的图片给它起一个名字然后点击下一步。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e37d3c98b5705d1a471ff3244710e99b.png作者提供的图片继续点击下一步直到你到达审查和创建页面。点击创建。你现在应该在第路由页面它应该看起来像下面这样。在左侧窗口中点击创建。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/bc3063652dee005c9ec6b7f55922e49b.png作者提供的图片这是我们创建 POST 路由的地方允许我们使用 API 向我们的应用程序发送数据。从下拉菜单中选择 POST 并给它起一个名字。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/f200ae473a540b051d1e585286ea8138.png作者提供的图片你现在应该回到了路由页面。点击右上角的部署。将出现一个类似于下面的弹出窗口。点击创建新阶段它以蓝色突出显示。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/014fd07090966853dd470458bedc5908.png作者提供的图片这是我们将创建我们的开发阶段的地方。请注意我们不一定需要执行此步骤这只是一个实际项目。然而在开发周期中为应用程序部署设置不同的阶段是一种良好的实践。这些阶段在应用程序面向客户之前充当检查和平衡系统。将此阶段命名为*dev或你喜欢的任何名称*并确保自动部署未启用。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/60f2b9d4d49d35ef38999cc0a54a06f1.png作者提供的图片在创建开发阶段之后我们还没有完成。你应该在阶段页面。在点击部署之前我们还需要集成我们的 Lambda 函数。点击左侧窗口中的集成。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7e0a7e1109103a9f1d5fb22a047a7774.png作者提供的图片点击POST然后点击创建并附加集成。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/769f44d7017896920b7e09b74f2f0811.png作者提供的图片在集成类型下选择Lambda 函数并在下一个下拉菜单中选择我们的 Lambda 函数。确保 AWS 区域与您的 Lambda 函数相同否则在调用 API 时您将遇到错误。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/cb8d43dc40f9482646549f71ecc76b86.png作者提供的图片现在点击右上角的部署并在弹出的窗口中选择dev。此时API 已经正式部署并有一个我们可以调用的 URL。点击左侧菜单中开发部分上方的链接它将带您到我们可以找到调用 URL的页面。请注意这些 URL 是活动的所以任何人如果有了 URL 就可以使用它们我们没有添加任何需要附加的权限/令牌因此我在发布这篇文章之前删除了我的 URL。话虽如此我敦促谨慎因为它调用的服务可能会产生费用。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8031fb756b0e42c05a62d762cca88168.png作者提供的图片第六部分整合一切现在是简单而令人兴奋的部分是时候将我们的项目付诸实践了。我们只需一个 API 调用就能得到会议摘要。为了调用我们的应用程序我们将利用Postman。请注意我们可以使用许多技术来调用我们的 API但我发现 Postman 对我们来说是最实用的。这可能在现实世界中通过一个无缝集成到您公司会议软件的前端应用程序来完成。在 Postman 主页上点击Workspaces并创建一个新的工作区。当您看到以下下拉窗口时选择HTTP。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/cbf54de7557ef72745858f5c21d67b34.png作者提供的图片您现在应该看到一个看起来像以下图片的窗口。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/d864ec4cc67c302c192e12b76cb60974.png作者提供的图片我们通过 API 发送数据因此我们必须选择旁边的GET下拉菜单并将其更改为POST。要获取我们的 API URL返回我们创建开发阶段 API 后到达的页面。复制并粘贴我们的开发阶段的调用 URL并将其粘贴到 Postman 工作区的POST旁边。以下截图供您参考如何获取我们的 URLhttps://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8031fb756b0e42c05a62d762cca88168.png作者提供的图片除了复制粘贴我们的 API 之外我们还需要添加我们之前创建的会议摘要路由。将/meeting-summary 添加到 Postman 工作区 URL 的末尾。以下截图供您参考https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e6ef85b61b7bc50dc28530dd548df972.png作者提供的图片接下来点击Body然后选择form-data。在Key下方键入document然后在您键入document的右侧下拉菜单中选择file。这就是您上传会议记录的地方。对于这个项目我决定找点乐子让 Chat GPT 生成了一份关于一家 AI 公司及其 Gen AI 应用变得自我意识的虚假会议记录。以下是发送前我们的 Postman 工作区应该看起来像什么以及我们发送的记录的简要预览https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/66d8d2022116258bc313880e7f8ca0c1.png作者提供的图片https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1528b5b892a52753c6cc541502b42e77.png作者提供的图片现在是时候点击*Send!*了。如果我们的应用程序成功我们应该在 Postman 下看到以下响应https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/58e1a568b0aed959417944907473bc8c.png作者提供的图片关于调试我们的 Lambda 函数的注意事项当我最初构建这个应用程序时我的第一次运行不成功。您的第一次尝试可能也会失败所以如果这种情况发生请不要担心。我还没有遇到过一位在第一次测试运行中就成功构建了模型、产品、应用程序等开发者的数据科学家。如果有问题它很可能会在我们的 Lambda 函数中暴露出来。要调试这个问题导航到 AWS Cloudwatch点击日志组然后点击我们的 Lambda 函数。导航到日志流部分它将显示我们 Lambda 函数任何运行的响应。这就是错误处理派上用场的地方。我在第一次运行中遇到的一些问题包括代码中的小错误以及 API、Lambda 和 S3 之间的区域不匹配。如果你有任何问题它们可能与我的不同然而这些可能是一些好的起点来关注。以下为参考截图https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/a5f882e0694084e86e820c8e834c8bea.png作者提供的图片一旦你成功运行了应用程序你应该在你的 S3 桶中有一个 txt 文件。导航到 S3选择我们最初创建的桶然后点击到新生成的文件。选择下载并查看输出以下是我的参考输出https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/711f1e07ba12f9221493d8613d72e5d0.png作者提供的图片太令人印象深刻了你不这么认为吗几秒钟内应用程序就生成了摘要和具体的后续行动并分配了关键利益相关者。我意识到这是一份伪造的会议记录但想象一下如果有一个这样的应用程序在规模上可以节省多少时间。结论我必须向 Patrik Szepesi 和他的 Udemy 课程 致以崇高的敬意该课程讲述了 AWS 中的生成式 AI这激发了我进行这个项目和撰写这篇文章的灵感。它也激发我开始着手一些个人用例我希望这篇文章能鼓励读者也这样做希望你在 AI 工程之旅中觉得这篇文章的内容很有价值。如果你有任何问题或想给我反馈请随时留言完整的 Lambda 函数
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2488136.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!