亚马逊AWS官方博客
基于 Amazon Bedrock 构建 Slack 图像生成助手 App
引言
在当今的商业环境中,视觉内容变得越来越重要。无论是营销材料、产品演示还是客户交流,引人入胜的图像和视觉效果都可以提高内容的吸引力和影响力。然而,创建高质量的视觉内容通常需要专业的设计技能和昂贵的工具,这对于许多企业来说是一个挑战。
在本文中,我们将介绍如何基于 Amazon Bedrock 托管的 SDXL 基础模型构建一个 Slack 图像生成助手 App。该 Slack App 允许 Slack 用户通过发送文本提示来请求生成图像,并将生成的图像直接发送到 Slack 频道。这不仅为团队提供了一种创建视觉内容的简单方式,而且还可以促进协作和讨论。
Amazon Bedrock 是一项完全托管的基础模型(FM)服务,通过单个 API 提供来自 AI21 Labs、Anthropic、Cohere、Meta、Mistral AI、Stability AI 和 Amazon 等领先人工智能公司的高性能基础模型,以及通过安全性、隐私性和负责任的人工智能构建生成式人工智能应用程序所需的一系列广泛功能。由于 Amazon Bedrock 是无服务器的,因此您无需管理任何基础设施,并且可以使用已经熟悉的 AWS 服务将生成式人工智能功能安全地集成和部署到您的应用程序中。
解决方案概述
在这篇博客中,我们将介绍如何在 AWS Lambda 中部署 Slack 网关服务,用于接收 Slack 消息并使用 Amazon Bedrock 及其托管的 Stability AI SDXL 基础模型生成相应的图像。我们利用了多个 Amazon 云服务来构建一个健壮的解决方案:Secrets Manager 用于安全地存储密钥,DynamoDB 用于防止重复消息处理,S3 Bucket 和 CloudFront 用于存储和分发生成的图像。通过将所有这些服务与 AWS Lambda 结合使用,我们可以构建一个无服务器的、可扩展的应用程序,用于处理 Slack 消息并生成图像。
![]() |
先决条件
可用的亚马逊云科技账户
Amazon Bedrock Stable AI SDXL 基础模型服务已启用
已创建私有的 S3 Bucket 用于存储生成的图像
通过 CloudFront 分发私有 S3 Bucket 中的图像,实现静态内容加速,同时也可以配置 CloudFront 实现 API Gateway 动态加速
创建 Slack App
在 Slack 工作区中创建一个新的 Slack 应用程序,启用 “im:history”、”chat:write” 和 “commands” 作用域,具体步骤如下:
1. 打开 https://api.slack.com/apps/new 并选择”From a manifest”
![]() |
2. 选择要将应用程序安装到的工作区
3. 将以下 yaml 格式的 template 的内容复制到文本框中(在 YAML 选项卡内),然后单击“下一步”
![]() |
4. 查看配置,然后单击“Create”
完成 App 创建后,查看 Signing Secret,接下来会通过 Cloudformation 保存到 Secret Manager 中
![]() |
5. 选择左边栏 OAuth & Permissions,点击 Install to Workspace,然后点击 Allow
![]() |
查看生成的 OAuth Token,接下来会通过 Cloudformation 保存到 Secret Manager 中
![]() |
创建 Amazon 云服务
我们将使用 CloudFormation 来部署所需的 Amazon 云服务,包括 Lambda 函数、API Gateway、Secrets Manager 和 DynamoDB。CloudFormation 模板将自动配置所有必需的资源,简化了部署过程。
点击 Launch Stack 以创建 Cloudformation 堆栈
![]() |
依次填写用于保存 Bedrock SDXL 产生的图片的私有 S3 Bucket、用于分发图片的 Cloudfronnt 分配、Slack App 签名密钥、Slack App OAuth Token,勾选 acknowledge,然后 Create stack
![]() |
Stack 创建完成后,复制 SlackAPIGatewayEndpoint
![]() |
将 SlackAPIGatewayEndpoint 配置为事件订阅的请求 URL,替换模版中的默认值,如果显示 Verified 表示 Slack App 连接 Lambda 函数成功,点击 Save Changes
![]() |
Lambda 函数介绍
Lambda 函数将处理来自 Slack 的事件,调用 Amazon Bedrock 生成图像,并将图像上传到 S3 存储桶。该函数首先验证 Slack 签名以确保请求来自 Slack。然后,它处理 URL 验证挑战或实际的 Slack 消息事件。对于消息事件,它会将客户端消息 ID 和时间戳写入 DynamoDB 表,以防止重复处理。
handle_message 函数提取实际的消息文本,调用 call_bedrock 函数生成图像,并将生成的图像 URL 发送回 Slack 频道。
call_bedrock 函数调用 Amazon Bedrock 服务生成图像,并将生成的图像上传到 S3 存储桶,并返回 CloudFront 分发的图像 URL。
验证 Slack App
现在,您可以在 Slack 频道中发送消息,Lambda 函数将调用 Amazon Bedrock 生成相应的图像,并将图像发送回 Slack 频道。通过@SlackAppName + 提示词的方式向 App 提问,第 1 次使用的时候,需要点击 Invite Them,手机 App 输给效果如下:
![]() |
选择 Invite Them 后,Slack App SDXL 根据提示词输出了图片:
![]() |
总结
通过 Amazon Cloudformation 部署了所需的云服务之后,您需要将 API Gateway 端点配置为 Slack App 的事件订阅 URL。然后,每当 Slack 用户在频道中发送文本提示时,Lambda 函数就会被触发,调用 Bedrock 服务生成相应的图像,并将图像发送回 Slack 频道。通过利用 Amazon Bedrock 以及 Lambda、API Gateway、Secrets Manager 和 DynamoDB 等服务的强大功能,您可以轻松构建一个功能强大的 、基于无服务器架构的、Slack 图像生成助手 App。这不仅可以提高团队的工作效率,还可以激发创造力,促进更好的协作和沟通。
*前述特定亚马逊云科技生成式人工智能相关的服务仅在亚马逊云科技海外区域可用,亚马逊云科技中国仅为帮助您了解行业前沿技术和发展海外业务选择推介该服务。
参考资料
Slack Quickstart: Send a mesage
Invoke Stable Diffusion XL on Amazon Bedrock to generate an image