IBM Cloud Docs
构建数据库驱动的 Slack 机器人

构建数据库驱动的 Slack 机器人

本教程可能会发生成本。 使用“成本估算器”根据您的预计使用量生成成本估算。

在本教程中,您将构建一个 Slackbot,该 Slackbot 允许在后端 IBM Db2 SaaS 数据库中搜索和创建条目。 Slack 机器人由 IBM® watsonx™ Assistant 服务提供支持。 您将使用 Assistant 集成来集成 Slack 和 IBM® watsonx™ Assistant。IBM Db2 SaaS 可作为定制扩展提供给 watsonx Assistant。

Slack 集成会在 Slack 和watsonx Assistant 之间发送信息。 使用 Python 编写并部署为无服务器 Code Engine 应用程序的定制扩展会针对数据库后端公开 REST API。

目标

  • 使用与数据库后端交互的 watsonx Assistant 构建聊天机器人
  • 使用集成将 watsonx Assistant 连接到 Slack
  • 创建 Python 数据库应用程序并将其部署到 Code Engine
  • 通过 watsonx Assistant 定制扩展访问 IBM Db2 SaaS 数据库

架构*" caption-side="bottom"}{: caption="*

  1. 用户通过 Slack 或使用 Web 聊天客户端与 IBM® watsonx™ Assistant 进行交互
  2. 聊天机器人利用在 Code Engine 上部署为 Python 应用程序的 REST API 的定制扩展
  3. 定制扩展应用程序从 IBM Db2 SaaS 数据库中检索数据并将数据插入其中

准备工作

本教程需要:

  • IBM Cloud CLI,
    • Code Engine 插件,
  • git 以克隆源代码存储库,
  • jq,用于查询 JSON 数据。

要避免安装这些工具,可以从 IBM Cloud 控制台使用 Cloud Shell

您将在 教程入门 指南中找到有关为您的操作环境下载和安装这些工具的指示信息。

设置服务和部署后端

在本节中,您将设置所需的服务并部署后台应用程序。 所有这些都可以通过终端中的命令行界面 (CLI) 来完成。

  1. 克隆 GitHub仓库,并导航至克隆目录:

    git clone https://github.com/IBM-Cloud/slack-chatbot-database-watson
    cd slack-chatbot-database-watson
    
  2. 如果尚未登录,请使用 ibmcloud loginibmcloud login --sso 以交互方式登录。 确保针对地区和资源小组开展工作。 此资源组将用于创建服务和操作。 可以使用 ibmcloud resource groups 来列出可用资源组。

    ibmcloud target -r <region> -g <resource group>
    

    使用 ibmcloud target -g default 可切换到缺省资源组。

  3. 创建 IBM Db2 SaaS 实例并将其命名为 eventDB。 将区域 us-south 调整为您所在的区域,例如 eu-de

    ibmcloud resource service-instance-create eventDB dashdb-for-transactions free us-south
    

    您还可以使用除免费(轻量)套餐以外的套餐。 免费套餐在所有位置都不可用。 等待服务开通。 请参阅以上命令的输出以获取指示信息。 您还可以运行下一个命令来检查状态:

    ibmcloud resource service-instance eventDB
    
  4. 要在以后从 Code Engine 应用程序访问数据库服务,它需要正确的授权。 因此,请创建服务凭证,并将其标注为 slackbotkey

    ibmcloud resource service-key-create slackbotkey Manager --instance-name eventDB --output json > slackbotkey.json
    

    slackbotkey.json 文件包含也称为 service credentialsservice key。 此明文文件包含 eventDB 服务实例的管理密码和连接字符串。

    输出存储在文件 slackbotkey.json 中,此步骤需要输出。 运行以下命令以抽取数据库连接 URL:

    jq -r '.credentials.connection.db2 | "ibm_db_sa://" + (.authentication.username + ":" + .authentication.password + "@" + .hosts[0].hostname + ":" + (.hosts[0].port | tostring) + "/" + .database + "?Security=SSL;")' slackbotkey.json
    

    它将被引用为 $DB2_URI,并且可以存储在 shell 变量中 (如果在工作站或云 shell 上受支持),并在您以本地方式运行应用程序时导出。

     export DB2_URI=$(jq -r '.credentials.connection.db2 | "ibm_db_sa://" + (.authentication.username + ":" + .authentication.password + "@" + .hosts[0].hostname + ":" + (.hosts[0].port | tostring) + "/" + .database + "?Security=SSL;")' slackbotkey.json)
     echo $DB2_URI
    

    输出应采用以下格式: ibm_db_sa://username:password@database-hostname:port/bludb?Security=SSL; 并且位于 shell 变量 DB2_URI中。

  5. 创建 watsonx Assistant 服务实例。 使用 eventAssistant 作为名称,并使用免费的 Lite 计划。 将 us-south 调整为您所在的位置。

    ibmcloud resource service-instance-create eventAssistant conversation free us-south
    
  6. 将具有定制扩展的预构建容器映像部署为 Code Engine 应用程序。 首先,创建项目:

    ibmcloud ce project create --name slackbot
    

    然后选择项目作为活动项目:

    ibmcloud ce project select --name slackbot
    

    然后,部署将其命名为 slackbot-backend 的应用程序。 替换 API_TOKEN (MY_secret) 的值。 如果您希望在将来的所有步骤中进行替换,请将您自己的文本用于 MY_secret。 它用于保护对 REST API 的调用。

    ibmcloud ce app create --name slackbot-backend --image icr.io/solution-tutorials/tutorial-slack-chatbot-database:latest --min-scale 1 -e API_TOKEN=MY_SECRET -e DB2_URI="$DB2_URI"
    

    记下应用程序的报告 URI。 在后续步骤中,会将其作为 $APP_URL 引用。 可以使用 shell 变量:

    APP_URL=$(ibmcloud ce app get -n slackbot-backend --output json | jq -r .status.url)
    echo $APP_URL
    

    您还可以根据提供的代码来构建和部署自己的映像,而不是部署预先构建的容器映像。 您可以使用在存储库中找到的 Dockerfile 来修改要从源 ibmcloud ce app create --name slackbot-backend --build-source . --min-scale 1 -e API_TOKEN=MY_SECRET -e DB2_URI="$DB2_URI" 构建的 create 命令。 请参阅有关 从本地源代码部署应用程序 的 Code Engine 文档,以获取更多详细信息。 由于您使用的不是公共容器映像,而是您自己的容器映像,因此还需要设置 注册表私钥

  7. 通过调用应用程序提供的 REST API 来 (重新) 创建数据库模式并插入少量样本记录来测试部署。

    curl -X 'POST' "$APP_URL/database/recreate" -H 'accept: application/json' -H 'API_TOKEN: MY_SECRET'
    

    上述请求应返回确认缺失的错误消息。 现在,请使用查询参数重试:

    curl -X 'POST' "$APP_URL/database/recreate?confirmation=True" -H 'accept: application/json' -H 'API_TOKEN: MY_SECRET'
    

    请求应成功并指示已重新创建数据库。 另一个测试的时间:

    curl -X 'GET' "$APP_URL/events" -H 'accept: application/json' -H 'API_TOKEN: MY_SECRET'
    
  8. 请注意项目标识,在未来的步骤中将需要该标识。

    ibmcloud ce app get -n slackbot-backend --output json |  jq -r .metadata.namespace
    

创建助手

在教程的这一部分中,您将使用 watsonx Assistant 服务。 首先,创建新的助手。 然后,创建定制扩展并将其添加到助手。 此后,您将创建操作并使用 Web 预览对其进行测试。 最后,您将聊天机器人与 Slack 集成,并执行更多测试。

  1. IBM Cloud 资源列表中,打开服务概述。 在 AI/ Machine Learning 部分下找到 watsonx Assistant 服务的实例。 点击其条目可打开服务详情。

  2. 单击启动 Watson Assistant 以访问 watsonx Assistant 工具。

  3. 在欢迎对话框中,使用 slackbot 作为 Assistant 名称来创建新助手,然后单击 下一步 以开始个性化。

  4. 对于部署选取 Web 上的第一个问题。

  5. 对于您的角色或 其他 / 此时不确定的其他问题答案。

  6. 如果需要,请单击 下一步 以定制交谈 UI。

  7. 单击 下一步,然后通过单击 创建完成。

    如果您是 watsonx Assistant的新用户,那么新页面包含您可能想要完成的引导式教程。

添加和配置定制扩展

接下来,您将添加并配置对 watsonx Assistant 和新创建的助手的定制扩展。

  1. 在左下方的仪表板中,单击 集成,然后单击 扩展下的 构建定制扩展
  2. 在多步骤对话框中,单击 下一步,然后输入 events 作为 扩展名称,输入 API for events database 作为 扩展描述。 单击下一步
  3. 选择并上载本地文件 slackbot-openapi-spec.json,然后单击 下一步
  4. 最后一个步骤允许您查看包含服务器和操作的扩展。 完成后,单击 完成
  5. 返回到“集成”页面上的“扩展”部分中的新 事件 磁贴。 单击该磁贴上的 添加 以配置助手的扩展。
  6. 新对话框以简短概述开头。 单击“下一步”进入实际配置。 在 认证类型 的下拉列表中,选择 API 密钥认证,然后输入您选择的 API 密钥 (MY_secret T 替换)。
  7. 对于 服务器变量,请使用部署 区域slackbot-backend 作为 appname,以及应用程序的 Code Engine projectid。 此后,生成的 URL 应与 Code Engine 应用程序的 URL 匹配。 完成后,单击 下一步 以转至复审页面,然后单击 完成关闭 以返回到“集成”页面。

创建第一个操作

首先,您将创建一个操作,以检索有关由其名称标识的单个事件的信息。

  1. 在左上方,单击 操作创建操作上的欢迎页面。

  2. 单击 从头开始 磁贴。

  3. 在“新建操作”对话框中,输入 show me event details 作为示例,然后单击 保存

  4. 下一个屏幕显示打开了 步骤 1 的操作的步骤编辑器。 在 助手 中,输入 什么是事件名称?。 然后,对于 定义客户响应,选择 自由文本 作为选项。 将 然后 保留为 继续执行下一步

  5. 单击左下方的 新建步骤 以添加 步骤 2。 使第一部分 (助手说定义客户响应) 保持不变,但在 选择 使用扩展。 在下拉列表中,选取 events 扩展及其 Event record by name 操作。 此后,参数 将显示可能的输入。 通过使用下拉列表,将 Set short_name 分配给值 **操作步骤变量 > 1。 活动名称是什么 它是指上一步的客户输入。 单击 应用 以完成此步骤。

  6. 添加 新步骤。 在顶部更改选择,以便 步骤 3 采用了条件。 在 条件If 下,选择 2 Ran success。 它引用了在步骤 2 中使用扩展的结果。

  7. 助手说下,您可以通过引用已部署应用程序的 API 调用的输出字段来编写包含事件详细信息的答案。 使用 I get these event details: 后跟 Enter 键以进入下一行。 编辑器支持 Markdown 格式。 因此,请使用 - 键来创建项目符号列表。 添加具有 名称: 的列表项,然后单击 插入变量 图标。 从下拉列表中选择 2 body.shortname。 再次使用 Enter 键以获取包含列表项的新行。 从变量下拉列表中添加 Location: with 2 body.location。 重复 开始结束联系。 完成后,将 然后 设置为 结束操作

  8. 要处理扩展中的错误,请创建另一个具有条件的步骤。 现在,让该步骤对 2 Ran 成功false 作出反应。 让助手说 对不起,有问题,然后再次结束操作。

    为了简单起见,并非所有错误和条件 (如空结果) 都得到处理。

  9. 单击右上方的 保存 图标,然后单击旁边的 X 以关闭步骤编辑器。

  10. 在右下角选择 预览 以测试对话框。

  11. 在交谈中,输入 show me event details 并提交。 机器人应响应 什么是事件名称?。 现在,输入 Think 并提交。 由于后端应用程序使用通配符搜索,因此它应该查找名为 Think 2022 的样本事件并返回详细信息 (请参阅下面的截屏)。

显示事件详细信息的交谈预览
显示事件详细信息的预览

您可以单击 检查 以查看有关如何使用定制扩展的详细信息。 您可以检查输入和输出变量以及如何调用扩展的 API 函数。

用于收集数据和插入新记录的操作

类似于检索记录,可以收集有关事件的输入并通过定制扩展添加该数据。

  1. 切换到 操作由您创建。 单击新建操作

  2. 单击 从头开始 磁贴。

  3. 在“新建操作”对话框中,输入 add new eventSave

  4. 使用 How do you want to name 该事件? for Assistant 说明。 客户再次以 自由文本 进行响应。

  5. 添加 新步骤,并让助手显示 事件在何处?。 同样,客户可以使用 自由文本进行响应。

  6. 添加另一个步骤并询问 事件何时开始?,但使用 日期定义客户响应

  7. 重复 事件何时结束?

  8. 最后,在新步骤中,询问 什么是事件的 URL (Web 地址)?,并让客户使用 自由文本进行响应。

  9. 现在,要确认输入,请创建一个新步骤。 使用 这是正确的吗?,并且作为项目符号列表显示收集的数据。 为 名称位置开始结束联系人 添加项,并使用与数据的输入步骤相关的操作变量 (请参阅下面的截屏)。 使用 确认 作为客户响应类型。

    确认步骤
    确认步骤

  10. 添加一个新步骤,条件是先前确认为 。 助手可以说 好,让我们从头开始。 将 然后 设置为 重新询问先前步骤,并选择所有先前步骤。

  11. 在新步骤 (应该是步骤 8) 中,对确认为 作出反应。 在 然后 下,选择 使用扩展。 使用 插入新事件记录 作为操作来配置事件扩展。 将参数与步骤的“操作”变量相匹配,例如,将 shortname1 相匹配。 您想如何为活动命名

  12. 创建条件为 8 Ran success 为 true 的新步骤。 让助手说 已创建标识为 VARIABLE 的新记录。 对于 VARIABLE,请从 事件 (步骤 8) 中选择 8 body.eid。 结束 然后下的操作。

  13. 创建一个新步骤,其中 8 Ran success 的条件为 false。 使用类似 似乎在创建新事件记录时出现问题 之类的内容,以便助手在 然后下说并结束操作。 使用右上方的图标保存并关闭操作。

  14. 保存该操作,然后通过单击左侧的 预览 并使用 webchat 来测试新操作。 输入 add new event 并提交。 在机器人提示时,输入 my conference 作为名称,输入 home office 作为位置,选取开始日期和结束日期,并使用 http://localhost 作为 URL。 然后,确认数据是否正确。

创建聊天机器人时,您可能希望 发布聊天机器人。 它是版本的受控发行版,允许回滚更改并继续开发,而不会影响聊天机器人与真实客户的交互。

与 Slack 集成

现在,您将使用 Slack 集成聊天机器人。

  1. 在左下方,单击 集成
  2. 在集成概述的“通道”部分中,找到 Slack,然后单击 添加
  3. 请按步骤说明将聊天机器人的 Draft 环境与 Slack 整合。 有关此操作的更多信息可在与 Slack 集成主题中获取。
  4. 完成后,打开 Slack 工作空间。 开始与机器人直接交谈,并显示 向我显示事件详细信息。 然后,与上面类似,在提示输入事件名称时使用 Think 进行回答。

使用 eventbot 的 Slack
使用 eventbot 的 Slack

除去资源

要清除本教程的资源,请转至 IBM Cloud 资源列表。 找到 watsonx Assistant 和 IBM Db2 SaaS 的服务实例并将其删除。 同样,找到 Code Engine 项目并将其删除。

根据资源的不同,可能不会立即将其删除,但会保留 (缺省情况下为 7 天)。 您可以通过永久删除该资源或在保留期内将其复原来回收该资源。 请参阅本文档,以了解如何 使用资源回收

相关内容

以下是有关本教程主题的其他资源。