[iThome Cloud Summit Lab][Python] 透過 Cloud Function (Cloud Run) + Firebase 與 Gemini Pro Vision 打造一個旅遊小幫手 LINE ChatBot

image-20240702204105183

LINE 2024-07-02 23.42.02

前言:

本篇文章主要是 iThome Cloud Summit 2024 Lab 的課程內容

這裡可以看一下投影片內容,在緊接著來看 Lab 實作的流程教學:

課程目標

這個工作坊適合對 ChatBot 開發、雲端服務或機器學習有興趣的開發者、學生或任何技術愛好者。無論你是想擴展你的技能集,還是對打造智能旅遊助手有獨特的想法,這個工作坊都將為你提供實踐經驗和深入知識。

課程綱要

第一部分:了解基礎

Cloud Function 和 Firebase 簡介:學習這些平台的基本概念以及它們如何協同工作來支持應用程式的後端。

LINE ChatBot 的運作原理:深入了解 LINE ChatBot 的架構和 API,以及如何與用戶進行互動。

第二部分:動手實作

設置 Firebase 環境:實際操作,建立 Firebase 專案並配置所需的服務。

開發 Cloud Function:學習如何編寫和部署 Cloud Function 來處理 ChatBot 的邏輯和資料存取。

整合 Gemini Pro Vision API:探索如何使用 Gemini Pro Vision 的 API 進行影像識別,並將其應用於收據管理。

第三部分:ChatBot 功能開發

旅遊資訊查詢:實現一個功能,讓用戶可以透過 ChatBot 查詢旅遊相關資訊。

收據上傳與識別:開發一個系統,讓用戶能夠上傳收據圖片,並利用 Gemini Pro Vision 的技術自動識別和整理收據資訊。

第四部分:部署與監控

ChatBot 的部署:學習如何將 ChatBot 部署到生產環境中,讓真實用戶開始使用。

監控與維護:介紹如何監控 ChatBot 的運行狀況,並進行必要的維護。

學員自備裝置

1.可連接網路筆電

2.Google Cloud 帳號

3.LINE 帳號

學員基礎能力需求

Python

Cloud Deployment

事前準備:

  • LINE Developer Account: 你只需要有 LINE 帳號就可以申請開發者帳號。
  • Google Cloud Functions: Python 程式碼的部署平台,生成供 LINEBot 使用的 webhook address。
  • Firebase:建立Realtime database,LINE Bot 可以記得你之前的對話,甚至可以回答許多有趣的問題。
  • Google AI Studio:可以透過這裡取得 Gemini Key 。

關於 Gemini API Price

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

image-20240410164827279

申請 Gemini API Key

  • 到 Google AI Studio https://aistudio.google.com/
  • Click “Get API Key”
  • 選擇你已經有綁定信用卡的付費帳號,來取得 API Keyimage-20240412195805278

申請一個 LINE 聊天機器人 (Messaging API)

image-20240410165008871

  • LINE Developer Console )並且登入 image-20240410165104899
  • 在挑選 Channel 的時候,如果要申請 LINE Chatbot (官方帳號),就要申請 Messaging API image-20240410170120876
  • 相關資料填寫上:
    • Cmpany or owner’s country or region:
    • Channel Name: 也就是你的 LINE Bot 名稱。
    • Channel description: 相關敘述來描述你 LINE Bot 做什麼。
    • 其他都可以隨便填寫即可。
  • 接下來要到 Messaging API Tab 執行以下設定:
    • Auto-reply messages: 關閉它 image-20240410170924360
  • 接下來要取得兩個重要的參數:
    • Basic Setting Tab 下方的 Channel secret image-20240410171544805
    • Messaging API Tab 下方的 Channel access token (long-lived) image-20240410171731815
  • 目前先到這邊,稍後還會回來設定相關 Webhook 。

建立一個 Cloud Run 服務

image-20240702213018935

  • 選擇好 Source Repository (應該是你自己的名字)

image-20240702213127188

  • 透過 Dockerfile 來啟動

image-20240702213157101

  • 機器設定可以挑選任何區域,但是 Authentication 要挑選 Allow unauthenticated invocations

Google Chrome 2024-07-02 21.32.25

  • Container(s), Volumes, Networking, Security 相關設定,需要將環境參數寫進去。
    • ChannelSecret: Your LINE channel secret.
    • ChannelAccessToken: Your LINE channel access token.
    • GEMINI_API_KEY: Your Gemini API key for AI processing.

image-20240703010240455

第一階段成果 - Gemini Pro 小幫手

image

第二階段: 讓我們來加上 Firebase Realtime Database

申請 Firebase Database 服務

  • 記得到 Firebase Console,直接選取你現在有的專案。(可能叫做 My First Project?)

  • 建立一個 Firebase Realtime Database 等等會用到

    image-20240413212830827

  • 地區選美國

    image-20240413212903957

  • Start in “lock mode”

    img

  • 為了開發方便,到 “Rules”設定成可以寫跟讀取,千萬注意:

    • 這是為了測試,請勿用在對外環境
    • 這是為了測試,請勿用在對外環境
    • 這是為了測試,請勿用在對外環境

image-20240413213202354

  • 記住哪個 URL (注意!之後要正式上線,需要改回權限),並且加上一個項目: “BwAI

image-20240413213802313

建立一個 Cloud Run 服務

image-20240702213018935

  • 選擇好 Source Repository (應該是你自己的名字)

image-20240702213127188

  • 透過 Dockerfile 來啟動

image-20240702213157101

  • 機器設定可以挑選任何區域,但是 Authentication 要挑選 Allow unauthenticated invocations

Google Chrome 2024-07-02 21.32.25

  • Container(s), Volumes, Networking, Security 相關設定,需要將環境參數寫進去。
    • ChannelSecret: Your LINE channel secret.
    • ChannelAccessToken: Your LINE channel access token.
    • GEMINI_API_KEY: Your Gemini API key for AI processing.
    • FIREBASE_URL: Your Firebase database URL.

image-20240702213433321

LINE Bot 完成最後設定

  • 到 “Messaging API” Tab
  • 填入 “Webhook URL” 數值,將剛剛得「觸發網址填上去」
  • 更新(update)後,使用 “Verify” 看看有沒有設定錯誤。
  • 如果沒有問題,可以打開「Use webhook」

image-20240412214745544

需要注意事項:

1. 發生 Error “Cloud Build trigger creation failed. Required role roles/iam.service/run.admin, roles/iam.services/iam.serciceAccloutUser”

image-20240703134145163

第一次建立 Google Cloud 專案之後,如果馬上使用 Cloud Run 就會發生這樣的錯誤。 主要是因為預設的 Compute Engine default service account 的權限不足。 修改方式如下:

  • IAM 的設定畫面
  • 修改 Compute Engine default service account 權限
  • 確定增加兩個權限
    • Cloud Run Admin
    • Service Account User

參考以下圖片:

Google Chrome 2024-07-03 13.51.05

2. 要注意一下 Cloud Function / Cloud Run Instance 開的伺服器夠不夠大

  • 如果 Firebase 資料放太多,要小心記憶體可能會不夠。記得 Cloud Function (Cloud Run) 記憶體要開得夠大。
  • 有使用到圖像處理,因為要把圖像整個讀取到記憶體中。也會有相關的考量。

3. 記得定期清理 Artifact Registry 空間 - 透過 Artifact Registry 直接設定 House Keeping 策略

  • Artifact Registry

    image-20240502234018634

  • 點選 size 最大的吧,然後選取上方 Edit Repository

  • 在最下方,選曲 Cleanup Policies

  • 選擇 “Keep most Recent versions”

  • “Keep count” 選 1 (也可以是 2)

image-20240502234314012

如果怕刪除太多,可以用 Dry run 看看結果。

完整原始碼

你可以在這裡找到相關的開源程式碼:

衍伸應用

透過 Cloud Run / Cloud Function 可以很快速部署服務到 Google Cloud 並且很快的讓你的 LINE Bot 可以上線。以下有相關應用可以去參考一下:

[好書分享] 成熟大人回嘴的藝術:有人酸你、挖苦、打壓、諷刺你時,與其默默承受,你要走到對方面前這樣說……

成熟大人回嘴的藝術
有人酸你、挖苦、打壓、諷刺你時,與其默默承受,你要走到對方面前這樣說……
賢く「言い返す」技術
作者: 片田珠美  
譯者: 郭凡嘉  
出版社:大是文化 
出版日期: 2016/07/27 

買書推薦網址:

前言:

這是 2024 年第 5 本讀完的書。 當初看到這一本,就是在想說很多人常常喜歡酸來酸去,該如何正面且有效的回嘴勒?

內容摘要:

你是否曾在工作、生活中,被人這樣「挖苦」過……
◎公司前輩:「你都出社會幾年啦?連這種事都不知道!」
◎長輩鄰居一碰面就問:「怎麼還不生小孩啊?」
◎主管老愛想當年:「到現在為止,還沒有人可以超越我的紀錄。」
◎朋友愛吐槽漏我氣:「你那個身材穿這樣不好看啦,我穿好看多了……」
◎媽媽:「我說這些都是為了你好,你當我喜歡囉嗦啊……」
◎婆婆:「妳做的菜跟我們家味道都不太一樣……」
◎丈夫:「家庭主婦還真是輕鬆!」


◎回嘴的最高指導原則,就是「不搏鬥」,讓對方的襲擊落空:
•面對激動的、大聲的言語攻擊,你的回嘴口氣更必須顯得不痛不癢,
讓對方知道這樣說下去於事無補。
•言語攻擊者都想看到對方受傷,你悖離他的期待,就能使攻擊毫無價值。

心得:

這一本書根據一些心理狀態的頗析出發,開始去分析為什麼會有人想要透過「言語來霸凌」別人,為什麼想要在口頭上欺負別人?再來去思考你應該要有哪一些的心理建設與應對想法。 讓每一個人都能知道,你乖乖地並不一定能夠讓對方罷休。有些時候可以透過,轉移話題,正面拒絕,甚至是反嘴回去的一些方式來讓對方知道你不是好欺負的。

[研討會心得] WWDC 2024 相關內容分享

Google Chrome 2024-06-11 13.12.01

昨天 WWDC 2024 最令大家震驚的就是 Apple 重新定義 AI 的縮寫 - Apple Intelligence 可以參考一下這個短片 5 mins in Apple Intelligence

  • 全部在本地端運算,主要有 GenMoji, 信件摘要,拼字語法重寫,資訊整合,相片分類等。
  • 透過 MLX 技術,加上據說是對標 MSFT Phi-3B 的模型(各種語言支援度待確認,Apple 也承認不一定上全語系)
  • 硬體需求 : iPhone 15 Pro 以上, iPad Pro (M1), 筆電都是 M1 以上

image-20240614104351672


跟個人比較有關:

  • 完美整合生態系(增加大家回用 Apple Apps)我自己應該會考慮把 Gmail -> Apple Email, Calendar 也是。
  • 本地端 LLM model 加上 Embedding 加上其他內容,手機空間會使用更大。
  • 剩下應該就是覺得很方便的,訂票資料輸入,各種 email 語氣跟文法校正(grammarly 應該死很久了)。

Google Chrome 2024-06-11 10.57.04

  • 記得去買 iPhone 16 + iCloud XD

衍伸閱讀: 蘋果軟體工程資深副總 Craig Federighi 親自解析 Apple Intelligence:蘋果的 AI 野心


最近一篇紅的討論是 APPLE WWDC 2024 沒有嶄新的技術。 但是 WWDC 從來就不是從技術出發,而是從客戶體驗再來談技術。 在 30 年前的 WWDC 有個 RD 說他不懂技術,講的也沒有很嶄新的技術。 但是 Jobs 卻說,我過去七年唯一學到的是。你不能從技術來賣產品。你要先有好的客戶體驗才能討論技術。 這也是為什麼總是很多人說 WWDC 的 keynote 沒有讓人讚嘆的技術,而是很多事嶄新的使用者體驗。 真的要看技術,要去 Apple developer 每個議程去看。 不過這也是為什麼總是有人問說 WWDC 為什麼沒有新的產品。(黑人問號??

影片: https://x.com/pirrer/status/1685529928442556416

image-20240614104247631


On-Device 是 對比 Phi 的內部 model 。

GPT4-O 是有另外一個 chatGPT 模式

Google Chrome 2024-06-11 13.49.22

[好書分享] 戰爭下的平民生存手冊

戰爭下的平民生存手冊 - 懂這些,才能撐過黃金48小時【關鍵時刻救你,也救家人】(附緊急避難檢查卡)
作者: 邱世卿  
出版社:野人 
出版日期:2023/04/19 

買書推薦網址:

前言:

這是 2024 年第 4 本讀完的書。 這是一本去年才出的相關書籍,這也是我跟[好書分享] 阿共打來怎麼辦 一起買進來的,因為當時有太多無謂的戰爭謠言,看了這一些書籍才能真正的了解到即便你不想挑起戰爭,但是想打你的人是不會因為你乖乖就不打你。 而你需要更多準備與心理建設。

內容摘要:

戰爭中,人民的自救能力是
國力的展現,也是戰後復原的實力。

當戰爭爆發,平民如何自救?
每個人都不希望用到,但絕對必備的生存手冊!
懂這些,才能撐過黃金48小時
附★緊急避難檢查卡➡可隨身攜帶

  空襲警報響起後48小時,是平民傷亡數字最高的時期之一,
  實際上,只要擁有基礎自救觀念和撤離技巧,就能提高存活率!

  ▋第一本專門為台灣平民打造的戰爭生存手冊
  本書作者特別針對台灣可能爆發的戰爭場景,結合地理環境特性,為平民打造詳盡的避難和撤離知識。書中涵蓋完整的戰爭進程,從「戰前準備→第一波48小時攻擊→制空制海階段→登陸、城鎮作戰階段→終戰」,逐一說明平民面對不同型態的戰爭,應該如何應對?有何重要的自保觀念及技巧?讀完不只能讓自己活下來,還能守護身邊的重要家人和朋友!

心得:

首先要先說明,這是一本版面書籍(也就是圖片掃描的 PDF ) 需要比較大的電子書才能觀看。 這本書的內容又跟[好書分享] 阿共打來怎麼辦 不太一樣。完整針對著現在戰爭如果真的開打了,身為平民的我們應該要如何地面對。

裡面有許多重要的指標與相關的應變措施,裡面相關的糧食準備是相當的重要,也要有周遭環境的認知,該如何的避難並且能夠正確地被引導到相關的位置。

身為平民雖然不是戰鬥單位,但是如何能保護自己並且保護著心愛的家人也是相當的重要。

[GopherDay 2024] GopherDay Taiwan 2024

image-20240525092215186

What is the iterator and how does it build an ecosystem in Go?

https://docs.google.com/presentation/d/1KBqbbxt2ASQv1g3VlQ8kQgnzlHAdncbkqBD5cYPdKo0/edit#slide=id.p

Range from integer

for n:= range 10 {
	fmt.Println("%d", n)
}

----
0
1
....

Zero-based.

Range func

for range seq {
	fmt.Println("in loop")
}

---
func seq(yield func(n int)) {
	yield(100)
}
----
"in loop"

image-20240525094411132

Mastering Large-Size HTTP Requests in the Modern Web - Cherie Hsieh

HackMD : https://hackmd.io/4BdxdwAZTQiqLvg6EzcYng

Reflect 用太多,都不好意思跟別人說 Go 靜態了 - 高宜誠 / YC Kao

HackMD: https://hackmd.io/RB2_GBZFR7eO775PSb1n1A

  1. 用 Reflect.IndexOf 會比起 NameOf 快十倍,如果不需要重複尋找。儘量用 IndexOf

[MSFT Build 2024] Microfost Build 2024 開發者相關整理

主要觀賞 link: https://www.youtube.com/watch?v=ddcZnW1HKUY

AI 摘要整理:

📚 整體摘要

  • 此文主要介紹了如何利用人工智慧(AI)技術,尤其是微軟公司的發展與應用,幫助提高農業生產力,改善教育系統,以及自動化軟體開發過程。文中提及了多個實際案例,強調AI技術在多個領域的應用潛力與效益。

🔖 重點概念

  • AI在農業的應用:透過數據分析提升農業生產效率。
  • 教育轉型:AI作為個人化學習助手,改變傳統教學方式。
  • 開發效率提升:GitHub Copilot等工具協助開發者節省時間與提高代碼質量。
  • AI與辨識技術整合:透過語音和視覺等多模態輸入,增強AI的應用場景及互動效率。
  • 智慧型數據中心:優化AI運算性能與環境配合,支援更大規模的AI訓練及應用。

💡 為什麼我們要學這個?

  • AI技術的快速發展不僅改變了農業、教育等多個行業的運作方式,還在軟體開發領域中創造了新的可能性,了解這些技術如何運作並實際應用,對未來的職業發展及創新有莫大的幫助。

❓ 延伸小問題

  • 在現實世界中,您認為AI技術將在哪些未被充分開發的領域中發揮重大影響力,並為什麼?

幾個重點

PyTorch native support in Windows (thorough DirectML)

image-20240522092430429