iT邦幫忙

1

我想請問,我如果想做到有完整對話功能的機器人,要如何著手?就好比說,我希望 bot 問我今天要做什麼,我回覆 ‘A’ ,它就會用 ’A‘ 的前後關係繼續這個對話。我如果回覆 ‘B’,則會到 'A' -> 'B' 底下的對話邏輯。簡而言之,我希望可以做到有「有限狀態機」(Wikipedia)的機器人。

我目前已經有一個 Python Telegram 的完整對話機器人,利用 Python-Telegram-Bot#ConversationHandler完成。我網路上搜尋了幾次,還是沒有找到任何符合我的需求的資源,不知有沒有其他我沒有找到的資源?

看更多先前的討論...收起先前的討論...
newkevin iT邦高手 1 級 ‧ 2018-08-04 12:04:04 檢舉
""我希望 bot 問我今天要做什麼""
(時間變數)或(固定時間) (某關鍵字).......
去你設定的資料庫
撈 bot內定對話秀出來的意思吧
請問您是指用資料庫去記錄這個對話的前後文,每次有任何對話時再用這個關鍵字去推測下個對話分支應該是什麼嗎?
newkevin iT邦高手 1 級 ‧ 2018-08-06 11:10:04 檢舉

希望BOT 甚麼時候跟你對話
觸發條件 (程式裡或資料庫 )
----------------------------------------------
繼續這個對話
另外一個專屬的資料庫
希望BOT 回特定的話
例如 專屬行業的話
才需要另一個專用的資料庫
或 原本資料庫有相關設定
如果沒有特定的
應該就直接回原本同個資料庫
newkevin iT邦高手 1 級 ‧ 2018-08-06 11:10:04 檢舉
重複
我希望做到的是一個如下:
機器人:「今天要做什麼?你可以說『天氣』或『新聞』。」
使用者:「天氣」
機器人:「臺北今天天氣雨,30度」
使用者:「明天?」[*]
機器人:「臺北明天天氣雨,32度」
使用者:「新竹?」[*]
機器人:「新竹明天天氣陰,29度」

[*] 在這裡,機器人需要知道上一個對話進行到哪裡,才能得知這個對話是關於天氣。

請問我希望做到什麼我有解釋清楚嗎?如果需要達到這樣的目標,仍然要透過資料庫達成嗎?畢竟資料庫讀寫一定比較慢,如果透過資料庫記錄對話的過程,肯定會有效能的疑慮;所以我才想詢問有沒有內建 line-bot-api 中任何方法、函數能記錄上述對話的進度,讓我可以正確推測現在對話的過程。
line-bot-api 沒有提供相關功能。
你必須靠自己儲存 context,基本上就跟瀏覽器的 cookie 和 session 運作一樣。
你要用 channel_id 作為 key 值,再去你的 context 表查詢 context。
你如果覺得資料庫慢,可以考慮使用 redis 之類的東西來做加速。

舉例來說:卡米狗是怎麼知道有人講出重複的話,卡米狗怎麼知道現在該安靜還是可以講話?這些都是需要儲存狀態的。

實際上,卡米狗是在 channel 表格上增加一欄 context 來完成這件事。
瞭解,看來不用資料庫不行了,謝謝各位的資訊!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答