0%

在 Cloud Run 上部署有 Open Data 功能的 LINE Bot | 摘要王, 天氣, 紅外線

前言

此為 Cloud Run + Firebase + Gemini 工作坊中的操作文,如果有興趣針對有記憶能力的 LINE Bot 以及整合各方 Open Data 歡迎參考以下的內容

LINE Bot & Gemini Pro 設定細節請參考: 旅行小幫手 LINE Bot 文章

事前準備

關於 Gemini API Price

根據官方網站: https://ai.google.dev/pricing?hl=zh-tw

細節請參考: 旅行小幫手 LINE Bot 文章

流程圖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
 ┌─┐
"│
└┬┘
┌┼┐
│ ┌─────┐ ┌──────────────┐ ┌────────┐ ┌──────┐
┌┴┐ │Group│ │Webhook_Server│ │Firebase│ │Gemini│
User └─────┘ └──────┬───────┘ └────────┘ └──────┘
│ 傳送文章訊息 │ │ │ │
│ ──────────────>│ │ │ │
│ │ 傳送用戶指令 │ │ │
│ │───────────────────>│ │ │
│ │ │ 儲存聊天狀態在 Realtime DB│ │
│ │ │ ────────────────────────> | │
│ │ │ 儲存完畢 │ │
│ │ │ <──────────────────────── | │
│ │ 回傳已完成文字 │ │ │
│ │<───────────────────│ │ │
│ 輸入 "!摘要" │ │ │ │
│ ──────────────>│ │ │ │
│ │ 傳送用戶指令 │ │ │
│ │───────────────────>│ │ │
│ │ │ 抓取聊天記錄 │ │
│ │ │ ────────────────────────> | │
│ │ │ 回傳清單 │ │
│ │ │ <─────────────────────────| │
│ │ │ 下prompt 進行摘要運算 │
│ │ │ ────────────────────────────────────────────>|
│ │ │ 回傳摘要清單 │
│ │ │ <────────────────────────────────────────────|
│ │ 回傳摘要資訊至群組 │ │ │
│ │<───────────────────│ │ │
User ┌─────┐ ┌──────┴───────┐ ┌────────┐ ┌──────┐
┌─┐ │Group│ │Webhook_Server│ │Firebase│ │Gemini│
"│ └─────┘ └──────────────┘ └────────┘ └──────┘
└┬┘
┌┼┐

┌┴┐

先部署 - 從 Cloud Run 介面來連結 GitHub 持續部署

  1. 首先先 fork 專案 - linebot-gemini-summarize,方便後續操作
  2. 接著到 Cloud Run 首頁,點選上方的建立服務

  1. 選擇外部資源(GitHub),從專案中來偵測部署,此步驟後續會連動 GitHub

  1. 此步驟需要確保認證以及Ingress control 的部分,因為從 LINE 伺服器打來的流量對 Google Cloud 來說都是外來的,因此需要確定選項

  1. 在部署之前,需要先設定環境變數,避免後續部署失敗;把該放入的環境變數放入
    1. 環境變數清單請看 GitHub URL
    2. LINE bot / GEMINI pro / Firebase 的取得詳細請往前看 事前準備
    3. API_ENV 需要為 production,否則會找 .env 檔案位置

  1. 在部署的同時可以到 GitHub 專案上看看部署的連動狀態,如此一來只要 GitHub 專案只要有更改,就會自動部署過去 Cloud Run

完成之後就可以在 Cloud Run 介面上看到 Container 建立完成也部署上去

摘要王 v2

在 2022 年底,Evan 寫了一篇如何透過 ChatGPT + LINE Bot 的群組摘要王文章,如今用 Gemini Pro 再做一次效果也會差不多,當時的作法是用 Golang 的 queue 方式去處理,以下介紹另一個作法 - 用 Firebase 當作對話 session 的儲存位置,實現記憶這件事

2023/11/06 訊息摘要功能上線!用 AI 總結社群聊天室訊息!

這次做的摘要王主要用以下技術,設定細節請參考「LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(2): Firebase Database 讓 LINEBot 有個超長記憶」:

  • Firebase
    • 儲存對話歷史
  • Gemini Pro
    • 透過 Firebase 的歷史對話,協助判斷
  • 以下選填
    • Cloud Run: 部署用
    • Python: 快速開發

接著建立一個群組,並將剛剛建立的官方帳號邀請進去,此步驟需要到 LINE Dev Console 設定,否則會邀請不進去。

邀請進去後,群組內從 LINE TODAY 中抓取新聞片段貼貼至群組中,接著打上 !摘要 讓 LINE Bot 幫你整理!

摘要王 v2 - Sample code
試題:範例為列出五個項目,修改 prompt 找出群組的大家最近關注的事項

結果截圖

整合天氣模組

請在專案中的 chatbot 判斷式中加入程式 & 套件放入 requirements.txt
抓取天氣 API 的 Python code

衛星雲圖 - 是否有雲層

有時候光看氣象根本不準,外面雨到底要不要下呢? 請 Gemini vision 來幫忙看看台灣上方是否有大量雲層經過

  • 先天限制:兩個小時內會有圖片,當前時間的前十分鐘不會有照片
    • ex: 當前是 14:30,14:20~14:30 都不會有照片
    • 可以試著用時間套件+判斷式來檢測

參考以下 code,請在專案中的 chatbot 判斷式中加入程式 &套件放入 requirements.txt:

地板是否為濕的? (Extra,需要透過爬蟲抓取 CCTV 影像)

如果你有常常需要外出的活動(跑步、滑板、打球…etc),在台北經常需要確認天氣,除了看中央氣象局,可以透過 Gemini Vision 當作 OCR 用,判斷地板是不是濕的

SkatePark code

以下的 code 的網址為範例,可以抓任何網址為 .jpg 結尾的丟進去試試看。
請在專案中的 chatbot 判斷式中加入程式 & 套件放入 requirements.txt

活動小結

立即加入「LINE 開發者官方社群」官方帳號,就能收到第一手 Meetup 活動,或與開發者計畫有關的最新消息的推播通知。▼

「LINE 開發者官方社群」官方帳號 ID:@line_tw_dev

關於「LINE 開發社群計畫」

LINE 於 2019 年開始在台灣啟動「LINE 開發社群計畫」,將長期投入人力與資源在台灣舉辦對內對外、線上線下的開發者社群聚會、徵才日、開發者大會等,已經舉辦 30 場以上的活動。歡迎讀者們能夠持續回來查看最新的狀況。詳情請看: