[Golang][LINE Bot SDK] 如何更新 Golang LINE Bot SDK v8 OpenAPI(Swagger)

前情提要: 2023 年 LINE Bot SDK 積極推動 OpenAPI (a.k.a. swagger) 的標準介面。透過與 OpenAPI 的整合, LINE Bot SDK 有了許多好處(文章後半段補充)。本篇文章將稍微解釋一下,OpenAPI 導入後的優點,並且帶著大家一起來將有使用 LINE Bot Go SDK v7 版本的升級到 v8 的版本。 本次的程式碼,會用前幾篇文章提到的: https://github.com/kkdai/linebot-gemini-pro 作為範例。 支援 OpenAPI 的好處 LINE Bot Go SDK 近期也在 2023/11 月也將版號更新到了 v8,並且正式支援 OpenAPI。 那麼簡單的來說,一個 SDK 套件支援 OpenAPI 有哪些好處呢? 1. 標準化的 API 設計 許多 API 呼叫的方式,變得更加的直觀。也比較容易了解。後面也會稍微提到。 2. 程式碼自動生成 以往要開發新的 API Entry 的時候,都要透過發送 issue -> 發送 PR -> 審核 -> 發布後才能發送到開發者手中。 但是導入後, LINE Bot SDK 使用的方式,是透過 Github Action 來自動去將最新的 LINE OPENAPI Repo抓下來後,根據新的變動產生相關的對應程式碼。 (參考上圖)(參考 Code Generator 產生的commit) 更多好處: 自動化文件生成:有許多相關文件可以幫忙自動化產生 OpenAPI 的文件。 客戶端與服務端驗證:透過 OpenAPI 的導入可以達成自動化測試與 Consumer-Driven Contract 的驗證。 API 生態系統工具的整合等等 開始 Migrate LINE Bot Go SDK from v7 to v8 先修改套件版本 v7 -> v8 先加入以下三個套件,接下來會解釋一下: "github.com/line/line-bot-sdk-go/v8/linebot" "github.com/line/line-bot-sdk-go/v8/linebot/messaging_api" "github.com/line/line-bot-sdk-go/v8/linebot/webhook" linebot: 主要處理 v7 相關的內容,儘量不要使用。會逐步 deprecated 。 messaging_api : 發送訊息用。 webhook: 接受訊息與處理相關 event 用的。 接下來將慢慢整合,並且開始說明相關套件使用到的部分。 開始整合,並且說明相關變動之處: “github.com/line/line-bot-sdk-go/v8/linebot/webhook” 負責接受 Webhook 相關資料,裡面包括兩大系列: MessageEvent 要處理相關訊息 Webhook 包括: TextMessageContent: 文字訊息。 StickerMessageContent: 貼圖訊息 .. ImageMessageContent: 圖片訊息,由使用者上傳的相片或是圖片訊息。 其他相關 Event 處理,包括: FollowEvent: 有新的好友。 PostbackEvent: 這個比較常用,就是透過 postback...
繼續閱讀

[Cloud Platform] 身為 AI (LLM) Engineer 關於雲平台的挑選 Heroku v.s. Render

前情提要: 有在持續關注我的部落格的朋友,都知道我喜歡透過 Heroku 來快速部署我自己的雲服務 (或是 LINE Bot)。 當初 Heroku 就打著好上手,並且有免費方案的流程來讓許多開發者都有使用到。但是在 2022 十一月之後,就開始收費的 Heroku 也開啟許多人跑走的路途。這邊可以查看以下相關資料: 關於從 Heroku 跳到 Render 這件事情 五個替代 Heroku 的平台免費測試執行 .Net Core 的文字辨識 OCR 網頁程式 從 Heroku 遷移至 Fly.io 由於我手上的 Hobby Project 大概有 50~80 個,所以也就選擇先留在 Heroku 看看? (要搬移真的太累) 每個月五美金的費用,也算是中規中矩,畢竟也是某些程度吃到飽(1000 dyno hours) ,也足夠我用。 但是又聽到朋友們的提醒與鞭策,於是來認真看一下跟測試結果。 tl;dr 先講結論 Heroku ($5) 雖然沒有免費,但是共用的 Eco Dyno 其實後夠力。 Render ($7) 每一個要單獨收,有點貴。 我會開始放一些到 Render $0 的方案,原因後提。 兩個都部署跟發布,但是我還是會留在 Heroku ($5) (因為它是共用 1000 hours) 價位比較 (based: 2024/01/02) Render 的價格跟性能: (free/Starter) 根據 Render vs Heroku by Render 有一些比較表: 認真看了一下 Render 的費用 看起來 Free-tier 就有 512MB RAM,很不錯(但是要注意 CPU 0.15) 但是要注意 Free Bandwidth 是 100GB ,這個感覺會踩到。 更別說有免費 90 天的 PostgresSQL 資料庫 Redis 有 25MB 也夠用,但是會砍掉。 Heroku 的費用與效能部分 沒有 Free-tier 最低收費 Eco $5 根據 Heroku Dyno Types: 效能其實不比 $7 差太多(當然遠遠多於 Render Free-Tier) 快速測試結果 拿了專案 https://github.com/kkdai/linebot-gemini-prohttps://github.com/kkdai/linebot-gemini-pro 來測試,發現: 回覆速度上 Heroku ($5) 跟 Render ($0) 不會差太多。 (Golang App) 但是上傳照片後,要處理 Render ($0) 就會炸掉。 由於記憶體兩者都是 512MB ,考量可能問題出在 CPU 上面。 交叉測試: 加上我另外一個小專案: https://github.com/kkdai/pdf_online_editor?tab=readme-ov-file 測試結果 Render ($0) 一樣會炸掉。 測試檔案...
繼續閱讀

[Golang][Gemini Pro] 使用 Chat Session 與 LINEBot 快速整合出有記憶的 LINE Bot

前提 前幾篇的文章 [Golang] 透過 Google Gemini Pro 來打造一個基本功能 LLM LINE Bot 曾經提過,如何整合基本的 Gemini Pro Chat 與 Gemini Pro Vision 兩個模型的使用。 本次將快速提一下,打造一個具有記憶體的 LINE Bot 該如何做。 相關開源程式碼: https://github.com/kkdai/linebot-gemini-pro 系列文章: 使用 Golang 透過 Google Gemini Pro 來打造一個具有LLM 功能 LINE Bot (一): Chat Completion and Image Vision 使用 Golang 透過 Google Gemini Pro 來打造一個具有LLM 功能 LINE Bot (二): 使用 Chat Session 與 LINEBot 快速整合出有記憶的 LINE Bot(本篇) 使用 Golang 透過 Google Gemini Pro 來打造一個具有LLM 功能 LINE Bot (三): 使用 Gemini-Pro-Vision 來打造名片管理的聊天機器人 什麼叫做有記憶的聊天機器人 原本在 OpenAI Completion API 是採取一問一答的方式,也就是你問一次,他回答。 下一次詢問的時候,就會完全的忘記。這邊提供網頁上的說明程式碼: from openai import OpenAI client = OpenAI() response = client.completions.create( model="gpt-3.5-turbo-instruct", prompt="Write a tagline for an ice cream shop." ) 在之前,如果需要有記憶的功能,就需要把之前的問與答都附在問句的前面。到了之後, OpenAI 推出了 ChatCompletion 的功能,相關的程式碼如下: from openai import OpenAI client = OpenAI() response = client.chat.completions.create( model="gpt-3.5-turbo", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "Who won the world series in 2020?"}, {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in...
繼續閱讀

[線上演講筆記] Open-Source AI Projects at UC Berkeley & LMSys: Vicuna and Chatbot Arena

講者資訊 UC Berkeley 的 Wei-Lin Chiang (Winston Chiang) 於 12/29(五) 來陽明交大演講, 主題是有關 Large Language Model (LLM), 尤其是將會提及他們在 UC Berkeley 開發的一個十分知名 LLM – Vicuna. 該LLM今年推出後即已有+500 citations, 超過百萬次下載, 江韋霖是主要作者之一. 歡迎有興趣的老師同學踴躍參與. 時間:112.12.29(五) 10:30-12:00 地點: 陽明交大工程三館 114室 演講者: Wei-Lin Chiang, 江韋霖 (University of California, Berkeley) 演講題目: Open-Source AI Projects at UC Berkeley & LMSys: Vicuna and Chatbot Arena 演講內容 Why Vicuna ? GPT-3 只使用 “Few-Shot” 開始產生其他語言結果。 LLM 成果遠遠比 NLP 的成效更好,開始大量投入相關的開發。 一開始 GPT3 只能 complete ,無法達到 Q&A 。 透過 “Instruct-GPT” 讓只會 Complete 的 GPT3 開始能做 Q7A Stanford 做了 Alpaca ,於是 UC Berkeyley 也想做。 七萬筆數據。 2023 三月 release https://lmsys.org/blog/2023-03-30-vicuna/ 資料 -> 質量提高 -> 發現產出的結果也會提高。 價錢便宜一半,資料量級跟 Stanford 差不多。 Vicuna - Demo site https://chat.lmsys.org/ Data 經過清洗 Blog 的影響: 500 引用 3M 訪問 看圖的 model 也做了。 Vicuna - Limitation 數學, coding 有限制,回答不好。 後來多拿相關資料去優化。 接下來面對問題: 成功來自於「高質量」的數據 (data) 支出不便宜,但是資料搜集不易。 沒有好的 Evaluation 機制。 Benchmark 可能已經被 LLM 看過了。 Chat Area 開放的 ChatGPT (免費) 有許多 model (開源) 學校希望有更多回饋,與相關 RLHF 的資料。 放上所有開源 models 讓使用者評分相關問題,誰回答比較好。 作為資料的搜集。...
繼續閱讀

[TIL][Heroku][Golang] 使用 Github Release 來 Deploy 服務到 Heroku

Github Action 上的 CICD - Go Build 經常在教同學要打造自己的 side Project 的時候,要透過 Github 把自己的實際產品的想法表現出來。 其中,很重要的除了「文件的撰寫上」,那麼就會是「CICD」的實踐。 範例程式 Repo: kkdai/bookmark-makerserver: A IFTTT MakerServer to help you post your tweet to github issue as a bookmark 在 Github Action 上有一個 Golang 基本的 CICD 工具 Golang Build name: Go on: push: branches: [ master ] pull_request: branches: [ master ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: 1.21 - name: Build run: go build -v ./... - name: Test run: go test -v ./... 這個就是 Github Action 提供的基本範本 ,可以讓你在 Pull Request 的時候跟 Merge 之後來跑 Go Build 的相關指令。 Github 上的部署到 Heroku 的設定 這邊也可以參考一下 Heroku 提供的基本設定教學與安裝 Github Action 的方法。 name: Deploy on: push: branches: - master jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: akhileshns/[email protected] # This is the action with: heroku_api_key: $ heroku_app_name: "YOUR APP's NAME" #Must be unique in Heroku heroku_email: "YOUR EMAIL"...
繼續閱讀

[論文心得] Gemini vs GPT-4V: A Preliminary Comparison and Combination of Vision-Language Models Through Qualitative Cases

論文名稱: Gemini vs GPT-4V: A Preliminary Comparison and Combination of Vision-Language Models Through Qualitative Cases https://arxiv.org/abs/2312.15011 快速總結 裡面透過之前微軟發表過的論文中的相關測試案例外,本篇論文也加上幾個類別的案例。 tl;dr GPT-4v 比較簡潔中確性高,但是 Gemini-Pro 的敘述比較清楚。 裡面有很多圖片與相關案例,蠻值得一讀。 幾個有趣案例 當個偵探 都有看出幾個相關的點,蠻適合拿來做一些 side-project 。 :p 判斷鞋子的品牌 有判斷出 NIKE Air Force 1 我覺得蠻厲害的。 讀論文第一頁圖片 成效不錯,如果沒有 arxiv 的資訊可以抽取。這會是一個方法。
繼續閱讀