叫用預測

AlloyDB for PostgreSQL 的 google_ml_integration 擴充功能可讓您直接在 SQL 查詢中叫用機器學習模型的線上預測。您可以呼叫 public 結構定義中的 ml_predict_row() 函式,用於託管在 Gemini Enterprise Agent Platform 的一般模型,不需註冊端點,也可以呼叫 google_ml 結構定義中的 google_ml.predict_row() 函式,用於透過模型端點管理註冊的模型。

如要叫用預測,請選取下列其中一個結構定義。

事前準備

如要讓 AlloyDB 叫用預測,請按照下列步驟操作:

  • 您可以在提供 Agent Platform 生成式 AI 的區域叫用預測。如需區域清單,請參閱「部署作業和端點」。
  • 使用 psql 或 AlloyDB for PostgreSQL Studio 連線至資料庫。
  • 確認已安裝 google_ml_integration 擴充功能。
  • 確認 google_ml_integration.enable_model_support 旗標已設為 on。
  • 您必須先設定 AlloyDB,使其與 Agent Platform 搭配運作,才能從 AlloyDB 資料庫叫用預測。詳情請參閱「將資料庫與 Agent Platform 整合」。
  • 您必須擁有有效的 Agent Platform 模型,以及您有 Identity and Access Management (IAM) 存取權的有效端點。AlloyDB 不支援透過私人端點取得線上預測結果。
  • 授予資料庫使用者執行預測函式的權限,以便叫用預測:

    \c DB_NAME;
    GRANT EXECUTE ON FUNCTION ml_predict_row TO USER_NAME;
    

    更改下列內容:

    • DB_NAME:要授予權限的資料庫名稱

    • USER_NAME:要授予權限的使用者名稱

叫用線上預測

使用 ml_predict_row() SQL 函式,對資料叫用線上預測。

函式初始引數的格式取決於您要使用的 ML 模型是在 Model Garden 中,還是專案中執行的端點。 Google Cloud

使用 Model Garden 中的模型

如要使用在 Model Garden 中執行的機器學習模型叫用線上預測,請使用 google_ml.predict_row() SQL 函式的下列語法:

SELECT ml_predict_row('projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID', '{"instances": [CONTENTS]}');

更改下列內容:

  • PROJECT_ID:您 Google Cloud 專案的 ID

  • REGION_ID:模型所在的 Google Cloud 區域 ID,例如 gemini-pro 的 us-central1

  • MODEL_ID:要使用的機器學習模型 ID,例如 gemini-pro

  • CONTENTS:預測呼叫的輸入內容,採用 JSON 格式

如果 ML 模型與 AlloyDB 叢集儲存在相同專案和區域,則可以縮寫這個函式的第一個引數:

SELECT ml_predict_row('publishers/google/models/MODEL_ID', '{ CONTENTS }');

如要瞭解模型的 JSON 回覆訊息,請參閱「生成式 AI 基礎模型參考資料」。

如需範例,請參閱「呼叫範例」。

使用 Agent Platform 模型端點

如要使用 Agent Platform 模型端點叫用線上預測,請對 ml_predict_row() SQL 函式使用下列語法:

SELECT ml_predict_row('projects/PROJECT_ID/locations/REGION_ID/endpoints/ENDPOINT_ID', '{ CONTENTS }');

更改下列內容:

  • PROJECT_ID:模型所在的 Google Cloud 專案 ID

  • REGION_ID:模型所在 Google Cloud 區域的 ID,例如 us-central1

  • ENDPOINT_ID:模型端點的 ID

  • CONTENTS:預測呼叫的輸入內容,格式為 JSON

如果端點與 AlloyDB 叢集位於相同專案和區域,則可縮寫這個函式的第一個引數:

SELECT ml_predict_row('endpoints/ENDPOINT_ID', '{ CONTENTS }');

如要瞭解模型的 JSON 回覆訊息,請參閱 PredictResponse。

叫用範例

下列範例使用 Model Garden 中的 gemini-pro,根據以字面引數形式提供給 ml_predict_row() 的簡短提示生成文字:

SELECT
  json_array_elements(ml_predict_row('publishers/google/models/gemini-1.5-pro:streamGenerateContent',
      '{ "contents": [ { "role": "user", "parts": [ { "text": "For TPCH database schema as mentioned here https://www.tpc.org/TPC_Documents_Current_Versions/pdf/TPC-H_v3.0.1.pdf , generate a SQL query to find all supplier names which are located in the India nation."
} ] } ] }'))-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text';

回覆為 JSON 物件。如要進一步瞭解物件格式,請參閱「回應本文」。

以下範例對前一個範例進行了下列修改:

  • 這個範例會使用目前資料庫 messages.message 欄的內容做為輸入內容。

  • 這個範例示範如何使用json_build_object() 函式,協助格式化函式參數。


select ml_predict_row('projects/PROJECT_ID/locations/us-central1/publishers/google/models/gemini-1.5-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.5-pro:generateContent', json_build_object('contents', json_build_object('text', message)))->'predictions'->0->'content' FROM messages;

如需更多 ml_predict_row() 引數範例,請參閱「快速入門導覽課程:使用 Agent Platform API」。

後續步驟