返回文章列表

Finite State Machine 與 chatbot 開發

2018-07-10
2 分鐘
BackendArchitecture

初期的 Chatbot 開發經驗

作者的早期 chatbot 開發經驗主要集中在簡單的指令式機器人,例如:

  1. 用戶輸入指令查詢資料庫並直接回應
  2. 根據指令生成報表並提供下載連結

這類機器人邏輯簡單,開發快速。後來他想將家務事務(如記帳、寵物健康追蹤、行事曆)自動化,但發現 Slack 不適合普通家庭用戶,改採 Line bot 和 Messenger bot。

遇到的問題:複雜的對話流程

實現 Messenger Bot 後,面臨兩個主要挑戰:

多用戶並發問題:當多個用戶同時與機器人互動時,無法追蹤每個用戶的對話狀態。

Bot 無可避免的會面臨同時有多個 User 與他對話的狀況

單一用戶的連續對話問題:記帳流程需要多步驟確認(選擇支出/收入 → 輸入項目名稱 → 輸入金額 → 確認),機器人需要記住用戶在流程中的位置。

解決方案:狀態管理

通過在伺服器端記錄 userId 和對話狀態(採用 session 概念),機器人可以:

  • 區分不同用戶
  • 根據當前狀態和用戶輸入決定回應
  • 驗證輸入是否符合當前狀態的預期

Finite State Machine (FSM) 的應用

隨著流程複雜度增加,作者採用 FSM 來建模對話流程。FSM 是自動機理論中的數學模型,「用於描述有限狀態及這些狀態交互轉移及行為」。

關鍵概念:

  • 狀態 (State):機器人所處的條件(如「等待輸入記帳類型」)
  • 轉移 (Transition):狀態之間的變化條件
  • 使用狀態圖或狀態轉移表表示

實現技術

作者使用 Node.js 和 javascript-state-machine 函式庫實現 FSM,為每個狀態定義相應的處理器,並設定狀態轉移條件,簡化複雜的對話邏輯。

原文發表於 Medium

Command Palette

Search for a command to run...