本頁說明如何從 PostgreSQL 適用的 AlloyDB 資料庫叫用線上預測。
AlloyDB 可讓您呼叫 ml_predict_row()
函式,在 SQL 程式碼中取得線上預測結果。如要進一步瞭解如何搭配使用機器學習 (ML) 模型與 AlloyDB,請參閱建構生成式 AI 應用程式。
事前準備
如要從 AlloyDB 資料庫叫用線上預測,請先準備好資料庫並選取合適的機器學習模型。
準備資料庫
授予資料庫使用者執行
ml_predict_row()
函式的權限,以執行預測:按照「將 psql 用戶端連線至執行個體」一文的說明,將
psql
用戶端連線至叢集的主要執行個體。在 psql 指令提示中,連線至資料庫並授予權限:
\c DB_NAME GRANT EXECUTE ON FUNCTION ml_predict_row TO USER_NAME;
更改下列內容:
DB_NAME:必須授予權限的資料庫名稱。
USER_NAME:要授予權限的使用者名稱。
選取機器學習模型
呼叫 ml_predict_row()
函式時,必須指定機器學習模型的位置。
您可以指定下列任一模型:
在 Vertex AI Model Garden 中執行的模型。
ml_predict_row()
函式僅支援在表格或自訂模型上叫用預測。具有有效端點的 Vertex AI 模型,且您擁有存取該模型的 Identity and Access Management (IAM) 權限。
AlloyDB 不支援使用私人端點取得線上預測結果。
叫用線上預測
使用 ml_predict_row()
SQL 函式,對資料叫用線上預測。
函式初始引數的格式取決於您要使用的機器學習模型是否位於 Vertex AI Model Garden,或是 Google Cloud 專案中執行的端點。
使用 Vertex AI Model Garden 中的模型
如要使用在 Vertex AI Model Garden 中執行的機器學習模型叫用線上預測,請使用 ml_predict_row()
SQL 函式的下列語法:
SELECT ml_predict_row('projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID', '{ CONTENTS }');
更改下列內容:
PROJECT_ID
:您的 Google Cloud 專案 IDREGION_ID
:模型所在的 Google Cloud 區域 ID,例如 gemini-pro 的us-central1
MODEL_ID
:要使用的 ML 模型 ID,例如 gemini-proCONTENTS
:預測呼叫的輸入內容,採用 JSON 格式
如果 ML 模型與 AlloyDB 叢集儲存在同一個專案和區域,則可以縮寫這個函式的第一個引數:
SELECT ml_predict_row('publishers/google/models/MODEL_ID', '{ CONTENTS }');
如要瞭解模型的 JSON 回覆訊息,請參閱「生成式 AI 基礎模型參考資料」。
如需範例,請參閱「呼叫範例」。
使用 Vertex AI 模型端點
如要使用 Vertex AI 模型端點叫用線上預測,請使用 ml_predict_row()
SQL 函式的下列語法:
SELECT ml_predict_row('projects/PROJECT_ID/locations/REGION_ID/endpoints/ENDPOINT_ID', '{ CONTENTS }');
更改下列內容:
PROJECT_ID
:模型所在的 Google Cloud 專案 IDREGION_ID
:模型所在 Google Cloud 區域的 ID,例如us-central1
ENDPOINT_ID
:模型端點的 IDCONTENTS
:預測呼叫的輸入內容,採用 JSON 格式
如果端點與 AlloyDB 叢集位於相同專案和區域,則可以縮寫這個函式的第一個引數:
SELECT ml_predict_row('endpoints/ENDPOINT_ID', '{ CONTENTS }');
如要瞭解模型的 JSON 回應訊息,請參閱 PredictResponse。
叫用範例
下列範例使用 Model Garden 中提供的 gemini-pro,根據以字面引數形式提供給 ml_predict_row()
的簡短提示生成文字:
select ML_PREDICT_ROW('projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.0-pro:generateContent', '{
"contents": [{
"role": "user",
"parts": [{
"text": "What is AlloyDB?"
}]
}]
}');
回覆為 JSON 物件。如要進一步瞭解物件格式,請參閱「回應本文」。
下一個範例會透過下列方式修改前一個範例:
這個範例會使用目前資料庫
messages.message
資料欄的內容做為輸入內容。這個範例會示範如何使用
json_build_object()
函式,協助格式化函式參數。
select ML_PREDICT_ROW('projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.0-pro:generateContent', json_build_object('contents', json_build_object('text', message))) from messages;
傳回的 JSON 物件現在的 predictions
陣列中,會為 messages
表格的每個資料列包含一個項目。
由於回應是 JSON 物件,您可以使用 PostgreSQL 箭頭運算子從中提取特定欄位:
select ML_PREDICT_ROW('projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.0-pro:generateContent', json_build_object('contents', json_build_object('text', message)))->'predictions'->0->'content' FROM messages;
如要查看 ml_predict_row()
的更多引數範例,請參閱「使用 Vertex AI API 快速入門」。