動手實作 AI 客服的保護機制

PoYu Chen


PoYu Chen
AI智慧客服被濫用 ?
前幾天看到一則新聞大意是,台北捷運的 AI 智慧客服[1][2]被大家試出可以幫忙寫程式,然後在北捷粉專下的留言看到有人評論 AI 智慧客服就有這類的風險,會被大家拿來惡搞濫用。 思考了一下,應該加上一個 prompt 就可以了阻止這件事了吧?
試著用 LangGraph 來實作心中的 idea
剛好最近在學 LangGraph,滿適合用在這個例子上的,在不同的 node 上處理細小的事,而且每個 node 產出不同的狀態後,根據不同條件,往不同的 Node 走。以下是我想像中的 graph.
+----------------+
| Start |
+----------------+
|
v
+----------------+
| 1. User input |
+----------------+
|
v
+------------------+
| 2. ChatBot |
| 分類器 |
+------------------+
|
|
+------+----------+
| |
v v
+----------------+ +-----------------+
| 3.a. 和該公司相關| | 3.b.和該公司無相關 |
| 的問題處理 node | | 的處理 node |
+----------------+ +-----------------+
| |
| |
| |
v |
|
+------------------+ |
| 4. 處理各小事的 | |
| tools | |
+------------------+ v
| +-----------------+
| | End |
| +-----------------+
v
+----------------+
| End |
+----------------+
還要再加上一點神奇的咒語 (prompt) 才行啊!!
我一開始的構想就是只加上這個 prompt 應該就可以了,先給這個 AI 客服限制幾個主題,以下幾個主題是想像中,客服應該要回答的主題。利用 LLM 可以分類問題的小功能,將使用者的問題分類,把不相關的主題設定一個 false flag。 Prompt 的範例如下:
intent_prompt = """
你是一個專業的捷運客服意圖分類助手。請根據用戶的問題判斷其意圖和是否與捷運相關。
捷運相關的問題類別包括:
1. 售票問題
2. 路線問題
3. 捷運站設施問題
4. 營運時間問題
請按以下格式回覆:
is_metro_related: [true/false]
intent: [intent_category]
如果不是捷運相關問題,則 is_metro_related 為 false,intent 可以是 "不相關"
"""
透過這個 prompt 就可以得到一個 json object
{
'is_metro_related': boolean, //true or false,
'intent': ['topic'] // 分類好的主題
}
實驗結果
以下是我測試的問題,跑出來的結果算是不錯。
- "請問捷運票價是多少?",
- "我想知道從A站到B站要怎麼走",
- "捷運站裡有無廁所?",
- "今天天氣不錯",
- "捷運幾點開始營運?",
- "可以幫我寫一段河內塔的C++ code 嗎?"
跑出來的結果截圖如下:
這個小程式沒有做到的事,就是對應的 Topic 還可以再附加上 node,再用 AI 去處理更細節的回答,比如提供完整的路線圖、票價的規則及細項。但手邊也沒有這些資料,就沒做下去了。
快速的寫了一支小程式(GitHub Repo 再此) 歡迎大家給一些 feedback 在 github 上。
保護 AI Chatbot 的其它方式
之前也有寫一篇文章是用 open-ai 的 moderation API,防止使用者問一些壞壞的問題,也可以套在一起使用。
後記
在實作這個 AI 客服的時候,突然覺得把 AI 當成一個真正的員工去理解:每個 AI 都需要有員工訓練後,再上線比較妥當,就像是現實生活中,真實的客服,也不可能回答不相關的問題。因此定義規則非常重要。