创建一个结合 Slack 和 Amazo

使用 Slack 和 Amazon Bedrock 创建生成式 AI 助手

关键要点

  • 本文展示了如何将 Slack 与 AWS 生成式 AI 服务集成,构建自然语言助手,使业务用户能够提问非结构化数据集。
  • 创建的 Slack 助手集成了 Amazon Bedrock 知识库,能够利用 AWS Well-Architected Framework 的知识,并实施安全措施和负责任的 AI。
  • Amazon Bedrock 提供了一系列高性能基础模型,通过单一 API 进行访问,简化了开发过程。
  • Amazon Bedrock 的知识库和 Guardrails 提供了增强的数据生成能力和安全防护,适合各类应用场景。

为了提高客户体验、团队协作与数据整合效率,我们需要构建支持知识型生产力提升的系统。在这篇文章中,我们将向您展示如何将流行的Slack消息服务与服务集成,搭建一个可以处理非结构化数据集查询的自然语言助手。

我们将实现一个支持生成式AI的Slack助手,并集成,借以展示的综合知识,同时通过实施安全保护和责任AI策略。

是一项完全托管的服务,提供来自领先AI公司的高性能基础模型(FMs)选择,例如AI21Labs、Anthropic、Cohere、Meta、Stability AI与Amazon。

AmazonBedrock知识库提供了一个完全托管的增强检索生成(RAG)工作流程,它可以从公司数据源中提取数据,并丰富提示内容,以提供更相关和准确的自然语言查询响应。这使得在产品和服务中整合高级生成AI能力不再需要深厚的机器学习专业知识。

Amazon BedrockGuardrails使您能够实施安全措施,为生成式AI应用程序自定义安全、隐私和真实性保护,确保与负责任的AI政策一致。Guardrails可以帮助防止不当内容、禁用提示注入,并去除敏感信息以保护隐私,从而维护公司品牌和声誉。

本文的内容基础上,我们将在的基础上,添加对AmazonBedrock知识库和Amazon Bedrock Guardrails的集成,通过Bolt for Python库简化Slack消息确认和身份验证的要求。

解决方案概述

在本文提到的GitHub仓库中,我们提供的代码使您能够自动部署Amazon Bedrock知识库、Amazon BedrockGuardrails及所需资源,从而将Amazon Bedrock知识库API集成到使用Bolt for Python库的Slack斜杠命令助手中。

在示例中,我们将AWS Well-Architected Framework的文档导入知识库。然后,我们利用与AmazonBedrock知识库API的集成提供一个能够回答用户关于AWS架构最佳实践问题的Slack助手。您可以用您的企业数据集替换例子文档,例如公司、HR、IT或安全政策,或者设备使用或维护指南。

下图展示了整体解决方案架构。

![解决方案架构](https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2024/11/20/1-ML-16159-sol- 删除)

接下来,我们将详细讨论关键组件。

Slack 集成

Slack集成通过实现,运行在请求处理器功能中。Slack BoltLibrary处理Slack应用程序的身份验证和权限管理,并内置支持异步请求处理。SlackBolt还提供了一份,供在Lambda函数中部署和运行。

增强检索生成

Amazon Bedrock知识库为FMs提供来自您私有数据源的上下文信息,以便RAG提供更相关、准确和定制的响应。

RAG工作流程包括两个关键组件:数据摄取和文本生成。

![RAG工作流程](https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2024/11/20/2-ML-16159-Rag- 删除)

  • 数据摄取工作流程 – 在数据摄取过程中,来自数据源的非结构化数据被分割成多个小块。每个小块由固定字数、段落或单个思想构成的短文本序列。小块被向量化并存储在向量数据库中。Amazon Bedrock知识库支持多种,例如、、Pinecone、Redis Enterprise Cloud和Mongo DB Atlas。在本示例中,我们使用默认的OpenSearch Serverless选项。
  • 文本生成工作流程 – 在源数据被摄取到向量数据库后,我们可以执行语义搜索,基于上下文含义而非简单的字面匹配来查找与用户查询相关的数据块。为完成该过程,用户查询与相关数据块共同呈现给选定的大型语言模型(LLM)以生成自然语言响应。

Amazon Bedrock知识库API

Amazon Bedrock知识库提供了一套完全托管的RAG工作流程,通过两个主要API进行访问:

  • – 此API使用语义搜索检索相关的数据块,您可以在应用逻辑中进一步处理。
  • – 此API完成完整的RAG文本生成工作流程,以返回自然语言响应到人类查询的给定数据集。

本文中的解决方案调用RetrieveAndGenerate API以返回自然语言响应到Slack Bolt集成库。

Amazon Bedrock Guardrails

Amazon Bedrock Guardrails提供了可自定义的额外安全措施,超出FMs提供的内置保护,提供行业中最好的安全功能。

在这个解决方案中,我们配置了Amazon Bedrock Guardrails,实施内容过滤器、敏感信息过滤器及单词过滤器。

内容过滤器帮助检测和过滤有害用户输入及模型生成的输出,涵盖六个类别:提示注入、行为不当、侮辱、仇恨、暴力及性暗示内容。在本方案中,我们使用所有六个内容过滤器类别。

敏感信息过滤器用于检测提示或模型响应中是否存在个人可识别信息(PII)数据。为了适应您的具体情况,您可以通过定义正则表达式(regex)使用自定义的敏感信息过滤器。

在本方案中,我们将敏感信息过滤器配置如下:

  • Email 采取 匿名化 操作
  • Phone 采取 匿名化 操作
  • Name 采取 匿名化 操作
  • Credit_Debit_Card_Number 采取 屏蔽 操作

单词过滤器用于屏蔽输入提示和模型响应中的单词和短语。本方案中,我们启用了AWS提供的脏话过滤器。您也可以根据用例创建自定义单词过滤器。

解决方案操作流程

Slack通过简单的REST API与之接口,通过配置Lambda代理集成,进而与Amazon Bedrock知识库API交互。

该解决方案是通过以下高层步骤部署的:

  1. 创建一个新的Slack应用。
  2. 在Amazon Bedrock中启用第三方模型访问。
  3. 使用(AWS CDK)将Slack与Amazon Bedrock集成。
  4. 将AWS Well-Architected Framework文档导入知识库。

前提条件

要实现此解决方案,您需要以下前提条件:

  • 一个Slack工作区,您有权限创建Slack应用(如果没有Slack工作区,请在注册)。
  • 一个。
  • 对以下AWS服务的访问权限:
  • (IAM)
  • (Amazon S3)

本文假设读者具备以上列出的AWS服务的基本知识。对向量数据库、向量化和RAG有一定理解将是一个加分项,但并非必要。

创建新的Slack应用

登录到您的Slack工作区后,请完成以下步骤:

  1. 导航到您的并创建一个新的应用。

删除)

  1. 在提示时选择 从头开始

![](https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2024/11/20/4-ML-16159-create- 删除)

  1. 提供一个应用名称。本文使用 aws-war-bot
  2. 选择您的工作区并点击 创建应用

删除)

  1. 为您的Slack应用提供权限,点击Slack应用导航栏中的 OAuth & 权限

删除)

  1. 权限 部分的 Bot Token Scopes 下添加以下权限:
  2. calls:write
  3. commands
  4. incoming-webhook

删除)

  1. 为您的工作区安装OAuth令牌 下,选择 **安装到
  2. 在导航栏中选择 设置 ,然后选择 基本信息
  3. 应用凭证 部分,复制 签名秘钥 的值并保存以备后用。

![](https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2024/11/20/10-ML-16159-app- 删除)

在Amazon Bedrock中启用模型访问

完成以下步骤以:

  1. 在Amazon Bedrock控制台中,选择导航栏中的 模型访问
  2. 选择 修改模型访问启用特定模型 (如果这是您第一次在账户中使用Amazon Bedrock)。
  3. 选择您希望用于嵌入和RAG查询响应的模型。在本文中,我们使用 Amazon Titan Text Embeddings V2 作为嵌入模型,Anthropic的Claude Sonnet 3作为 US-EAST-1 AWS 区域的RAG查询模型。
  4. 点击 下一步
  5. 查看模型选择并选择 提交

![](https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2024/11/20/11-ML-16159-model- 删除)

若您未使用 US-EAST-1 区域,所请求的模型可能会有所不同。

访问请求完成后,您将看到选定模型的状态为 访问已授予

![](https://d2908q01vomqb2.cloudfront.net/f1f836cb4ea6efb2a0b1b99f41ad8b103eff4b59/2024/11/20/12-ML-16159-text- 删除)

部署Slack与Amazon Bedrock集成

在本节中,您将把本文提供的伴随代码部署到AWS账户中,这将部署一个API在API Gateway上,一个Lambda函数,以及一个带有OpenSearchServerless的Amazon Bedrock知识库作为向量数据库。

本节需要在本地集成开发环境(IDE)中安装AWS CDK和TypeScript,并且AWS账户必须已经完成引导。如果您尚未完成此操作,请参考。

  1. 从克隆代码:

bash git clone https://github.com/aws-samples/amazon-bedrock-knowledgebase- slackbot.git

  1. 打开 amazon-bedrock-knowledgebase-slackbot 目录,在您喜欢的IDE中打开 lib/amazon-bedrock-knowledgebase-slackbot-stack.ts 文件。
  2. 根据需要更新变量(取决于对RAG查询和嵌入模型的访问和区域支持):

typescript const RAG_MODEL_ID = "anthropic.claude-3-sonnet-20240229-v1:0" const EMBEDDING_MODEL = "amazon.titan-embed-text-v2:0"

  1. 完成所有更新后保存更改。
  2. 在您的代码库根目录下运行命令 npm install
  3. 运行命令 cdk synth 以执行AWS CDK代码的基本验证。这将从AWS CDK堆栈生成CloudFormation模板,可在代码库根目录创建的 cdk.out 目录中查看。
  4. 要部署应用程序堆栈,请运行以下命令,替换生成的令牌和签名秘钥:

bash cdk deploy --context slackBotToken=%slackBotToken% --contextslackSigningSecret=%slackSigningSecret%

AWS CDK将根据CloudFormation模板部署堆栈。您可以在AWS CloudFormation控制台上监控部署的进度。

此外,AWS CDK还将尝试使用默认凭证文件配置,将应用程序堆栈部署到默认账户和区域。如果要更改配置文件,请添加 profile 标志。例如:

bash cdk deploy --profile [my-profile]

部署完成后,您将看到类似下面屏幕截图的输出,提供了刚刚部署的API端点的详细信息。

8

Leave a Reply

Required fields are marked *