作者:陳啟煌 / 臺灣大學計算機及資訊網路中心程式設計師
隨著ChatGPT聊天機器人橫空出世,徹底改變了人們對聊天機器人的印象,不再是呆板地回復特定預設的問題,不僅可與人進行自然流暢的對話,亦能理解並回應複雜的問題,展現出前所未有的人工智慧和靈活性。面對這種突破性的技術,讓我們開始重新思考人工智慧的潛力,並期待未來更多的創新和應用。本文就嘗試利用聊天機器人的人工智慧,幫忙製作一個簡單的Line聊天機器人。
在聊天機器人對話中,Prompt的重要性不容忽視。它是引導機器人生成回應的關鍵,決定了對話的方向和品質。精確的prompt能夠幫助機器人理解用戶的意圖,提供更準確和相關的回應。也能避免誤解和錯誤。如何利用合適的Prompt導引機器人逐漸生成成果。為了讓大家能免費的複製重現本文流程,本文採用微軟免費版Copilot,及Google的Gemini。本文詳實記錄各個prompt及機器人的回應。
第一個Prompt:如何建立一個line bot
Copilot反應如下:

圖一、如何建立一個line bot Copilot之回應
由以上的回答,可以獲知比較line bot建置除程式撰寫部分的前置作業及各項步驟,如了解需要申請line developers帳號、建立Messaging API Channel、取得Channel Access Token和Channel Secret、設置Webhook URL及Python、Node.js等)來開發你的Bot。接下來為了以Python實作並運用Gemini除錯,預先設定本文使用Google Colaboratory 執行實作一個簡單的Line聊天機器人。
第二個Prompt:如何利用google colab建立一個line bot
Copilot反應如下:


圖二、如何利用google colab 建立一個line bot Copilot之回應
以上的回應,按照順序就是在colab的虛擬機加掛Google 磁碟機,然後安裝LineBot所需要呼叫的套件,如pyngrok, Line Bot SDK,設置ngrok這裡需要一個ngrok authToken,這個步驟也可以用Copilot詢問如何取得。為了避免主題失焦,此部分省略。後面接的linebot的webhook程式,是以flask架構跑網路服務串接LineBot API。在這個程式範例,這裡很明顯也需要授權,需填入Channel Access Token, Channel Secret;最後一段程式碼是透過ngrok的服務將本機port 5000的服務借接到支援SSL的公開網址;如此line webhook才能透過這個網址呼叫此虛擬主機的服務。將這一些程式片段陸續填進Google Colab的程式區塊,執行看看是否能成功執行?
執行的結果,步驟1:第一次需要相關的授權,步驟2:可以順利下載安裝模組套件,步驟3:會安裝ngrok套件,並依照你輸入的ngrok token,在本機產生 授權檔ngrok.yml。步驟4:會在本機port 5000 啟動Web服務,主要接收/callback目錄的呼叫,然後把接收到的文字透過line_bot_api套件呼叫reply_message函式送回LineBot;且這個服務會一直執行不停。這時無法執行其他程式區塊,只好先停掉步驟4。執行步驟5時會出現錯誤訊息如下圖三所示。如果懂得除錯的會看到有錯誤authentication failed。然後確認一下是否ngrok的token是否輸入錯誤?可以把這些錯誤訊息貼到Copilot。不過獲得的訊息也會是請你確認ngrok的token 是否輸入錯誤,然後重複步驟3。

圖三、Copilot 提供的程式碼在Colab執行失敗狀況
是否就止步於此?發現在colab執行狀況下詳上圖三下面,有說明錯誤的按鍵可以執行。會啟動另外一個人工智慧模組Google的Gemini幫忙除錯。會給你建議怎麼修改程式。還是請你確認ngrok的token,並將步驟3設定token的語法插入在步驟5前面。在執行一次;依然錯誤。但還可以繼續請Gemini說明錯誤,這一次Gemini的建議修改方式
ngrok.set_auth_token(<ngrok token>)

圖四、利用Colab內建Gemini除錯後執行成功
原來有另外的呼叫方式可以使用。即可以把本機port 5000對應到https://9ae7-34-145-25-156.ngrok-free.app,(每次呼叫會變動)。這時去執行步驟4。也無法重這個公開網址異呼叫本機服務。
看起來要把這兩個步驟合併在一起,想了幾個prompt Copilot給出的答案還是分了幾個步驟。如使用Flask來處理LINE Bot的Webhook並利用ngrok取得一個服務網址、使用Flask來處理LINE Bot的Webhook並利用ngrok.set_auth_token設定ngrok 取得一個服務網址等;最後利用Copilot會有前後文,下了Prompt將建立Flask應用程式和啟動ngrok合併成一個程式。

圖五、將建立Flask應用程式和啟動ngrok合併成一個程式 Copilot之回應
省略上面重複的程式,如圖五。將程式把複製進colab,可以正常執行。透過ngrok對應出來的網址:https://52db-34-145-25-156.ngrok-free.app,可呼叫到本機服務,且在colab下方會有訪問的紀錄。

圖五、將建立Flask應用程式和啟動ngrok合併成一個程式Copilot之回應
最後就是執行步驟6,把這個網址填到Line Developer網站,設置webhook URL。

圖六、實作LineBot回應之截圖
設定好後,在Line介面與此Line Bot對話,會呈現你說什麼,他回說什麼的簡單鸚鵡機器人。如果要進一步設計機器人的動作,在圖二第4步驟設定flash應用程式的callback函式要加以處理,至於要如何處理就看設計者要有什麼功能,需要自行加入。
結論
透過逐個的Prompt確實可以導引出聊天機器人提供正確的程式碼;遇到程式發生錯誤,聊天機器人可以幫忙解釋錯誤,並提供建議作法;有觀察到生成式AI會用最有可能的答案答覆的特性,會造成除錯一直提供本案環境無法使用的建議(這些建議在用實體主機執行沒有問題);不過透過聊天機器人對於回應會有上下文概念,可以明確請他做兩個步驟合併的回應。應該也可以請他避開之前無法使用的回應,透過描述使用環境得到最後合適的解答。
本題目原本是在開給非資訊科系的學生實作LineBot的課堂練習使用案例,本文希望透過生成式AI即問即答的特性,可以讓學生嘗試面對一個新需求,在生成式AI聊天機器人的輔助之下可以獨立解決問題。