建置資料庫驅動的 Slackbot
本指導教學可能會產生成本。 使用 成本估算器 根據您的預計使用情況產生成本估算。
在本指導教學中,您將建置 Slackbot,以容許在後端 IBM Db2 SaaS 資料庫中搜尋及建立項目。 Slackbot 由 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 資料庫
- 使用者透過 Slack 或使用 Web 會談用戶端與 IBM® watsonx™ Assistant 互動
- 聊天機器人使用自訂延伸,並在 Code Engine 上部署 REST API 作為 Python 應用程式
- 自訂延伸應用程式會從 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
,以切換至 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 key
也稱為service credentials
。 此明碼檔案包含 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'
-
請記下未來步驟中需要的專案 ID。
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 作為 助理名稱來建立新的助理,然後按 下一步 以開始個人化。
-
對於部署的第一個問題,請挑選 Web。
-
對於其他問題,請回答您的角色或使用 其他 / 目前不確定。
-
如需自訂會談使用者介面的機會,請按 下一步。
-
按 下一步,然後按一下 建立來完成。
如果您是第一次使用 watsonx Assistant,則新頁面包括您可能想要完成的引導式導覽。
新增及配置自訂延伸
接下來,您將新增並配置自訂延伸至 watsonx Assistant 及新建立的助理。
- 在左下方的儀表板中,按一下 整合,然後按一下 延伸下的 建置自訂延伸。
- 在多步驟對話框中,按 下一步,然後輸入 events 作為 延伸名稱,並輸入 API for events database 作為 延伸說明。 按下一步。
- 選取並上傳本端檔案 slackbot-openapi-spec.json,然後按 下一步。
- 最後一個步驟可讓您檢閱包含伺服器及作業的延伸。 完成之後,請按一下 完成。
- 回到「整合」頁面,請注意 延伸 區段中的新 事件 磚。 按一下該磚上的 新增,以配置助理的延伸。
- 新的對話框會從簡短的概觀開始。 按一下 “下一步” 進入實際配置。 在 鑑別類型 的下拉清單中,選取 API 金鑰鑑別,然後輸入您選擇的 API 金鑰 (MY_SECRET 取代)。
- 對於 伺服器變數,請使用您的部署 地區、slackbot-backend 作為 appname,以及應用程式的 Code Engine projectid。 之後,產生的 URL 應該符合 Code Engine 應用程式的 URL。 完成時,請按 下一步 以進入檢閱頁面,然後按一下 完成 並 關閉 以回到 整合 頁面。
建立第一個動作
首先,您將建立動作,以擷取依事件名稱識別之單一事件的相關資訊。
-
在左上方,按一下 動作,並在歡迎使用頁面上按一下 建立動作。
-
按一下 從頭開始 磚。
-
在「新建動作」對話框中,輸入 show me event details 作為範例,然後按一下 儲存。
-
下一個畫面會顯示開啟 步驟 1 之動作的步驟編輯器。 在 Assistant 中,輸入 type What is the event name?。 然後,針對 定義客戶回應,挑選 任意文字 作為選項。 將 然後 保留為 繼續下一步。
-
按一下左下方的 新建步驟,以新增 步驟 2。 保留第一部分 (助理指出,定義客戶回應) 不變,但在 之下,選取 使用延伸。 在下拉清單中,挑選 事件 延伸及其 依名稱的事件記錄 作業。 此後,參數 將顯示可能的輸入。 透過使用下拉清單,將 Set short_name 指派為值 **Action step variables > 1. 活動名稱是什麼?。 它是指前一個步驟中的客戶輸入。 按一下 套用 以完成此步驟。
-
新增步驟。 在頂端變更選取項目,以便 有條件採取步驟 3。 在 條件 下,並 如果 選取 2 Ran successfully。 它是指在步驟 2 中使用延伸的結果。
-
在 助理說下,您可以透過參照已部署應用程式之 API 呼叫的輸出欄位,將回答與事件詳細資料組合在一起。 使用 我取得這些事件詳細資料: 後接
Enter
索引鍵,以進入下一行。 編輯器支援 Markdown 格式。 因此,請使用-
鍵來建立項目符號清單。 使用 名稱: 新增清單項目,然後按一下 插入變數 圖示。 從下拉清單中選取 2 body.shortname。 再次使用Enter
索引鍵,以進入含有清單項目的新行。 從變數下拉清單中新增 Location: with 2 body.location。 針對 開始、結束及 聯絡重複。 完成之後,請將 然後 設為 結束動作。 -
若要處理延伸中的錯誤,請建立具有條件的另一個步驟。 現在,讓步驟對 2 Ran successfully 為 false 做出反應。 讓助理說 抱歉,有問題,然後重新結束動作。
為了簡單起見,並非所有錯誤和條件 (例如空結果) 都會處理。
-
按一下右上方的 儲存 圖示,然後按一下其旁邊的 X,以關閉步驟編輯器。
-
在右下方,選取 預覽 以測試對話框。
-
在會談中,鍵入 show me event details 並提交。 機器人應該回應 何謂事件名稱?。 現在鍵入 Think 並提交。 因為後端應用程式使用萬用字元搜尋,所以應該會找到名稱為 Think 2022 的範例事件並傳回詳細資料 (請參閱下面的畫面擷取)。
您可以按一下 檢查,以查看如何使用自訂延伸的詳細資料。 您可以檢查輸入及輸出變數,以及如何呼叫延伸的 API 函數。
收集資料並插入新記錄的動作
與擷取記錄類似,可以收集事件的相關輸入,並透過自訂延伸來新增該資料。
-
切換至 動作 並 由您建立。 按一下新建動作。
-
按一下 從頭開始 磚。
-
在「新建動作」對話框中,輸入 新增事件 和 儲存。
-
針對 Assistant 指出,使用 您要如何命名事件?。 客戶再次以 任意文字 回應。
-
新增 新步驟,並讓「助理」指出 事件在何處?。 同樣地,客戶可能會以 任意文字回應。
-
新增另一個步驟,並詢問 事件何時開始?,但在 定義客戶回應中使用 日期。
-
重複相同的動作,但使用 事件何時結束?。
-
最後,在新步驟中,詢問 事件的 URL (網址) 為何?,並讓客戶以 任意文字回應。
-
現在,若要確認輸入,請建立新的步驟。 使用 是否正確? 並作為項目符號清單顯示收集的資料。 新增 名稱、位置、開始、結束及 聯絡 的項目,並使用與資料輸入步驟相關的「動作」變數 (請參閱下面的畫面擷取)。 使用 確認 作為客戶回應類型。
-
新增步驟,條件是先前的確認為 否。 助理可以說 OK,讓我們重新開始。 將 然後 設為 重新詢問前一個步驟,並選取所有先前步驟。
-
在新步驟 (應該是步驟 8) 中,對 是確認做出反應。 在 然後 下,選取 使用延伸。 使用 插入新的事件記錄 作為作業來配置事件延伸。 比對參數與步驟的「動作」變數,例如 shortname 與 1。 您想如何命名該活動?
-
建立條件 8 Ran successfully 為 true 的新步驟。 讓助理假設 已建立 ID 為 VARIABLE 的新記錄。 對於 VARIABLE,請從 事件 (步驟 8) 中選取 8 body.eid。 結束 然後下的動作。
-
建立新的步驟,且 8 Ran successfully 條件為 false。 使用類似 似乎在建立新的事件記錄時發生問題,讓「助理」在 然後下說出並結束動作。 儲存並關閉右上方有圖示的動作。
-
儲存動作,然後按一下左側的 預覽 並使用 Web 會談來測試新動作。 鍵入 add new event 並提交。 當機器人提示時,請輸入 my conference 作為名稱,輸入 home office 作為位置,挑選開始和結束的日期,並使用 http://localhost 作為 URL。 之後,請確認資料是否正確。
建立聊天機器人時,您可能想要 發佈聊天機器人。 它是版本的受控版本,容許回復變更並繼續開發,而不會影響與實際客戶互動的聊天機器人。
與 Slack 整合
現在,您將整合聊天機器人與 Slack。
- 在左下方,按一下 整合。
- 在整合概觀的 通道區段中,找出 Slack,然後按一下 新增。
- 請按照逐步說明將聊天機器人的草稿環境與 Slack 整合。 如需相關資訊,請參閱與 Slack 整合主題。
- 完成之後,請開啟 Slack 工作區。 開始與機器人進行直接會談,並說 顯示事件詳細資料。 然後,與上述類似,當提示您輸入事件名稱時,以 Think 回答。
移除資源
若要清除本指導教學的資源,請移至 IBM Cloud 資源清單。 找出 watsonx Assistant 和 IBM Db2 SaaS 的服務實例,並刪除它們。 同樣地,找出 Code Engine 專案並刪除它。
視資源而定,它可能不會立即刪除,但會保留 (依預設會保留 7 天)。 您可以透過永久刪除資源或在保留期間內還原資源來收回資源。 請參閱本文件,以瞭解如何 使用資源收回。
相關內容
以下是有關本教程所涵蓋主題的其他資源。