[Gemma] 用 GEMMA/LLAMA 這類 Local Model 打造更安全與具有隱私概念的 LINE ChatBot

前言 LLM 的盛行之後,我們可以看到許多開發者將 LLM 整入到自己的聊天機器人 (LINE ChatBot) 之中。但是隨著而來也有不同的考量開始出現。讓許多開發者感到困擾,該如何更有經濟效益,並且更安全合法規的方式來使用 LINE Chatbot。 自從 LLAMA 等開源模型發展後,我們可以看到市面上有許多相關的開源模型。 LLAMA, Gemma, Phi3 等等,甚至有許多模型是可以在自己本地端的電腦中使用的。本篇文章將介紹這一類型的 Local Model 究竟能如何跟 LINE Bot 去整合,,並且提供一些範例程式碼作為 LINE Bot 的範例。 相關程式碼 關於 LINE Bot 相關程式碼,可以參考這一段。這邊使用 Groq 的 API 服務 https://github.com/kkdai/linebot-gemma Gemma/LLAMA 這一類的模型該如何部署 不論是 Gemma 還是 LLAMA 這一類可以部署在本地電腦(或是自己的雲端伺服器裡面的),在本文中都先暫且稱為 Local Model 。 他的基本 Prediction 的精準度,在於你提供的本地機器的算力。 筆電使用上 可以考慮使用 Ollama Ollama 是一個跨平台很好使用 LLM 的本地端工具,可以在本地端的電腦去使用 Llama3, Phi 3, Mistral, Gemma2 等等本地端的模型。使用跟安裝也相當簡單,基本上現在只要是 M1 或是 M2 的 Mac Book 就可以很輕鬆地跑起相關的服務。 GCP / Vertex AI 上面要部署這些模型 可以透過 Vertex AI 的服務來部署 Gemma Gemma2 PaliGemma 但是需要申請伺服器單位如列表 Gemma / Gemma2 PaliGemma Machine type: ct5lp-hightpu-4t Accelerator type: TPU_V5_LITEPOD Accelerator count: 4 - Machine type: g2-standard-16- Accelerator type: NVIDIA_L4- Accelerator count: 1 不過要注意這些單位需要申請,因為筆者還沒有申請下來本文將使用 Groq 來示範。 (2024/07/19) 透過 LPU API Services - Groq 來使用 Gemma2 不得不說 Groq 真的很快,而且目前也都還有免費額度可以使用 API 來呼叫。這邊也放上最簡的程式碼來呼叫 Gemma2-9B # Default import os from groq import Groq client = Groq( # This is the default and can be omitted api_key=os.environ.get("GROQ_API_KEY"), ) chat_completion = client.chat.completions.create( messages=[ {...
繼續閱讀

[Udacity] Gemini API by Google 課程分享

(課程連結: https://www.udacity.com/enrollment/cd13416) 前言 Google 跟 Udacity 合作開的這一個課程,蠻建議大家可以看一下。除了是免費之外,更加許多文件裡面沒有提供的詳細資訊跟用法講得很清楚。 想要更了解每一個 API 該如何使用,可以考慮看看。 這邊快速講一下課程大綱,然後帶幾個我覺得很重要的概念: 課程大綱 Introduction to LLMs and Gemini 基本概念補充。 Introduction to prompting in Google AI Studio 主要都是 AI Studio 的操作說明。 Developing with the Gemini API 建議開發者都要看這個,大多是 API 使用細節。 Advanced Applications 課程整理,還有相關小專案給學員練習。 幾個重點整理: 如何算產出 token token_n_model = genai.GenerativeModel(model_name, generation_config={"temperature": 0.0}) poem_prompt = "Write me a poem about Berkeley's campus" prompt_token_count = token_n_model.count_tokens(poem_prompt) output_token_count = token_n_model.count_tokens(response.text) print(f'Tokens in prompt: {prompt_token_count} \n Estimated tokens in output {output_token_count}') 透過 prompt_token_count: 輸入的 token 數字。 output_token_count: 產出的 token 數字。 Safety Setting 由於 Gemini 有著嚴格的管控,許多時候一些資料會被以安全因素而拒絕回覆。這時候你需要做一些處理: 在進行此演示之前,請記住要負責任地處理 AI 並遵循道德準則。 安全性是 Gemini 的一個重要內建功能。讓我們來了解更多它的功能: 如何檢查您的提示是否被安全過濾器阻擋 哪些安全過濾器導致了阻擋 如何調整設置以解除阻擋 檢查提示是否被阻擋 假設我們選擇了以下提示,在當前的安全設置下,您可以預期您的回應會被阻擋: model = genai.GenerativeModel("gemini-1.5-flash", generation_config={"temperature": 0}) unsafe_prompt = "Write a threat a video game villain might make" response = model.generate_content(unsafe_prompt) print(response.text) 輸出:ValueError: 無效操作:response.text 快速訪問器需要回應包含有效的 Part,但沒有返回任何內容。請檢查 candidate.safety_ratings 以確定回應是否被阻擋。 現在,您可以印出 response.candidates[0].finish_reason 以進一步調查。 如果 finish_reason 是 FinishReason.STOP,則表示您的生成請求成功運行。 如果 finish_reason 是 FinishReason.SAFETY,則表示您的生成請求因安全原因被阻擋,因此 response.text 結構將為空。 檢查安全過濾器 印出 response.candidates[0].safety_ratings 將顯示評級結構。我們可能會看到如下內容: [category: HARM_CATEGORY_SEXUALLY_EXPLICIT probability: NEGLIGIBLE , category: HARM_CATEGORY_HATE_SPEECH probability: NEGLIGIBLE...
繼續閱讀

[Google Cloud/Firebase] 關於 Python Firebase Admin 認證方式

前提 將 Python Firebase 的套件改成官方的 FirebaseAdmin ,以下有兩種認證方式。 透過 GOOGLE_CREDENTIALS 將 services_account.json 放在環境變數 GOOGLE_CREDENTIALS 透過以下程式碼啟動 這個方式可以在本地端,遠端連線去 firebase 測試。 # 从环境变量中读取服务账户密钥 JSON 内容 service_account_info = json.loads(os.environ['GOOGLE_CREDENTIALS']) # 使用服务账户密钥 JSON 内容初始化 Firebase Admin SDK cred = credentials.Certificate(service_account_info) # 啟動 firebase realtime database (透過 firebase_url ) firebase_admin.initialize_app(cred, {'databaseURL': firebase_url}) 透過 GCP 系統啟動 如果服務是部署在 Cloud Function 或是 Cloud Run 其實可以透過預設的 Services Account 來取得相關權限 My Project 可以取得 My Project 在 firebase 的權限。 這個設定方式如法在本地端連接到 Firebase 測試 # 直接取得 Google Cloud 的參數 cred = credentials.ApplicationDefault() # 啟動 firebase realtime database (透過 firebase_url ) firebase_admin.initialize_app(cred, {'databaseURL': firebase_url}) 增加 Firebase 相關安全性設定 (Firebase Realtime Database Security Rules) { "rules": { ".read": "auth != null && auth.token.admin === true", ".write": "auth != null && auth.token.admin === true" } } 這樣就可以了。 相關程式碼 放一些基本常用到的 查詢全部 def get_all_cards(u_id): try: # 引用 "namecard" 路径 ref = db.reference(f'{namecard_path}/{u_id}') # 获取数据 namecard_data = ref.get() if namecard_data: for key, value in namecard_data.items(): print(f'{key}: {value}') return namecard_data except Exception as...
繼續閱讀

[Google Gemma2/PaliGemma] Gemma2/PaliGemma 學習筆記,可以應用範圍

Google AI Dev - Gemma2 && PaliGemma 這張圖稍微解釋了 Gemma 家族的兩個主要產品: Gemma 2:也就是第二代的 Gemma PaliGemma:是第一代的 VLM (視覺語言模型) PaliGemma 相關資源: 這邊有 paligemma 的 demo code (在 HuggingFace 上面) 可以看出來,由於是 Gemma 2B 加上 SigLIP 他對於語言的處理比較簡單。 可以做一些簡單的資訊處理,但是複雜問題就不行,比如說: 產生 JSON 回覆 (X) 一次回答兩個問題以上 (X) 但是可以達到: 用中文問問題(但是只會回答英文) 可以做簡單的 OCR ,或是 Object Detection 。 根據以下討論 PaliGemma 的影片, Google 團隊建議直接使用 Mix 版本的模型。他可以 Vision + Object Detection 。 以上是 PaliGemma model 的相關 Benchmark ,可以看出來。 對比的相關測試數據跟方法,都可以得到不錯的準確率。 在 GCP 上面直接部署 PaliGemma https://console.cloud.google.com/vertex-ai/publishers/google/model-garden/paligemma 另外一方面 Gemma 2 也可以: https://console.cloud.google.com/vertex-ai/publishers/google/model-garden/gemma2 Gemma 可以適用的相關內容 透過 Gemma 可以讓 token 數字有大幅度的減少,有以下幾種方向可以考慮: 個人隱私的偵測 讓一些可能有個人隱私的部分可以獲得比較有效的篩選。 以前做法: 個人資料的偵測跟去除一直是一個很難的技術,需要有許多 regular expression 來做控管。即便是如此,還是有可能會有遺漏的地方。針對個人資料偵測這一段,其實在 LLM 是可以使用的。 但是在資安法規上,直接將用戶的個人資料傳到第三方,這樣是不符合規範的。所以這一段可以透過 Gemma 來施行。 如何用 Gemma (on-device LLM) 處理 查看以下內容是否包含個人資料,地址,身份字號,銀行帳號,回覆我 是 或是 否 ------ 我想找台北的房子 如何用 PaliGemma 處理? Check if the image content contains personal information, address, identity number, or bank account number, and reply with Yes or No. 實地測試 - Gemma2 / PaliGemma 文字測試 Gemma2-9B 改成 「某人」跟 「配偶」,並且可以有效地去除身份字號跟銀行帳號。 圖片測試 PaliGemma 判定是否需要 「大型」LLM 的介入 將聊天機器人放入群組之中,最害怕的就是怕「 Token」爆掉。因為每一句話都需要判斷是否需要 LLM 的介入。這時候就可以透過 Gemma...
繼續閱讀

[Google Gemma] Gemma2 bootcamp 公開資源紀錄

懶人包: 懶人包: Gemma2 目前還是屬於偏大的參數(27B) 小模型還在訓練中,可以先看看 Gemma 1.1 。 相關內容 概論 Gemma2 Model Card Gemma Cookbook 資料分享 Gemma Cookbook Github 可以貢獻,但是不要重複。 可以看一下 wishlist 中文翻譯(by 保哥) https://github.com/doggy8088/gemma-cookbook 在 AI Studio 試試看 Gemma2 Model Card Gemma1.1(2B, 7B) Gemma2 (27B, 9B) ,小模型 2.7B 還在訓練中。 新增: Gemma2 on Groq (沒有很好顯卡,可以用這個範例) Gemma2_on_Groq.ipynb 新增: Gemma2 相關中文模型 https://huggingface.co/cloudyu/google-gemma-7b-chinese-sft-v1 (大陸清華大學學生做的,非官方) Q&A Q: Gemma2 - Fine-Tunning 經驗? HuggingFace 上面有註解,如果要 Fine-Tune 需要把 Attention 改成 Egar Q: Gemma2 是否有 Embedding Model? 目前還沒有。 Q: 有方式透過雲端方式直接使用 Gemma 嗎?不需要本地端部署 GPU? 目前有 Vertex AI 對上 Gemma 的 cookbook
繼續閱讀

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

前言: 本篇文章主要是 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 申請 Gemini API Key 到 Google AI Studio https://aistudio.google.com/ Click “Get API Key” 選擇你已經有綁定信用卡的付費帳號,來取得 API Key 申請一個 LINE 聊天機器人 (Messaging API) 到 LINE Developer Console )並且登入 在挑選 Channel 的時候,如果要申請 LINE Chatbot (官方帳號),就要申請 Messaging API 相關資料填寫上:...
繼續閱讀