owned this note changed 4 years ago
Published Linked with GitHub

title: COSCUP 2020 共筆
tags: COSCUP2020

Column 1 Column 2 Column 3
Text Text Text

8/2 10:00-16:00 @ Room TR212

Chatbot Taiwan

我們每個月在台北以及台中會舉辦小聚,歡迎各位報名、推薦講者以及閃電秀,介紹自己開發的 chatbot、 分享 chatbot 相關的議題。

10:00 ~ 10:40 聊天機器人 Session 管理與多輪對話 - C. T. Lin

議程簡介
簡報
分享 LINE 數位版簡介

Speaker

open source -> 對品質的要求
註解文件 test case

Bottender

bot = stateless
必須知道整個對話的狀態

把無狀態轉成有狀態

HTTP 的 Session 機制:

  • 經典:Cookie
  • 請求 Response 包含 Set Cookie
  • chatbot 不運用瀏覽器做事,無法使用 cookie
  • Websocket, command line
  • 可信任來源後就可以歸納 id
  • messenger 為例子
    • psid - fb 的特殊ID
    • 若是一對一的行為需要多注意 entry session 的事件
  • LINE messenger 文字事件
    • userId 為 unique id
    • events 也一樣可能有針對不同 session 的事件
  • LINE 群組的文字事件
    • groupId 是更好的 unique key;用 userId 則無法知道整個頻道的脈絡
    • 有兩種對話視窗 room & group

機器人的 Session 機制:利用 Signature Verification 來避免偽造

從 Request 抓出可靠的 Session ID

發出的Request, 包含PSID,就是很好的 Unique Key

有的聊天軟體會在一個 Http request 塞兩個以上的User message
要特別小心。

Session 儲存方式

使用標準做法不會害到你XD

  • 資料庫資源 key-value 都可以支援
  • 除了 cookie-based (加密存去 cookie) 不適用之外,其他 key-value based 的 session 處理方式都可以
    • ex: PHP Larvel 的 SessionHandlerInterface 要實作 read($sessionId)write($sessionId, data)

儲存方式:

  • file: 可以,但無法多主機

  • cookie: 聊天機器人不能用

  • database:

  • Dict

  • Bottender 也是使用相關機制

多輪對話的技術原理

  • 需要知道
    • 使用者講過的內容
    • 機器人問過什麼問題
  • 這個情況下有不同的使用機制
State + Event --> Action + Next State
  • state: 之前累積的資訊、問了什麼問題
  • event: 使用者(現在)講什麼

主要應用情境:抓參數的多輪對話

ex: 訂飲料 要知道杯數品項甜度冰塊

Slot filling

  • 把參數準備到位
    • 驗證使用者輸入,不符合時要求重填
  • 現實的對話不會照順序
    • 使用者一句話可能包含多個資訊

      ex: 使用者:薯條去鹽加四塊雞

    • 不希望機器人像 NPC
  • 用問句來回答問句
    • 使用者要問細節問題
      • EX: 牛奶是用光泉的嗎

      • QA用途
  • 要設計好 UX
  • conversional 所需要注意的狀態

對話分支

  • 使用者的選擇會觸發特定的問題
    點雞塊->雞塊需要糖醋醬嗎?

  • 條件式作答在 chatbot 中也是很常見的問題

跳多進行中對話

因故無法進行下去,要退出對話狀態?
變成是其他的對話處理
ex: 講到一半不買了、或問廁所在哪

State + Event --> Action + Next State
  • state: 之前累積的資訊、問了什麼問題
  • event: 使用者(現在)講什麼
    > 中間產物:intent

Action: 可能需要跳出

各平台應用上的差異

Quick Reply

提示使用者接下來要回什麼
更有機會暗示使用者達到我們想做的事情

Telegram 也有 Eason
其實 LINE 也有 quick reply mrorz

太棒了,謝謝分享XD 😆

Messenger Webview / LINE LIFF

資料不夠只用聊天,
開一個網站來收集需要的資訊

LIFF -> Web view 很好用喔,如果能別在 chatbot 中做的表單就最好讓 webview 去處理XD NiJia

Slack Modal: 跳出一個表單出來要使用者填寫

模組化的兩難

要表現的聰明自然的多輪對話,要綜觀全局,與模組化背道而馳

EX: 訂餐與問廁所,不該在同一個 Module

無論用 Regex 或 ML,都會有誤判

  • 當 branch 太多時較容易誤判
  • 考慮所有情況去做,開發會不符合成本

只服務大多數使用者

升級版本時,也必須考慮對對話中使用者造成的影響

結論

  • 人熟悉的對話式介面,機器人不擅長
  • 人很會處理突發狀況,機器人也不擅長
  • 目前還無法用低成本開發出

QA

Q: 如果一句話有多個訊息,推薦如何擷取裡面的資訊?
A: 都不太準 XD 有些人只會處理產品要的 case,與業務目標無關的就不處理(如閒聊),少數的 User 會觸發大量的 Case,可以專注在大量主要問題。

Q: 分支的部分,實際上會使用什麼 design pattern?應該不會一直用 if/else
A:

  • if/else 可以抽出成 router
  • 把它描述成一個 Function

10:50 ~ 11:10 CBFHSS 專為高中生設計的管家型聊天機器人 - 廖煥杰

議程簡介
簡報
分享 LINE 數位版簡介

學生端功能

  • 作業
  • 考試
  • 段考
  • 體溫查詢

教師處室端功能

  • 查詢班上同學的體溫

Other

  • 每班級一個 channel,30 個同學,四個禮拜,剛好不會超過 pushMessage 的上限

11:20 ~ 12:00 Loki: 專為中文開發一個 NLU 意圖分類引擎 - PeterWolf

議程簡介
簡報
分享 LINE 數位版簡介

Speaker

卓騰語言科技

NLU 引擎

  • LUIS
  • DialogFlow
  • Loki

功能

  • 意圖分類
  • 參數擷取

bot type

  • click bot (靠主選單使用所提供的功能)
  • keyword bot (只匹配關鍵字)
    • 關鍵字做不好,就只好給使用者所有可用關鍵字清單
    • 背離 chatbot 初衷
    • 到底跟 web1.0 有何差別?
    • 需要大量的關鍵字 (包含縮寫)
    • 很容易對應不到關鍵字或是對牛彈琴
    • 專案活越久就越難維護
    • 由於缺少專門為中文設計的 NLU 引擎,所以現在只看的到各種幹話機器人

Loki 有何不同?

Rule Based 中文 NLU 引擎 均民

  • 利用 ML 來產生穩定的中文模型非常困難
  • 中文剛好是已知語言系統中「最缺乏的詞綴系統」的前幾名
  • 要解決中文 NLU 問題,需要句法 (grammer) 介入 (文截 Articut)
  • 以 Articut 為底,我們打造了專為中文 NLU 設計的 Loki

12:10 ~ 12:30 Dialogflow with LINE bot 應用語意分析於 LINE Bot 開發的小技巧 - Wolke Lin , 林建宏

議程簡介
簡報
分享 LINE 數位版簡介

Speaker

為什麼要放棄 App 改做聊天機器人?

  • haagen dazs 取消 app 只做 LINE app
  • 使用者早已不安裝新的 App
  • App 營運成本較高

有 LINE bot 就好了嗎?

  • 只做制式回應的 bot
    • 請使用者打電話、查官網
  • bot 直接不回應
  • 候選人 LINE bot 隨機回應,搏感情但答非所問

App 與 bot 的 Funnel 差異

App: 看到 > app store -> download -> install -> open -> register -> member
Bot: 看到 > install (add contact) > member

推撥開信率

  • email: 容易進垃圾信箱
  • app: 通知發太多容易被關掉授權
  • line: 因為使用者每天有使用習慣,所以比較容易讀到,但是 push API 很貴
    • 某 official account 發錯訊息、再發一篇更正,來回花 50 萬。

Dialogflow 解決問題

  • 銀行 app 利用 button 導引
    • 使用者回答「利率」則對應到一個 intent

12:40 ~ 13:00 一份試算表、一台主機、一支機器人 - 奇步老爹(陳佳新)

議程簡介
簡報
分享 LINE 數位版簡介

  • 2019 創業歸故里競賽冠軍
  • 不會寫程式也能做聊天記器人嗎?可以用 LINE OA 後台來做

賴霸萬 linebot.one

成為快速打造 MVP 的

https://github.com/jarsing/linebotone

開源專案讚讚,快來幫忙按星星 均民

13:10 ~ 13:50 在 LINE Chatbot 中串接 Google Analytics 的經驗分享 - 和風信使

議程簡介
簡報
分享 LINE 數位版簡介

使用者增長框架

AARRR 模型

  • A (Acquisition): 獲取用戶
  • A (Activation): 產品互動,第一次使用
  • R (Retention): 提高留存,讓使用者願意回來
  • R (Revenue): 獲取收入
  • R (Referral): 使用者推薦其他使用者

如何蒐集增長框架用的數據

  1. 網頁跳轉 + UTM
    • Email 寄出的連結、Facebook 分享的連結加 utm
    • 加入 (R/ti/p/@id) 與預填文字(R/oaMessage/@id/text)使用短網址服務,分享短網址時加上 utm
  2. 使用 User-ID 功能
    • 將 LIFF 與 chatbot 後端 user session 併起來
    • GA 內啟用 User-ID 功能、建立 User-ID 視圖(View)
      • 視圖建了之後才會蒐集資料,越早建越好
    • app type 使用「行動應用程式」
  3. 後端送資料給 GA (via measurement protocol)
    • screenview event (行動應用程式)
    • 記得傳 userId
    • 記得先送 screenview 再送 event,不然 event 會蒸發
    • 可以用 Hit builder 測 payload
  4. 批次發送 screenview & events
    • measurement protocol 支援 /batch endpoint
    • 有限制(一次 20 hits、body < 16KB、單一hit < 8K)
    • 用 queue time qt 參數來補送最久 4 小時前的 hit
  5. LIFF 也埋 GA
    • 把使用者資料對在一起
      • liff.getProfile()userId
      • open chat 會拿不到
    • 紀錄 LINE 版本號
      • 要在 LINE 的 built-in browser 開才拿得到 getOS(), getLineVersion()
  6. Flex message 閱讀裝置數
    • pixel image 追蹤 (直接 type image + url 放 https://www.google-analytics.com/collect beacon)
      • LINE 會 cache image 所以要記得塞東西進 URL 做 cache busting
    • 追蹤 push(LINE 內建的追蹤功能,資料比較少,也無法追到個人)
    • 如果每個人 pixel 想放不同參數(userId)就無法群播,要用 push 一個一個推
  7. 追蹤 LINE notify
    • 可以送圖,但無法隱藏圖片
    • 直接丟 GA 的話會變成破圖的圖,要自架後端送 GA
  8. 儲存 LINE 後台 insight
    • friend demographics 無法取得歷史資料,可以寫爬蟲丟 GA

14:00 ~ 14:40 不要再叫我當那條龍了!開源機器學習系統部署設計模式—以次世代 Chatbot 客服系統為例 - Toby Liu

議程簡介
簡報
分享 LINE 數位版簡介

  • C2C 電商平台
  • 理解需求上的問題
  • 可以把需求放到 k8s 上
  • 一般都有樣板記錄下來
  • 非同步模式
    • 加了 queue/cache機制
  • 處理客訴、障害排除、純抱怨
  • 大模型的壞處是會有預測跑掉的問題
  • 先訓練後部署的樣式
  • 要知道現在 model 有沒有比之前好
  • 很常變動的話不適合綁在CI上面

DVC = 資料科學家的 git

保證模型的一致性

  • 怎麼限制 ML model
    • 使用 async 去處理,除非太肥的 model

14:50 ~ 15:10 LINE BOT 整合 AI ,隨時隨地聽學外文 - 柯克

議程簡介
簡報
分享 LINE 數位版簡介

設計發想

  • 台灣工程師的英文困境
    閱讀很強,但是口說不太行,很難拼湊出一個句子。
  • 工具的缺乏
    可以練習句子的工具太少。
  • 深度學習的發展:
    已更貼近自然發音。因此可以學發音。

為什麼做在LINE平台

  • 台灣人每天都在用
  • LIFF根本就是在做網頁
  • Chatbot Taiwan Developers 是很強的社群

為什麼用AZURE平台

  • 用app service 免費送一個 https。
  • .NET 體系的整合很順暢。
  • 提供大量的AI解決方案,而且有免費的額度。

Azure Cognititve Service

  • 微軟現成的AI解決方案
  • 包含影像、聲音、文字、人臉等等的工具。
  • 有一定額度的免費!!
  • 各大語言都有SDK,PYTHON 也有。

日文語音合成的困境

  • 用鬼滅來做例子
  • 古音和現代發音的不同(如水面斬的水面)
  • 漢字音讀和訓讀的不同
  • 只能用假名來解決

LIVE DEMO

  • 連火山矽肺病的英文都能說
  • Looks like love 的 love ,AI 合成語音還會拉長音@@

中華電信有在賣 AWS、Azure、GCP,和自家開發的 Hicloud

15:20 ~ 16:00 LINE Bot 設計模式 - 郭佳甯

議程簡介
簡報
分享 LINE 數位版簡介

Messaging API 功能介紹

Rich menu

  • 有一個圖片可以引導使用者使用,用程式客製化的可以看到不同的 richmenu
  • limitation: only visible in 1-on-1 chat, not in groups / rooms
  • 最多 20 可點擊區域

quick reply

  • 點擊之後整排會消失,單選
  • mobile only, not in PC

ImageMap

  • 50 個可點擊區塊

Flex message

  • 可以使用 json 來展示 Bot 上的前端工程
  • 講者覺得可以取代 image map

LIFF

  • 可以知道是誰開啟網頁(userId)
  • liff.sendMessage 送到聊天視窗(開啟 LIFF 的私聊 or 群組)

LINE Notify

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

  • 另一個官方帳號
  • 單向通知
  • provide by LINE

Template message

  • 不要用

獲取用戶資訊

https://docs.google.com/presentation/d/1PlUMItXtx3vTRa2US1kE1-Nr11GwqIePQoBN7IeptHE/edit#slide=id.g8e99f5982a_0_58

  • 群組成員:跟官方申請,若拿到綠色盾牌才能用
    • 否則就是默默紀錄加入、離開、講話的時候的使用者
  • 有些好友在群組裡面卻沒加官方群組

訊息內容

@標記:機器人可以拿到 @XXX 文字訊息,但無法分辨是否有 @ 成功

LINE bot 訊息被已讀

利用:

  1. flex message 可嵌入圖片
  2. 用戶在讀取訊息時會圖片被載入

用戶資訊

  • 申請 email permission 請 LINE 同意
    • 使用者也要同意,就拿得到
  • 位置
    • LINE beacon 沒有找到案例 XD

用戶電話號碼

  • 用問的
    • 可以再串接簡訊驗證

表單

  • 一些對話式表單才能做到的東西
    • ex: 貼圖
  • 大部分可以用網頁式,看情況

提供資訊給用戶

  • Rich menu
    • 多層次:如果選項很多,可以先顯示 5 個然後做個「下一頁」(如youbike today 小幫手)
    • 群組機器人不適用,如果做群組的話應考慮 flex message 做 menu

對話式 vs 點擊式

  • 內容多的狀況(類似搜尋)再用對話式

圖表

Flex message 圖表成本高;Image map 維護成本更高。

地點訊息

講者:分享地點功能真的沒人在用
點按鈕開 google map

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

訂閱資訊

LINE Notify 跟 LINE bot(一個 channel 只能放一個)可以共存在群組裡

推廣 bot

rich menu 的 LINE scheme: 醜,不行
LIFF 內 share target picker:UI 比較漂亮

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

QA

A: LIFF 可以知道自己在哪一個群組點開的

Select a repo