前言
平時我們經常需要管理/安排行程和資訊。這篇文章將介紹我是如何透過 Google Calendar 與 LangChain,讓我更快在 LINE Bot 上可以加入個人行事曆。同時,我也將分享有關使用 Google Calendar 的好處,以及如何更有效地利用 LangChain Function Agent 來簡化程式碼開發過程。相信這對於建立 LINE Bot 以及各種相關應用的開發者來說會是一個不錯的範例,讓我們就往下看下去吧!
Slide: https://speakerdeck.com/line_developers_tw/first-time-lanchain-line-bot
範例程式碼:https://github.com/louis70109/BookingStep
歡迎試玩 LINE Bot:https://lin.ee/92O5Od8
介紹
為什麼選擇 Google Calender?
我一直在使用 Google 日曆,主要是基於以下原因:
- 在 Cambly 上課時,我可以將課程資訊直接綁定到 Google Calender,方便我管理下班後的時間
- Apple Calender 可以收來自 Google Calender 的事件,這對於熱愛使用蘋果產品的我來說非常便利,可以在手機、電腦和平板上同步查看我的行事曆 (只需要一個 iCloud)
- Google 日曆的同步速度很快,幾乎可以立即反應行事曆狀態,讓我在規劃時間方面更加順暢
- 同步很快,體感約<60s
- 標題、時間:對於我來說是必須的,個人行事曆不用像公司的這麼完整,我只要知道時間跟要做什麼事情就好
- 地點、描述:話雖如此,如果行事曆裡面能有更完整的內容當然更好,但沒有也沒關係,只要能幫助我回想就可以了,因此這兩個對我來說是選田
喜歡程式碼可以看這邊
以 python 來說,因為是打 GET,不一定每個瀏覽器都會幫忙處理 unicode 的問題,為保險起見都需要先用 urllib.parse.quote("STRING")
來包,openExternalBrowser
後面在說~
過去我怎麼下 prompt?
在公司內部的工作坊中,學到了上圖的 prompt 可以告訴 AI 如何幫我產生我對應要的東西,從角色到要作的事情說清楚,但在這裡有沒有發現,我下面寫的一些髒 code,都要確保它(AI)若沒給東西時我應該怎麼處理,甚至還因為他只能給字串版本的 dict,要暴力破解把他轉成 dict,實在是不太好的作法…哈哈
什麼是 LangChain?
引用至 Evan 寫的文章 - Cloud Summit 2023 - 結合生成式 AI 打造有趣的 LINE Bot 應用
要讓你的 LINE Bot 做出以上的事情,你需要很多很多的相關 Prompt 。不論是定義 LLM 的模型該如何解讀你的文字,該如何挑選即將要執行的動作,或是如何將結果作為有效的拆解,到把以往訊息得內容加以存在 Prompt 之中。
但是透過 LangChain 你可以將這些工作拆解成一個個的小方塊,讓你打造相關服務與應用的時候不用在重複使用那些的 Prompt ,就可以快速打造出來。 以下透過一些簡單的程式碼範例來講解使用了 LangChain 之後,你的程式碼會變得多簡潔。
LangChain Function Agent 帶來了什麼好處?
如果有在 Python 作過型別定義,一定對於 Pydantic 不陌生,因為 LangChain 有引入它方式,幫助 LLM 定義需求時可以下相關訊息(description),透過定義完成後,在 def _run()
裡面 LLM 會幫你把參數放入對應的欄位,並且讓開發者可以快速拿參數做事情。
而更神奇的是,你可以在 description 裡面多寫一些內容,像是把 台
<-> 臺
之類的幫你對應好,這樣是不是想到能解決了超多事情呢?
用 Function Agent 的好處是,Web 開發者可以把生成式
這件事,用 web server 的邏輯開發,以上述為例:定義環境變數-前處理-init-Run server,霎那間還真的以為自己在寫 web service?如此一來就可以更直覺得去寫你想要的 AI 解決方案,前處理想要放更多資訊,只要定義好 class,基本上很多事情都很好解決了!
透過 LangChain,我可以少學/寫很多的黑魔法,甚至在 description 中就可以判斷今天、明天、兩天後…等等的只有人類對話能懂的東西,雖然還不太懂 LangChain 後面怎麼作,但如此一來我也省處理了很多把 prompt 一直串起來的功了。
為什麼要在 LINE Bot 用?
一直沒說為什麼要在 LINE Bot 裡面使用,主要是我個人日常就會準備一隻 Bot 來存我臨時的訊息,抑或是在群組時常常都會有很片段的消息來約時間,通常最後都會有感覺某個時間要出門,結果往往時間到就忘了也找不到訊息在哪…
考慮使用的原因是,因為 LINE Bot 是 event-driven 的方式,我會在桌機板的 LINE 把群組訊息複製起來貼到 LINE Bot,訊息樣是會很像以下:
1 | 01:52 🤖測試用🐤 你明天想去吃範嗎? |
如此一來就能達到類似上述的功能,讓 LangChain 幫忙整理訊息並放到對應 Google Calendar 的 query parameter,這樣就能加到個人行事曆中了!
更新:使用 Youtube 以及 wikipedia Tool
看 LangChain 文件時發現它其實有許多 Tool Plugin,支援了各式各樣的服務,依照我這個行事曆機器人,我選擇支援了 Youtube & Wikipedia,只要把相依套件安裝完,基本上就可以引入使用,大概如下:
1 | pip install youtube_search |
1 | from langchain.tools import YouTubeSearchTool |
YouTubeSearchTool API Reference:
1 | tool = YouTubeSearchTool() |
結果:
1 | "['/watch?v=VcVfceTsD0A&pp=ygUMbGV4IGZyaWVkbWFu', '/watch?v=gPfriiHBBek&pp=ygUMbGV4IGZyaWVkbWFu']" |
官方文件中其實有很多大密寶,我也透過這樣挖了好多東西~哈哈哈
結論
這次的分享先來了解一下 LangChain Function Agent 帶來的魔力!讓我少研究很多 OpenAI 黑魔法的時間,甚至很多程式碼寫起來跟平常寫法都很像,在大 AI 時代對於日常用 Python 寫應用的工程師是非常友善的!如果你也正在關注相關應用,或許可以參考本篇文章唷!
活動小結
立即加入「LINE 開發者官方社群」官方帳號,就能收到第一手 Meetup 活動,或與開發者計畫有關的最新消息的推播通知。▼
「LINE 開發者官方社群」官方帳號 ID:@line_tw_dev
關於「LINE 開發社群計畫」
LINE 於 2019 年開始在台灣啟動「LINE 開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,已經舉辦 30 場以上的活動。歡迎讀者們能夠持續回來查看最新的狀況。詳情請看: