偵錯指導方針

適用于: SDK v4

Bot 是複雜的應用程式,有許多部分會一起運作。 和其他複雜的應用程式一樣,這種方式會導致一些有趣的錯誤,或是讓 Bot 產生出乎意料的行為。

針對聊天機器人進行偵錯有時候是很困難的工作。 每個開發人員都有自己的慣用方式來完成該工作。 下列指導方針是適用于大部分 Bot 的建議。

確認 Bot 是否正常運作之後,下一個步驟是將其連線到通道。 若要這樣做,您可以將 Bot 部署至預備伺服器,並為 Bot 建立自己的直接線路用戶端以連線。 如需詳細資訊,請參閱將 Bot 連線至Direct Line

建立您自己的用戶端可讓您定義通道的內部運作,並測試 Bot 如何回應特定活動交換。 一旦 Bot 連線到您的用戶端後,請執行您的測試以設定 Bot 狀態並驗證功能。 如果您的 Bot 會利用如語音之類的功能,使用這些通道可提供驗證該功能的方式。

注意

將 Bot 部署至 Azure 時,預設會布建網路聊天通道。

您可以在這裡透過Azure 入口網站使用Bot Framework Emulator網路聊天,進一步深入瞭解 Bot 在與不同通道互動時如何執行。

針對 Bot 進行偵錯的方式,與針對其他多執行緒應用程式進行偵錯的方式相似,都要使用設定中斷點或是如即時運算視窗的功能。

Bot 遵循事件驅動程式設計架構,如果您還不熟悉,就很難進行說明。 讓您的 Bot 處於無狀態、多執行緒以及處理非同步/等候呼叫的概念,都會造成無法預期的錯誤 (Bug)。 針對 Bot 偵錯的運作方式與針對其他多執行緒應用程式的方式相似,我們將會提供一些實用的建議、工具和資源來協助您。

使用模擬器瞭解 Bot 活動

您的 Bot 除了處理一般的訊息活動之外,也會處理不同類型的活動。 了解那些活動有助於您更有效率地撰寫 Bot 的程式碼,並且可讓您確認 Bot 如預期地傳送和接收活動。 使用模擬器會顯示這些活動是什麼、發生時,以及其包含的資訊。 如需詳細資訊,請參閱使用模擬器進行偵錯

透過文字記錄儲存及擷取使用者互動

Azure Blob 文字記錄儲存體提供特製化資源,您可以在其中儲存及擷取文字記錄,內含使用者與您的 bot 之間的互動。

此外,一旦儲存使用者輸入互動,您即可使用 Azure 的「儲存體總管」 ,手動檢視 Blob 文字記錄存放區內所儲存的文字記錄中包含的資料。 下列範例會從 「mynewtestblobstorage」 的設定中開啟 「儲存體總管」。若要開啟已儲存的使用者輸入,請選取:Blob Container > ChannelId TranscriptId > ConversationId >

儲存在 Blob 文字記錄存放區中的文字記錄專案範例。

這會開啟以 JSON 格式儲存的使用者對話輸入。 使用者輸入會與機碼 「text:」 一起保留。如需建立和使用 Bot 文字記錄檔的詳細資訊,請參閱使用文字記錄 檔對 Bot 進行偵錯

中介軟體的運作方式

第一次嘗試使用中介軟體時,可能會覺得不是非常直覺,特別是關於執行的接續或最少運算作法。 當執行傳遞給 Bot 邏輯時,中介軟體可透過呼叫 next() 委派命令,在回合的前緣或後緣執行。

如果您使用多個中介軟體,而它是管線導向方式,委派可能會將執行傳遞至不同的中介軟體片段。 如需詳細資料,請參閱 Bot 中介軟體管線以澄清概念。

next()如果未呼叫委派,即稱為「簡短路由」。 當中介軟體滿足目前的活動,並判斷不需要傳遞執行時,就會發生此情況。

瞭解中介軟體的時機和原因,有助於指出哪些中介軟體應該先出現在您的管線中。 此外,瞭解 SDK 或其他開發人員提供之內建中介軟體的重要事項。 在深入了解內建的中介軟體前,有些人發現先嘗試建立自己的中介軟體進行一些實驗非常有幫助。

如需如何使用檢查中介軟體對 Bot 進行偵錯的詳細資訊,請參閱 使用檢查中介軟體對 Bot 進行偵錯

了解狀態

持續追蹤狀態是 Bot 中很重要的一環,特別是針對複雜的工作更是如此。 一般而言,最佳做法是盡可能地快速處理活動,然後讓處理程序完成,如此狀態才會進入保存狀態。 活動幾乎可以同時傳送至 Bot,而且可能會因為非同步架構而造成混淆的錯誤。

因此,最重要的是,務必確定保存的狀態符合您預期的狀態。 根據您保存的狀態的位置,適用於 Cosmos DBAzure 表格儲存體的儲存體模擬器有助於您在使用生產環境儲存體之前先驗證該狀態。

重要

「Cosmos DB 儲存體」類別已遭取代。 原本使用 CosmosDbStorage 建立的容器沒有設定資料分割索引鍵,而且已獲得 _/partitionKey的預設分割區索引鍵。

使用 Cosmos DB 儲存體建立的 容器可以搭配 Cosmos DB 分割儲存體使用。 如需詳細資訊,請參閱 Azure Cosmos DB 中的資料分割

另請注意,不同于舊版 Cosmos DB 儲存體,Cosmos DB 分割儲存體不會在您的 Cosmos DB 帳戶內自動建立資料庫。 您必須 手動建立新的資料庫,但略過手動建立容器,因為 CosmosDbPartitionedStorage 會為您建立容器。

如何使用活動處理常式

活動處理常式可能導入另一層次的複雜度,特別是因為每個活動都在獨立的執行緒 (或是背景工作角色,視您的程式設計語言而定) 上執行。 視處理常式執行的動作而定,這可能會造成目前狀態不是您預期的問題。

內建狀態在回合結束時會被覆寫,不過由該回合產生的任何活動都會獨立執行,與回合管線無關。 通常,這對我們沒有影響,但如果活動處理常式變更我們需要寫入以包含該變更的狀態,則狀況又會有所不同。 在此情況下,回合管線可能會等候活動完成處理,然後才完成作業,以確保它會記錄該回合的正確狀態。

send activity 方法,以及其處理常式,會造成一個特有的問題。 只需在 on send activities 處理常式內呼叫 send activity,就會導致無限分支的執行緒。 針對該問題,有一些方法可以作為因應措施,例如將額外訊息附加到輸出資訊,或寫出到其他位置 (例如主控台),或是寫出檔案來避免造成 Bot 當機。

偵錯生產 Bot

當 Bot 在生產環境中時,您可以使用 ngrok從任何通道對 Bot 進行偵錯。 Bot 與多個通道的順暢連線是 Bot Framework 中可用的重要功能。 如需詳細資訊,請參閱 使用 ngrok 從任何通道 偵錯 Bot 和 偵錯技能或技能取用者

後續步驟

其他資源