iT邦幫忙

第 12 屆 iT 邦幫忙鐵人賽

DAY 21
0
Microsoft Azure

利用Python開發一個以Azure服務為基底的Chat Bot系列 第 21

【Day21】如何讓 Chatbot 儲存與使用者交談的資料

今天是進階應用 Microsoft Bot Framework 的第一天,我們要來讓 Chatbot 記下與使用者的對話內容。

一些學理知識

如果要記住使用者的對話中的重要資料,需要兩個東西。

  • Bot State: 用來記錄資料的邏輯容器,大致可分為 3 種 state。

    • User state: 追蹤使用者的相關資訊
    • Conversation state: 追蹤對話的內容
    • Private conversation state: 追蹤使用者和對話內容的特定資訊
  • Accessor: 用來針對每一次的問答後,存取資料並修改的邏輯工具。

程式碼範例

這邊,我們參考 Microsoft 官方範例 python 程式碼45.state-management

建議用 VS Code 以資料夾打開這個範例資料夾,打開的樣式如下。
https://ithelp.ithome.com.tw/upload/images/20201006/20129689LhnUnbROyV.jpg

紅色框框為下面會打開的程式檔,建議先雙擊打開

User state 及 Conversation state

user_profile.py 裡的User state

class UserProfile:
    def __init__(self, name: str = None):
        self.name = name

conversation_data.py 裡的 Conversation state

class ConversationData:
    def __init__(
        self,
        timestamp: str = None,
        channel_id: str = None,
        prompted_for_user_name: bool = False,
    ):
        self.timestamp = timestamp
        self.channel_id = channel_id
        self.prompted_for_user_name = prompted_for_user_name

這邊就可以清楚看到 User state 及 Conversation state 之間的差異,但是我自己實測過,如果把 name 改儲存在 Conversation state 裡,程式仍可以正常運作。

存取及修改對話資料的 Accessor

這邊要打開 bots/state_management_bot.py,我們可以看到針對User state 及 Conversation state 分別的 Accessor 物件。
https://ithelp.ithome.com.tw/upload/images/20201006/20129689AeNF2hOUKh.jpg

在 on_message_activity() 的函式裡,我們可以看到對 Accessor 更加著墨,使用了 get() 方法。
https://ithelp.ithome.com.tw/upload/images/20201006/20129689e8fdJ7qpEp.jpg

儲存 User state 及 Conversation state 的變動

在 on_turn 函式哩,會有儲存 User state 及 Conversation state 在每次來回訊息的 turn,紀錄每次變更的動作

async def on_turn(self, turn_context: TurnContext):
    await super().on_turn(turn_context)

    await self.conversation_state.save_changes(turn_context)
    await self.user_state.save_changes(turn_context)

以上是今天想要分享的內容,明天將會介紹 Blob Storage 與 chatbot 的結合。/images/emoticon/emoticon31.gif


上一篇
【Day20】Microsoft Bot Framework 初階篇結束
下一篇
【Day22】改變 Chatbot 儲存資料的位置
系列文
利用Python開發一個以Azure服務為基底的Chat Bot30

尚未有邦友留言

立即登入留言