构建数据库驱动的 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="*
- 用户通过 Slack 或使用 Web 聊天客户端与 IBM® watsonx™ Assistant 进行交互
- 聊天机器人利用在 Code Engine 上部署为 Python 应用程序的 REST API 的定制扩展
- 定制扩展应用程序从 IBM Db2 SaaS 数据库中检索数据并将数据插入其中
准备工作
本教程需要:
- IBM Cloud CLI,
- Code Engine 插件,
git
以克隆源代码存储库,jq
,用于查询 JSON 数据。
要避免安装这些工具,可以从 IBM Cloud 控制台使用 Cloud Shell。
您将在 教程入门 指南中找到有关为您的操作环境下载和安装这些工具的指示信息。
设置服务和部署后端
在本节中,您将设置所需的服务并部署后台应用程序。 所有这些都可以通过终端中的命令行界面 (CLI) 来完成。
-
克隆 GitHub仓库,并导航至克隆目录:
git clone https://github.com/IBM-Cloud/slack-chatbot-database-watson cd slack-chatbot-database-watson
-
如果尚未登录,请使用
ibmcloud login
或ibmcloud login --sso
以交互方式登录。 确保针对地区和资源小组开展工作。 此资源组将用于创建服务和操作。 可以使用ibmcloud resource groups
来列出可用资源组。ibmcloud target -r <region> -g <resource group>
使用
ibmcloud target -g default
可切换到缺省资源组。 -
创建 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
-
要在以后从 Code Engine 应用程序访问数据库服务,它需要正确的授权。 因此,请创建服务凭证,并将其标注为 slackbotkey:
ibmcloud resource service-key-create slackbotkey Manager --instance-name eventDB --output json > slackbotkey.json
slackbotkey.json 文件包含也称为
service credentials
的service 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中。 -
创建 watsonx Assistant 服务实例。 使用 eventAssistant 作为名称,并使用免费的 Lite 计划。 将 us-south 调整为您所在的位置。
ibmcloud resource service-instance-create eventAssistant conversation free us-south
-
将具有定制扩展的预构建容器映像部署为 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 文档,以获取更多详细信息。 由于您使用的不是公共容器映像,而是您自己的容器映像,因此还需要设置 注册表私钥。 -
通过调用应用程序提供的 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'
-
请注意项目标识,在未来的步骤中将需要该标识。
ibmcloud ce app get -n slackbot-backend --output json | jq -r .metadata.namespace
创建助手
在教程的这一部分中,您将使用 watsonx Assistant 服务。 首先,创建新的助手。 然后,创建定制扩展并将其添加到助手。 此后,您将创建操作并使用 Web 预览对其进行测试。 最后,您将聊天机器人与 Slack 集成,并执行更多测试。
-
在 IBM Cloud 资源列表中,打开服务概述。 在 AI/ Machine Learning 部分下找到 watsonx Assistant 服务的实例。 点击其条目可打开服务详情。
-
单击启动 Watson Assistant 以访问 watsonx Assistant 工具。
-
在欢迎对话框中,使用 slackbot 作为 Assistant 名称来创建新助手,然后单击 下一步 以开始个性化。
-
对于部署选取 Web 上的第一个问题。
-
对于您的角色或 其他 / 此时不确定的其他问题答案。
-
如果需要,请单击 下一步 以定制交谈 UI。
-
单击 下一步,然后通过单击 创建完成。
如果您是 watsonx Assistant的新用户,那么新页面包含您可能想要完成的引导式教程。
添加和配置定制扩展
接下来,您将添加并配置对 watsonx Assistant 和新创建的助手的定制扩展。
- 在左下方的仪表板中,单击 集成,然后单击 扩展下的 构建定制扩展。
- 在多步骤对话框中,单击 下一步,然后输入 events 作为 扩展名称,输入 API for events database 作为 扩展描述。 单击下一步。
- 选择并上载本地文件 slackbot-openapi-spec.json,然后单击 下一步。
- 最后一个步骤允许您查看包含服务器和操作的扩展。 完成后,单击 完成。
- 返回到“集成”页面上的“扩展”部分中的新 事件 磁贴。 单击该磁贴上的 添加 以配置助手的扩展。
- 新对话框以简短概述开头。 单击“下一步”进入实际配置。 在 认证类型 的下拉列表中,选择 API 密钥认证,然后输入您选择的 API 密钥 (MY_secret T 替换)。
- 对于 服务器变量,请使用部署 区域,slackbot-backend 作为 appname,以及应用程序的 Code Engine projectid。 此后,生成的 URL 应与 Code Engine 应用程序的 URL 匹配。 完成后,单击 下一步 以转至复审页面,然后单击 完成 和 关闭 以返回到“集成”页面。
创建第一个操作
首先,您将创建一个操作,以检索有关由其名称标识的单个事件的信息。
-
在左上方,单击 操作 和 创建操作上的欢迎页面。
-
单击 从头开始 磁贴。
-
在“新建操作”对话框中,输入 show me event details 作为示例,然后单击 保存。
-
下一个屏幕显示打开了 步骤 1 的操作的步骤编辑器。 在 助手 中,输入 什么是事件名称?。 然后,对于 定义客户响应,选择 自由文本 作为选项。 将 然后 保留为 继续执行下一步。
-
单击左下方的 新建步骤 以添加 步骤 2。 使第一部分 (助手说,定义客户响应) 保持不变,但在 下 选择 使用扩展。 在下拉列表中,选取 events 扩展及其 Event record by name 操作。 此后,参数 将显示可能的输入。 通过使用下拉列表,将 Set short_name 分配给值 **操作步骤变量 > 1。 活动名称是什么 它是指上一步的客户输入。 单击 应用 以完成此步骤。
-
添加 新步骤。 在顶部更改选择,以便 步骤 3 采用了条件。 在 条件 和 If 下,选择 2 Ran success。 它引用了在步骤 2 中使用扩展的结果。
-
在 助手说下,您可以通过引用已部署应用程序的 API 调用的输出字段来编写包含事件详细信息的答案。 使用 I get these event details: 后跟
Enter
键以进入下一行。 编辑器支持 Markdown 格式。 因此,请使用-
键来创建项目符号列表。 添加具有 名称: 的列表项,然后单击 插入变量 图标。 从下拉列表中选择 2 body.shortname。 再次使用Enter
键以获取包含列表项的新行。 从变量下拉列表中添加 Location: with 2 body.location。 重复 开始,结束和 联系。 完成后,将 然后 设置为 结束操作。 -
要处理扩展中的错误,请创建另一个具有条件的步骤。 现在,让该步骤对 2 Ran 成功 为 false 作出反应。 让助手说 对不起,有问题,然后再次结束操作。
为了简单起见,并非所有错误和条件 (如空结果) 都得到处理。
-
单击右上方的 保存 图标,然后单击旁边的 X 以关闭步骤编辑器。
-
在右下角选择 预览 以测试对话框。
-
在交谈中,输入 show me event details 并提交。 机器人应响应 什么是事件名称?。 现在,输入 Think 并提交。 由于后端应用程序使用通配符搜索,因此它应该查找名为 Think 2022 的样本事件并返回详细信息 (请参阅下面的截屏)。

您可以单击 检查 以查看有关如何使用定制扩展的详细信息。 您可以检查输入和输出变量以及如何调用扩展的 API 函数。
用于收集数据和插入新记录的操作
类似于检索记录,可以收集有关事件的输入并通过定制扩展添加该数据。
-
切换到 操作 和 由您创建。 单击新建操作。
-
单击 从头开始 磁贴。
-
在“新建操作”对话框中,输入 add new event 和 Save。
-
使用 How do you want to name 该事件? for Assistant 说明。 客户再次以 自由文本 进行响应。
-
添加 新步骤,并让助手显示 事件在何处?。 同样,客户可以使用 自由文本进行响应。
-
添加另一个步骤并询问 事件何时开始?,但使用 日期 来 定义客户响应。
-
重复 事件何时结束?。
-
最后,在新步骤中,询问 什么是事件的 URL (Web 地址)?,并让客户使用 自由文本进行响应。
-
现在,要确认输入,请创建一个新步骤。 使用 这是正确的吗?,并且作为项目符号列表显示收集的数据。 为 名称,位置,开始,结束和 联系人 添加项,并使用与数据的输入步骤相关的操作变量 (请参阅下面的截屏)。 使用 确认 作为客户响应类型。
确认步骤 -
添加一个新步骤,条件是先前确认为 否。 助手可以说 好,让我们从头开始。 将 然后 设置为 重新询问先前步骤,并选择所有先前步骤。
-
在新步骤 (应该是步骤 8) 中,对确认为 是作出反应。 在 然后 下,选择 使用扩展。 使用 插入新事件记录 作为操作来配置事件扩展。 将参数与步骤的“操作”变量相匹配,例如,将 shortname 与 1 相匹配。 您想如何为活动命名
-
创建条件为 8 Ran success 为 true 的新步骤。 让助手说 已创建标识为 VARIABLE 的新记录。 对于 VARIABLE,请从 事件 (步骤 8) 中选择 8 body.eid。 结束 然后下的操作。
-
创建一个新步骤,其中 8 Ran success 的条件为 false。 使用类似 似乎在创建新事件记录时出现问题 之类的内容,以便助手在 然后下说并结束操作。 使用右上方的图标保存并关闭操作。
-
保存该操作,然后通过单击左侧的 预览 并使用 webchat 来测试新操作。 输入 add new event 并提交。 在机器人提示时,输入 my conference 作为名称,输入 home office 作为位置,选取开始日期和结束日期,并使用 http://localhost 作为 URL。 然后,确认数据是否正确。
创建聊天机器人时,您可能希望 发布聊天机器人。 它是版本的受控发行版,允许回滚更改并继续开发,而不会影响聊天机器人与真实客户的交互。
与 Slack 集成
现在,您将使用 Slack 集成聊天机器人。
- 在左下方,单击 集成。
- 在集成概述的“通道”部分中,找到 Slack,然后单击 添加。
- 请按步骤说明将聊天机器人的 Draft 环境与 Slack 整合。 有关此操作的更多信息可在与 Slack 集成主题中获取。
- 完成后,打开 Slack 工作空间。 开始与机器人直接交谈,并显示 向我显示事件详细信息。 然后,与上面类似,在提示输入事件名称时使用 Think 进行回答。

除去资源
要清除本教程的资源,请转至 IBM Cloud 资源列表。 找到 watsonx Assistant 和 IBM Db2 SaaS 的服务实例并将其删除。 同样,找到 Code Engine 项目并将其删除。
根据资源的不同,可能不会立即将其删除,但会保留 (缺省情况下为 7 天)。 您可以通过永久删除该资源或在保留期内将其复原来回收该资源。 请参阅本文档,以了解如何 使用资源回收。
相关内容
以下是有关本教程主题的其他资源。