IBM Cloud Docs
建置資料庫驅動的 Slackbot

建置資料庫驅動的 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 資料庫

架構
教學的架構圖

  1. 使用者透過 Slack 或使用 Web 會談用戶端與 IBM® watsonx™ Assistant 互動
  2. 聊天機器人使用自訂延伸,並在 Code Engine 上部署 REST API 作為 Python 應用程式
  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,以切換至 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 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中。

  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. 請記下未來步驟中需要的專案 ID。

    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 作為 助理名稱來建立新的助理,然後按 下一步 以開始個人化。

  4. 對於部署的第一個問題,請挑選 Web

  5. 對於其他問題,請回答您的角色或使用 其他 / 目前不確定

  6. 如需自訂會談使用者介面的機會,請按 下一步

  7. 下一步,然後按一下 建立來完成。

    如果您是第一次使用 watsonx Assistant,則新頁面包括您可能想要完成的引導式導覽。

新增及配置自訂延伸

接下來,您將新增並配置自訂延伸至 watsonx Assistant 及新建立的助理。

  1. 在左下方的儀表板中,按一下 整合,然後按一下 延伸下的 建置自訂延伸
  2. 在多步驟對話框中,按 下一步,然後輸入 events 作為 延伸名稱,並輸入 API for events database 作為 延伸說明。 按下一步
  3. 選取並上傳本端檔案 slackbot-openapi-spec.json,然後按 下一步
  4. 最後一個步驟可讓您檢閱包含伺服器及作業的延伸。 完成之後,請按一下 完成
  5. 回到「整合」頁面,請注意 延伸 區段中的新 事件 磚。 按一下該磚上的 新增,以配置助理的延伸。
  6. 新的對話框會從簡短的概觀開始。 按一下 “下一步” 進入實際配置。 在 鑑別類型 的下拉清單中,選取 API 金鑰鑑別,然後輸入您選擇的 API 金鑰 (MY_SECRET 取代)。
  7. 對於 伺服器變數,請使用您的部署 地區slackbot-backend 作為 appname,以及應用程式的 Code Engine projectid。 之後,產生的 URL 應該符合 Code Engine 應用程式的 URL。 完成時,請按 下一步 以進入檢閱頁面,然後按一下 完成關閉 以回到 整合 頁面。

建立第一個動作

首先,您將建立動作,以擷取依事件名稱識別之單一事件的相關資訊。

  1. 在左上方,按一下 動作,並在歡迎使用頁面上按一下 建立動作

  2. 按一下 從頭開始 磚。

  3. 在「新建動作」對話框中,輸入 show me event details 作為範例,然後按一下 儲存

  4. 下一個畫面會顯示開啟 步驟 1 之動作的步驟編輯器。 在 Assistant 中,輸入 type What is the event name?。 然後,針對 定義客戶回應,挑選 任意文字 作為選項。 將 然後 保留為 繼續下一步

  5. 按一下左下方的 新建步驟,以新增 步驟 2。 保留第一部分 (助理指出定義客戶回應) 不變,但在 之下,選取 使用延伸。 在下拉清單中,挑選 事件 延伸及其 依名稱的事件記錄 作業。 此後,參數 將顯示可能的輸入。 透過使用下拉清單,將 Set short_name 指派為值 **Action step variables > 1. 活動名稱是什麼?。 它是指前一個步驟中的客戶輸入。 按一下 套用 以完成此步驟。

  6. 新增步驟。 在頂端變更選取項目,以便 有條件採取步驟 3。 在 條件 下,並 如果 選取 2 Ran successfully。 它是指在步驟 2 中使用延伸的結果。

  7. 助理說下,您可以透過參照已部署應用程式之 API 呼叫的輸出欄位,將回答與事件詳細資料組合在一起。 使用 我取得這些事件詳細資料: 後接 Enter 索引鍵,以進入下一行。 編輯器支援 Markdown 格式。 因此,請使用 - 鍵來建立項目符號清單。 使用 名稱: 新增清單項目,然後按一下 插入變數 圖示。 從下拉清單中選取 2 body.shortname。 再次使用 Enter 索引鍵,以進入含有清單項目的新行。 從變數下拉清單中新增 Location: with 2 body.location。 針對 開始結束聯絡重複。 完成之後,請將 然後 設為 結束動作

  8. 若要處理延伸中的錯誤,請建立具有條件的另一個步驟。 現在,讓步驟對 2 Ran successfullyfalse 做出反應。 讓助理說 抱歉,有問題,然後重新結束動作。

    為了簡單起見,並非所有錯誤和條件 (例如空結果) 都會處理。

  9. 按一下右上方的 儲存 圖示,然後按一下其旁邊的 X,以關閉步驟編輯器。

  10. 在右下方,選取 預覽 以測試對話框。

  11. 在會談中,鍵入 show me event details 並提交。 機器人應該回應 何謂事件名稱?。 現在鍵入 Think 並提交。 因為後端應用程式使用萬用字元搜尋,所以應該會找到名稱為 Think 2022 的範例事件並傳回詳細資料 (請參閱下面的畫面擷取)。

顯示事件詳細資料的會談預覽
顯示事件詳細資料的預覽

您可以按一下 檢查,以查看如何使用自訂延伸的詳細資料。 您可以檢查輸入及輸出變數,以及如何呼叫延伸的 API 函數。

收集資料並插入新記錄的動作

與擷取記錄類似,可以收集事件的相關輸入,並透過自訂延伸來新增該資料。

  1. 切換至 動作由您建立。 按一下新建動作

  2. 按一下 從頭開始 磚。

  3. 在「新建動作」對話框中,輸入 新增事件儲存

  4. 針對 Assistant 指出,使用 您要如何命名事件?。 客戶再次以 任意文字 回應。

  5. 新增 新步驟,並讓「助理」指出 事件在何處?。 同樣地,客戶可能會以 任意文字回應。

  6. 新增另一個步驟,並詢問 事件何時開始?,但在 定義客戶回應中使用 日期

  7. 重複相同的動作,但使用 事件何時結束?

  8. 最後,在新步驟中,詢問 事件的 URL (網址) 為何?,並讓客戶以 任意文字回應。

  9. 現在,若要確認輸入,請建立新的步驟。 使用 是否正確? 並作為項目符號清單顯示收集的資料。 新增 名稱位置開始結束聯絡 的項目,並使用與資料輸入步驟相關的「動作」變數 (請參閱下面的畫面擷取)。 使用 確認 作為客戶回應類型。

    確認步驟
    確認步驟

  10. 新增步驟,條件是先前的確認為 。 助理可以說 OK,讓我們重新開始。 將 然後 設為 重新詢問前一個步驟,並選取所有先前步驟。

  11. 在新步驟 (應該是步驟 8) 中,對 確認做出反應。 在 然後 下,選取 使用延伸。 使用 插入新的事件記錄 作為作業來配置事件延伸。 比對參數與步驟的「動作」變數,例如 shortname1。 您想如何命名該活動?

  12. 建立條件 8 Ran successfully 為 true 的新步驟。 讓助理假設 已建立 ID 為 VARIABLE 的新記錄。 對於 VARIABLE,請從 事件 (步驟 8) 中選取 8 body.eid。 結束 然後下的動作。

  13. 建立新的步驟,且 8 Ran successfully 條件為 false。 使用類似 似乎在建立新的事件記錄時發生問題,讓「助理」在 然後下說出並結束動作。 儲存並關閉右上方有圖示的動作。

  14. 儲存動作,然後按一下左側的 預覽 並使用 Web 會談來測試新動作。 鍵入 add new event 並提交。 當機器人提示時,請輸入 my conference 作為名稱,輸入 home office 作為位置,挑選開始和結束的日期,並使用 http://localhost 作為 URL。 之後,請確認資料是否正確。

建立聊天機器人時,您可能想要 發佈聊天機器人。 它是版本的受控版本,容許回復變更並繼續開發,而不會影響與實際客戶互動的聊天機器人。

與 Slack 整合

現在,您將整合聊天機器人與 Slack。

  1. 在左下方,按一下 整合
  2. 在整合概觀的 通道區段中,找出 Slack,然後按一下 新增
  3. 請按照逐步說明將聊天機器人的草稿環境與 Slack 整合。 如需相關資訊,請參閱與 Slack 整合主題。
  4. 完成之後,請開啟 Slack 工作區。 開始與機器人進行直接會談,並說 顯示事件詳細資料。 然後,與上述類似,當提示您輸入事件名稱時,以 Think 回答。

含有 eventbot 的 Slack
含有 eventbot 的 Slack

移除資源

若要清除本指導教學的資源,請移至 IBM Cloud 資源清單。 找出 watsonx Assistant 和 IBM Db2 SaaS 的服務實例,並刪除它們。 同樣地,找出 Code Engine 專案並刪除它。

視資源而定,它可能不會立即刪除,但會保留 (依預設會保留 7 天)。 您可以透過永久刪除資源或在保留期間內還原資源來收回資源。 請參閱本文件,以瞭解如何 使用資源收回

相關內容

以下是有關本教程所涵蓋主題的其他資源。