May
2nd,
2024
前提:
Cloud Run 其實很方便,可以很快速地將 Heroku 的專案搬移過來。在建置 Cloud Functions (第 2 代) 的過程中,會使用到 Cloud Build 跟 Artifact Registry,但建置成功後,舊版本的 Artifact Registry 卻不會自動刪除。
原本從「Heroku 取消免費方案?教你用 Cloud Functions 架設 LINEBOT!」看到了 GCR-Cleanner 。但是卻發現在 GCP 的介面上有更方便的方法可以使用。
透過 Artifact Registry 直接設定 House Keeping 策略
到 Artifact Registry
點選 size 最大的吧,然後選取上方 Edit Repository
在最下方,選曲 Cleanup Policies
選擇 “Keep most Recent versions”
“Keep count” 選 1 (也可以是 2)
如果怕刪除太多,可以用 Dry run 看看結果。
參考文章:
Heroku 取消免費方案?教你用 Cloud Functions 架設 LINEBOT!
GCP: 配置清理策略 (Apply cleanup policies)
繼續閱讀
May
1st,
2024
Bug: 原本的對話忽然都沒有回應 由於 Google Gemini 伺服器今天早上修改相關變動,但是 Golang 官方套件還無法來得及改動。 (https://github.com/google/generative-ai-go/issues/97) 導致我在 BwAI workshop ,政大與台北大學的授課中相關 LINE Bot 範例可能會無法順利取得回覆。 雖然官方正在解決相關問題,本篇文章將分享如何用另外的方式來先避開相關的問題。 狀況: 傳送文字問題,沒有回應。 但是發送照片卻是可以正確回覆,查看 log 會出現 unknown field usageMetadata 的錯誤訊息。 影響專案: https://github.com/kkdai/linebot-cf-firebase https://github.com/kkdai/linebot-cf-receipt https://github.com/kkdai/linebot-cf-namecard 相關被影響文章: [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(2): Firebase Database 讓 LINEBot 有個超長記憶 [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(3): 導入「名片小幫手」跟「收據小幫手」 解決方式: 請記得更新最新版本程式碼,到你的 cloud function 將 function.go 替換掉之後重新 deploy 就可以了。 https://github.com/kkdai/linebot-cf-firebase https://github.com/kkdai/linebot-cf-receipt https://github.com/kkdai/linebot-cf-namecard 認真探討 根據 issue 97 主要問題出在 SendMessage 回來的資訊處理部分。 func main() { ctx := context.Background() client, err := genai.NewClient(ctx, option.WithAPIKey(os.Getenv("GEMINI_API_KEY"))) if err != nil { log.Fatal(err) } defer client.Close() model := client.GenerativeModel("gemini-1.0-pro") cs := model.StartChat() msg := "hello" fmt.Printf("== Me: %s\n== Model:\n", msg) _, err = cs.SendMessage(ctx, genai.Text(msg)) if err != nil { log.Fatal(err) } } Workaround 可以考慮將 StartChat() 換成原有的 model.GenerateContent(ctx, genai.Text(text)),但是會無法使用 cs.History = Memory 。 這時候可以透過 totalString := fmt.Sprintf("Memory:(%s), %s", string(jsonStr), req) res, err...
繼續閱讀
April
16th,
2024
前言: 這是一篇為了 04/18 跟 Google Developer Group 合作的 BUILD WITH AI (BWAI) WORKSHOP 的最後一篇文章,畢竟晚上就要工作坊了(投影片可以當場弄,文章可來不及當場寫 XD )。 請記得,如果你想知道以下相關知識: 如何申請 LINE Developer 帳戶,如何建立一個 LINE OA (ChatBot) Channel? (範例: 辨識圖片 LINEBot) 如何透過 Google Cloud Functions 使用 Google Credential 來操作 Firebase Realtime Database (範例: 具有長記憶的聊天機器人) 本篇文章將專注在以下幾個部分: 將兩個範例程式 名片小幫手(舊版用 notion)與收據小幫手(Python 舊版) ,改寫成 Golang 。 分享 Golang 在操作 Firebase Realtime Database 資料庫上幾個需要注意的地方。 最後分享做 Gemini-Vision 的一些心得與未來可以改善的空間。 文章列表: [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(1): 景色辨識小幫手 [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(2): Firebase Database 讓 LINEBot 有個超長記憶 [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(3): 導入「名片小幫手」跟「收據小幫手」 [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(4): 關於 Gemini Pro 伺服器的相關修改導致 unknown field usageMetadata 的錯誤訊息 程式碼列表: 名片小幫手(舊版用 Golang + Notion) 收據小幫手(Python 舊版) 辨識圖片 LINEBot 具有長記憶的聊天機器人 名片小幫手(新版: Golang + Firebase RealtimeDB + Cloud Functions) 收據小幫手(新版:...
繼續閱讀
April
12th,
2024
前言: 這是一篇為了 04/18 跟 Google Developer Group 合作的 BUILD WITH AI (BWAI) WORKSHOP 的第二篇系列文章(不知道還需要幾篇)。 本篇文章將專注在以下幾個部分: Firebase Database 設定 如何在 Cloud Function 上透過官方 Golang 存取 Firebase 透過 Firebase Database 來讓你的 Gemini 記住所有講過的事情,優化上一次打造的 LINE Bot 文章列表: [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(1): 景色辨識小幫手 [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(2): Firebase Database 讓 LINEBot 有個超長記憶 [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(3): 導入名片小幫手跟收據小幫手 [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(4): 關於 Gemini Pro 伺服器的相關修改導致 unknown field usageMetadata 的錯誤訊息 事前準備 LINE Developer Account: 你只需要有 LINE 帳號就可以申請開發者帳號。 Google Cloud Functions: GGo 程式碼的部署平台,生成供 LINEBot 使用的 webhook address。 Firebase:建立Realtime database,LINE Bot 可以記得你之前的對話,甚至可以回答許多有趣的問題。 Google AI Studio:可以透過這裡取得 Gemini Key 。 申請 Firebase Database 服務 記得到 Firebase Console,直接選取你現在有的專案。(可能叫做 My First Project?) 建立一個 Firebase Realtime Database 等等會用到 地區選美國 Start in “lock...
繼續閱讀
April
10th,
2024
前言: 這是一篇為了 04/18 跟 Google Developer Group 合作的 BUILD WITH AI (BWAI) WORKSHOP 的第一篇系列文章(不知道還需要幾篇),裡面包含了完整的 LINE 開發者相關帳號設定與 GCP 相關設定,只需要有付費認證帳號,其實是不會花費到任何錢的。 文章列表: [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(一): 景色辨識小幫手 [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(2): Firebase Database 讓 LINEBot 有個超長記憶 [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(3): 導入名片小幫手跟收據小幫手 [BwAI workshop][Golang] LINE OA + CloudFunction + GeminiPro + Firebase = 旅行小幫手 LINE 聊天機器人(4): 關於 Gemini Pro 伺服器的相關修改導致 unknown field usageMetadata 的錯誤訊息 事前準備: LINE Developer Account: 你只需要有 LINE 帳號就可以申請開發者帳號。 Google Cloud Functions: GGo 程式碼的部署平台,生成供 LINEBot 使用的 webhook address。 Firebase:建立Realtime database,LINE Bot 可以記得你之前的對話,甚至可以回答許多有趣的問題。 Google AI Studio:可以透過這裡取得 Gemini Key 。 關於 Gemini API Price 根據官方網站: https://ai.google.dev/pricing?hl=zh-tw 申請 Gemini API Key 到 Google AI Studio https://aistudio.google.com/ Click “Get API Key” 選擇你已經有綁定信用卡的付費帳號,來取得 API Key 申請一個 LINE 聊天機器人 (Messaging API) 到 LINE Developer Console )並且登入 在挑選 Channel...
繼續閱讀
April
9th,
2024
前提: 本篇文章將快速走過一次,如何申請 GCP Services Account Credential ,還有如何在 Cloud Function 使用這樣的資料,最後如何透 Golang 來在 Cloud Function 操控 Firebase Database ,還有可能發生的雷點。 申請 Services Account Credential 讓 Cloud Function 連接 Google 服務 這部分的教學,其實可以參考我另外一篇文章。[學習文件] 如何在 Heroku 上面使用透過 Golang 來存取 Google Cloud 服務,但是這邊還是快速走一次。 進入 Google Cloud Console ,到 IAM & Admin 選擇建立 Services Account Services Account Name 自己決定,要注意好 (上面專案跟 Firebase 專案名稱要一致) Grant this service account access to project 在身份的時候,建議先用 Editor (比較大,需要小心使用) “Grant users access to this service account” 不需要特別設定 按下 “Manage Keys” 來準備下載 Credential 選擇 Add Key -> Create new Key -> 下載 JSON 使用 Golang Google Options 套件需要注意: 雖然已經將 Firebase Realtime Database 設定成每個人都可以讀寫,但是如果是透過 Golang 去存取的時候,你會出現 Unauthorized request 的錯誤訊息。 這時候就是因為你的 JSON 檔案的 Project 跟你的 Firebase Project 是不同的。 只要重新建立一個 Services Account 並且更新 JSON 內容即可。 如何在 Google Cloud Function 導入 Services Account Credential ? 接下來會來分享,要如何正確地能夠在 Cloud Function 內使用呢。 如果你想要直接使用 Cloud Function 去開啟 Credential JSON 檔案,你會一直得到無法正確拿到 credential 的錯誤訊息。 這時候需要先透過環境參數來加入: 將 JSON 檔案中所有內容複製起來 設定 GOOGLE_APPLICATION_CREDENTIALS 參數,然後把所有內容貼上環境參數。 接下來會跟大家講,如何修改相關程式碼? // Init firebase...
繼續閱讀