處理客戶洽詢 (包括電子郵件) 是經營許多業務的必要工作,但這項工作很快就會變得難以負荷。只要稍微調整,Gemma 等人工智慧 (AI) 模型就能協助簡化這項工作。
每家企業處理電子郵件等查詢的方式都不太一樣,因此請務必根據貴商家的需求,調整生成式 AI 等技術。這個專案解決了特定問題,即從麵包店的電子郵件中擷取訂單資訊,並轉換為結構化資料,以便快速新增至訂單處理系統。您可以使用 10 到 20 個查詢範例和所需輸出內容,調整 Gemma 模型,以便處理客戶的電子郵件、快速回覆,並整合現有的業務系統。這個專案是 AI 應用程式模式,您可以延伸及調整,從 Gemma 模型中為貴公司創造價值。
如要觀看這項專案的簡介影片,以及如何擴充這項專案 (包括開發人員提供的洞察資料),請觀看「Business Email AI Assistant」影片。您也可以在 Gemma Cookbook 程式碼存放區中查看這個專案的程式碼。或者,您可以使用下列函式開始擴充專案 操作說明。
總覽
本教學課程將逐步引導您設定、放送及擴展業務 這是一款以 Gemma、Python 和 Flask 建構的電子郵件服務助理應用程式。專案 提供基本網頁使用者介面,讓您可依照自己的需求進行修改。 這類應用程式可將擷取到客戶電子郵件的資料 與一間虛構的烘焙坊有關您可以將此應用程式模式用於任何使用文字輸入和文字輸出的商務工作。
圖 1. 用於處理麵包店電子郵件問題的專案使用者介面
硬體需求
請在搭載圖形處理器 (GPU) 或 Tensor Processing Unit (TPU) 的電腦上執行這項調整程序,並確保電腦有足夠的 GPU 或 TPU 記憶體,可容納現有模型和調整資料。如要在這個存放區中執行調整設定 則需要大約 16 GB 的 GPU 記憶體 以及至少 50 GB 的磁碟空間。
你可以使用 Colab 執行本教學課程的 Gemma 模型調整部分 並處理 T4 GPU 執行階段的環境。如果您要在 Google Cloud VM 執行個體上建構這個專案,請按照下列規定設定執行個體:
- GPU 硬體:執行這個專案需要 NVIDIA T4 (建議使用 NVIDIA L4 以上版本)
- 作業系統:選擇「Linux 上的深度學習」選項。 特別是已預先安裝 CUDA 12.3 M124 的深度學習 VM GPU 軟體驅動程式
- 開機磁碟大小:為資料、模型和支援軟體預留至少 50 GB 的磁碟空間。
專案設定
這些操作說明將引導您逐步完成這個專案的開發和測試作業。一般設定步驟包括安裝必要軟體、從程式碼存放區複製專案、設定一些環境變數、安裝 Python 程式庫,以及測試網路應用程式。
安裝和設定
這項專案會使用 Python 3 和虛擬環境 (venv
) 管理套件
並執行應用程式下列安裝操作說明適用於 Linux
託管機器
如何安裝必要的軟體:
安裝 Python 3 和
venv
虛擬環境套件 (適用於 Python):sudo apt update sudo apt install git pip python3-venv
複製專案
將專案程式碼下載至開發電腦。您需要使用 git 原始碼管控軟體,才能擷取專案原始碼。
下載專案程式碼的方式如下:
使用下列指令複製 Git 存放區:
git clone https://github.com/google-gemini/gemma-cookbook.git
您可以選擇將本機 Git 存放區設定為使用稀疏檢查,這樣您就只會取得專案的檔案:
cd gemma-cookbook/ git sparse-checkout set Demos/business-email-assistant/ git sparse-checkout init --cone
安裝 Python 程式庫
使用 venv
Python 虛擬環境安裝 Python 程式庫
可用來管理 Python 套件和依附元件。請務必先使用 pip
安裝程式啟用 Python 虛擬環境,再安裝 Python 程式庫。如要進一步瞭解如何使用 Python 虛擬環境,請參閱
Python venv 說明文件。
如要安裝 Python 程式庫:
在終端機視窗中,前往
business-email-assistant
目錄:cd Demos/business-email-assistant/
為這個專案設定及啟用 Python 虛擬環境 (venv):
python3 -m venv venv source venv/bin/activate
使用
setup_python
指令碼:./setup_python.sh
設定環境變數
這項專案需要幾項環境環境變數,
包含 Kaggle 使用者名稱和 Kaggle API 權杖您必須擁有 Kaggle 帳戶,並要求存取 Gemma 模型,才能下載模型。在這個專案中,您將 Kaggle 使用者名稱和 Kaggle API 權杖新增至兩個 .env
檔案,分別由網頁應用程式和調校程式讀取。
如要設定環境變數,請按照下列步驟操作:
- 按照 Kaggle 說明文件中的指示,取得 Kaggle 使用者名稱和符記金鑰。
- 如要取得 Gemma 模型的存取權,請按照「Gemma 設定」頁面中的「取得 Gemma 存取權」操作說明操作。
- 建立
專案副本中每個以下位置的
.env
文字檔案:email-processing-webapp/.env model-tuning/.env
建立
.env
文字檔後,請在兩個檔案中新增下列設定:KAGGLE_USERNAME=<YOUR_KAGGLE_USERNAME_HERE> KAGGLE_KEY=<YOUR_KAGGLE_KEY_HERE>
執行及測試應用程式
完成專案的安裝和設定之後,請執行 ,確認設定正確無誤。您應先執行這項操作,做為基準檢查,然後再編輯專案供自己使用。
執行及測試專案:
在終端機視窗中,前往
email-processing-webapp
目錄:cd business-email-assistant/email-processing-webapp/
使用
run_app
指令碼執行應用程式:./run_app.sh
啟動網頁應用程式後,程式程式碼會列出網址, 都能瀏覽及測試一般來說,這個網址是:
http://127.0.0.1:5000/
在網頁介面中,按下第一個輸入下方的「取得資料」按鈕 欄位,以便從模型產生回應
執行應用程式後,模型的第一個回應會花費較長的時間,因為它必須在第一次執行時完成初始化步驟。在已執行的網路應用程式上,後續提示要求和產生作業會在更短的時間內完成。
擴充應用程式
應用程式開始執行後,您可以修改使用者介面和商業邏輯,藉此擴充應用程式,讓應用程式可用於與您或貴商家相關的作業。您也可以使用應用程式程式碼修改 Gemma 模型的行為,方法是變更應用程式傳送至生成式 AI 模型的提示內容。
應用程式會向模型提供操作說明,以及使用者輸入的資料,以便模型完整顯示提示。您可以修改這些指示,以變更模型的行為,例如指定要產生的 JSON 參數名稱和結構。以更簡便的方式 模型就是針對模型用途的 例如指定產生的回覆不可包含 Markdown 格式。
如要修改提示操作說明,請按照下列步驟操作:
- 在開發專案中,開啟
business-email-assistant/email-processing-webapp/app.py
程式碼檔案。 在
app.py
程式碼中,將指令新增至get_prompt():
函式:def get_prompt(): return """ Extract the relevant details of this request and return them in JSON code, with no additional markdown formatting:\n"""
以下範例新增了「無其他 Markdown 格式」詞組加入 操作說明。
提供更多提示指示,對於產生的生成結果 並減輕導入作業負擔您應該先嘗試這個方法,看看是否能從模型中取得所需行為。但依據提示指示修改 Gemma 模型的行為 尤其是模型的整體輸入符記限制 Gemma 2 有 8,192 個符記,需要在詳細提示中取得平衡 新資料大小,避免超過這個上限。
調整模型
微調 Gemma 模型 更可靠地回應特定工作尤其是當您想讓模型 以特定結構產生 JSON,其中包含具體的 參數,建議您針對該行為調整模型 視您希望模型完成的任務而定,您可以使用 10 到 20 個範例實現基本功能。本節教學課程 說明如何針對特定工作設定及執行 Gemma 模型並進行微調。
下方指示說明如何對 不過,您也可以使用 VM 環境執行這項調整作業 相關聯的分數 Colab 記事本 這項專案。
硬體需求
微調作業的運算需求與 以及硬體需求。您可以在 Colab 環境中使用 T4 GPU 執行階段執行調整作業,如果您將輸入符記限制為 256,並將批次大小限制為 1。
準備資料
開始調整 Gemma 模型前,您必須先準備調整資料。針對特定工作調整模型時,您需要一組要求和回應範例。這些範例應顯示要求文字 (不含任何操作說明) 和預期的回應文字。首先,您應準備約 10 個範例的資料集。這些範例應代表各種要求和理想回應。確認請求和 所以不會重複,否則模型回應就會 重複,無法根據請求的變化適當做出適當調整如果您要調整模型以產生結構化資料格式,請務必確保所有提供的回覆嚴格符合所需的資料輸出格式。下列 表會顯示這個程式碼範例資料集中的幾個範例記錄:
要求 | 回應 |
---|---|
嗨,Indian Bakery Central,\n你手邊有 10 個 penda 和三十個 bundi ladoo 嗎?另外,你有販售香草霜和巧克力口味的蛋糕嗎?我要的是 6 吋尺寸 | { "type": "inquiry", "items": [ { "name": "pendas", "quantity": 10 }, { "name": "bundi ladoos", "quantity": 30 }, { "name": "蛋糕", "filling": null, "frosting": "香草", "flavor": "巧克力", "size": "6 吋"} ] } |
我在 Google 地圖上看見貴商家。你有賣果凍和古巴嗎? 什麼? | { "type": "inquiry", "items": [ { "name": "jellabi", "quantity": null }, { "name": "gulab jamun", "quantity": null } ] } |
表 1. 列出烘焙公司電子郵件資料的部分調整資料集 擷取。
資料格式和載入
您可以將調整資料以任何方便的格式儲存,包括
資料庫紀錄、JSON 檔案、CSV 或純文字檔案,只要有
也就是使用 Python 程式碼擷取記錄這個專案會讀取 data
目錄中的 JSON 檔案,並將其轉換為字典物件陣列。在這個轉動程式範例中,調整用資料集會載入
使用 prepare_tuning_dataset()
函式的 model-tuning/main.py
模組:
def prepare_tuning_dataset():
# collect data from JSON files
prompt_data = read_json_files_to_dicts("./data")
...
如前所述,您可以使用 非常方便,前提是您可以擷取相關 並組合成文字字串,做為調整記錄使用。
組合調整記錄
在實際的調整程序中,程式會組合每個要求和回應
匯出成單一字串,當中包含提示指示和
回應。然後,調整程式會將字串轉為符記,供模型使用。您可以看到用於組合調整記錄的程式碼
model-tuning/main.py
模組 prepare_tuning_dataset()
函式,如下所示:
def prepare_tuning_dataset():
...
# prepare data for tuning
tuning_dataset = []
template = "{instruction}\n{response}"
for prompt in prompt_data:
tuning_dataset.append(template.format(instruction=prompt["prompt"],
response=prompt["response"]))
return tuning_dataset
這個函式會將資料視為輸入內容,並透過新增換行符號來設定格式 指示與回應之間存續。
產生模型權重
完成調整資料的載入作業後,您就可以執行調整程式。這個範例應用程式的調整程序會使用 Keras NLP 程式庫,透過低階調整或 LoRA 技術調整模型,產生新的模型權重。與全精確度調整相比,使用 LoRA 可大幅提升記憶體效率,因為 LoRA 會近似模擬模型權重變更。接著,您可以將這些約略權重重疊在現有的 權重來變更模型行為
如何執行調整作業並計算新權重:
在終端機視窗中,前往
model-tuning/
目錄。cd business-email-assistant/model-tuning/
使用
tune_model
指令碼執行調整程序:./tune_model.sh
視可用的運算資源而定,調整程序需要幾分鐘才能完成
再複習一下,機構節點
是所有 Google Cloud Platform 資源的根節點順利完成後,調整程式會寫入新的 *.h5
model-tuning/weights
目錄中的權重檔案,格式如下:
gemma2-2b_inquiry_tuned_4_epoch##.lora.h5
疑難排解
如果調整未順利完成,可能原因如下:
- 記憶體不足或資源耗盡:如果調整程序要求的記憶體超出可用的 GPU 記憶體或 CPU 記憶體,就會發生這些錯誤。調整時,請確認您不是執行網頁應用程式
資料。如果您在具備 16 GB GPU 記憶體的裝置上進行調整,請務必將
token_limit
設為 256,並將batch_size
設為 1。 - 未安裝 GPU 驅動程式或與 JAX 不相容:轉換程序要求運算裝置已安裝硬體驅動程式,且該驅動程式與 JAX 程式庫的版本相容。詳情請參閱 JAX 安裝 說明文件。
部署調整後的模型
調整程序會根據調整資料和調整應用程式中設定的訓練週期總數,產生多個權重。根據預設 程式會產生 3 個模型權重檔案,每個調整週期各一個。每個後續的調校週期都會產生權重,以更準確地重現調校資料的結果。您可以在 調整程序的終端機輸出內容,如下所示:
...
8/8 ━━━━━━━━━━━━━━━━━━━━ 121s 195ms/step - loss: 0.5432 - sparse_categorical_accuracy: 0.5982
Epoch 2/3
8/8 ━━━━━━━━━━━━━━━━━━━━ 2s 194ms/step - loss: 0.3320 - sparse_categorical_accuracy: 0.6966
Epoch 3/3
8/8 ━━━━━━━━━━━━━━━━━━━━ 2s 192ms/step - loss: 0.2135 - sparse_categorical_accuracy: 0.7848
雖然您希望準確率保持在相對較高的 0.80 左右,但不希望這個比率過高或接近 1.00,因為這表示權重已接近過度擬合調校資料。發生這種情況時 無法有效處理與 以及微調範例根據預設,部署指令碼會挑選 epoch 3 權重,其準確率通常約為 0.80。
如要將產生的權重部署至網頁應用程式,請按照下列步驟操作:
在終端機視窗中,前往
model-tuning
目錄:cd business-email-assistant/model-tuning/
使用
deploy_weights
指令碼執行調整程序:./deploy_weights.sh
執行這個指令碼後,您應該會在 email-processing-webapp/weights/
目錄中看到新的 *.h5
檔案。
測試新模型
將新的權重部署至應用程式後,接著就可以試用 剛調整過的模型您可以重新執行網頁應用程式並產生回應。
如要執行及測試專案,請按照下列步驟操作:
在終端機視窗中,前往
email-processing-webapp
目錄:cd business-email-assistant/email-processing-webapp/
使用
run_app
指令碼執行應用程式:./run_app.sh
啟動網頁應用程式後,程式碼會列出可供瀏覽及測試的網址,通常為:
http://127.0.0.1:5000/
在網頁介面中,按下第一個輸入下方的「取得資料」按鈕 欄位,以便從模型產生回應
您現在已在應用程式中調整並部署 Gemma 模型!請嘗試應用程式,並嘗試判斷經過調整的模型在工作中生成內容的能力有何限制。如果您發現模型在某些情況下效能不佳,請考慮將其中一些要求加入調整範例資料清單,方法是新增要求並提供理想回應。然後重新執行調整作業 程序,重新部署新的權重,然後測試輸出內容。
其他資源
如要進一步瞭解這個專案,請參閱 Gemma Cookbook 程式碼存放區。如果您需要應用程式建構方面的協助,或希望與其他開發人員合作,請造訪 Google 開發人員社群 Discord 伺服器。如要瞭解更多「Build with Google AI」專案,請參閱影片播放清單。