使用模型端點管理工具註冊及呼叫遠端 AI 模型

本頁面說明如何透過註冊模型端點和模型端點管理服務,使用模型叫用預測或產生嵌入。

事前準備

設定擴充功能

  1. 使用 psql 或 AlloyDB for PostgreSQL Studio,以 postgres 使用者身分連線至資料庫。

  2. 選用: 要求存取權,與 PostgreSQL 適用的 AlloyDB AI 查詢引擎 (預先發布版) 功能互動 ,包括支援多模態模型、排名模型和運算子函式。

  3. 選用:授予非超級 PostgreSQL 使用者管理模型中繼資料的權限:

      GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA google_ml TO NON_SUPER_USER;
    

    請替換下列變數:

    • NON_SUPER_USER:非超級使用者 PostgreSQL 使用者名稱。
  4. 請務必啟用輸出 IP,以便存取虛擬私有雲外部託管的模型 (例如第三方模型)。詳情請參閱「新增輸出連線」。

設定驗證方法

下列各節說明如何在註冊模型端點前設定驗證。

設定 Vertex AI 的驗證

如要使用 Google Vertex AI 模型端點,請務必將 Vertex AI 權限新增至您用來連線至資料庫的 IAM 型 AlloyDB 服務帳戶。如要進一步瞭解如何與 Vertex AI 整合,請參閱「與 Vertex AI 整合」。

使用 Secret Manager 設定驗證

本節說明如何設定驗證,前提是您使用 Secret Manager 儲存第三方供應商的驗證詳細資料。

如果模型端點不會透過 Secret Manager 處理驗證,則可略過這個步驟。舉例來說,如果模型端點使用 HTTP 標頭傳遞驗證資訊,或完全不使用驗證,則可略過這個步驟。

如要建立及使用 API 金鑰或不記名權杖,請完成下列步驟:

  1. 在 Secret Manager 中建立密鑰。詳情請參閱「建立密鑰及存取密鑰版本」。

    密鑰路徑會用於 google_ml.create_sm_secret() SQL 函式。

  2. 授予 AlloyDB 叢集存取密鑰的權限。

      gcloud secrets add-iam-policy-binding 'SECRET_NAME' \
          --member="serviceAccount:SERVICE_ACCOUNT_ID" \
          --role="roles/secretmanager.secretAccessor"
    

    更改下列內容:

    • SECRET_NAME:Secret Manager 中的密鑰名稱。
    • SERVICE_ACCOUNT_ID:IAM 型服務帳戶的 ID,格式為 serviceAccount:service-PROJECT_ID@gcp-sa-alloydb.iam.gserviceaccount.com,例如 service-212340152456@gcp-sa-alloydb.iam.gserviceaccount.com

      您也可以在專案層級將這個角色授予服務帳戶。詳情請參閱「新增身分與存取權管理政策繫結」。

使用標頭設定驗證

以下範例說明如何使用函式設定驗證。這個函式會傳回 JSON 物件,其中包含向嵌入模型提出要求時所需的標頭。

  CREATE OR REPLACE FUNCTION HEADER_GEN_FUNCTION(
    model_id VARCHAR(100),
    input_text TEXT
  )
  RETURNS JSON
  LANGUAGE plpgsql
  AS $$
  #variable_conflict use_variable
  DECLARE
    api_key VARCHAR(255) := 'API_KEY';
    header_json JSON;
  BEGIN
    header_json := json_build_object(
      'Content-Type', 'application/json',
      'Authorization', 'Bearer ' || api_key
    );
    RETURN header_json;
  END;
  $$;

更改下列內容:

  • HEADER_GEN_FUNCTION:您註冊模型時可使用的標頭產生函式名稱。
  • API_KEY:模型供應商的 API 金鑰。

文字嵌入模型

本節說明如何使用模型端點管理服務註冊模型端點。

模型端點管理工具支援部分文字嵌入和一般 Vertex AI 模型,做為預先註冊的模型端點。您可以根據模型類型,直接使用模型 ID 生成嵌入內容或叫用預測。 如要進一步瞭解支援的預先註冊模型,請參閱「預先註冊的 Vertex AI 模型」。

gemini-embedding-001 模型僅適用於 us-central1 區域。

舉例來說,如要呼叫預先註冊的 gemini-embedding-001 模型,可以直接使用嵌入函式呼叫模型:

SELECT
      embedding(
        model_id => 'gemini-embedding-001',
        content => 'AlloyDB is a managed, cloud-hosted SQL database service');

如果 AlloyDB 叢集和 Vertex AI 端點位於不同專案中,請將 model_id 設為端點的合格路徑,例如 projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/gemini-embedding-001

同樣地,如要呼叫預先註冊的 gemini-1.5-pro:generateContent 模型,可以直接使用預測函式呼叫模型:

 SELECT google_ml.predict_row(
            model_id => 'gemini-1.5-pro:generateContent',
            request_body => '{
        "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. Only provide SQL query with no explanation."
                    }
                ]
            }
        ]
        }')-> 'candidates' -> 0 -> 'content' -> 'parts' -> 0 -> 'text';

如要生成嵌入,請參閱生成文字嵌入。如要叫用預測功能,請參閱這篇文章

內建支援的文字嵌入模型

模型端點管理功能內建支援 Vertex AI 和 OpenAI 的部分模型。如需內建支援的型號清單,請參閱「內建支援的型號」。

對於內建支援的模型,您可以將合格名稱設為模型合格名稱,並指定要求網址。模型端點管理功能會自動識別模型,並設定預設轉換函式。

Vertex AI 嵌入模型

下列步驟說明如何註冊內建支援的 Vertex AI 模型。以 gemini-embedding-001text-multilingual-embedding-002 模型端點為例。

確認 AlloyDB 叢集和您查詢的 Vertex AI 模型位於同一區域。

  1. 使用 psql 連線至資料庫。

  2. 設定 google_ml_integration 擴充功能

  3. 呼叫建立模型函式,加入模型端點:

    gemini-embedding-001

      CALL
        google_ml.create_model(
          model_id => 'gemini-embedding-001',
          model_request_url => 'publishers/google/models/gemini-embedding-001',
          model_provider => 'google',
          model_qualified_name => 'gemini-embedding-001',
          model_type => 'text_embedding',
          model_auth_type => 'alloydb_service_agent_iam');
    

    text-multilingual-embedding-002

      CALL
        google_ml.create_model(
          model_id => 'text-multilingual-embedding-002',
          model_request_url => 'publishers/google/models/text-multilingual-embedding-002',
          model_provider => 'google',
          model_qualified_name => 'text-multilingual-embedding-002',
          model_type => 'text_embedding',
          model_auth_type => 'alloydb_service_agent_iam'
          model_in_transform_fn => 'google_ml.vertexai_text_embedding_input_transform',
          model_out_transform_fn => 'google_ml.vertexai_text_embedding_output_transform');
    

如果模型儲存在 AlloyDB 叢集以外的專案和區域,請將要求網址設為 projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/MODEL_ID,其中 REGION_ID 是模型代管所在的區域,MODEL_ID 則是合格的模型名稱。

此外,請將 Vertex AI 使用者 (roles/aiplatform.user) 角色授予 AlloyDB 執行個體所在專案的 AlloyDB 服務帳戶,讓 AlloyDB 能夠存取其他專案中託管的模型。

Open AI 文字嵌入模型

google_ml_integration 擴充功能會自動設定預設轉換函式,並叫用對遠端 OpenAI 模型的呼叫。如需內建支援的 OpenAI 模型清單,請參閱「內建支援的模型」。

以下範例會新增 text-embedding-ada-002 OpenAI 模型端點。您可以按照相同步驟註冊 OpenAI text-embedding-3-smalltext-embedding-3-large 模型端點,並設定模型專屬的合格名稱。

  1. 使用 psql 連線至資料庫。
  2. 設定 google_ml_integration 擴充功能
  3. 將 OpenAI API 金鑰新增為 Secret Manager 的密鑰,用於驗證
  4. 呼叫儲存在 Secret Manager 中的密鑰:

    CALL
    google_ml.create_sm_secret(
      secret_id => 'SECRET_ID',
      secret_path => 'projects/PROJECT_ID/secrets/SECRET_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
    

    更改下列內容:

    • SECRET_ID:您設定的密鑰 ID,後續註冊模型端點時會使用這個 ID,例如 key1
    • SECRET_MANAGER_SECRET_ID:您建立密鑰時在 Secret Manager 中設定的密鑰 ID。
    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • VERSION_NUMBER:密鑰 ID 的版本號碼。
  5. 呼叫建立模型函式,註冊 text-embedding-ada-002 模型端點:

    CALL
      google_ml.create_model(
        model_id => 'MODEL_ID',
        model_provider => 'open_ai',
        model_type => 'text_embedding',
        model_qualified_name => 'text-embedding-ada-002',
        model_auth_type => 'secret_manager',
        model_auth_id => 'SECRET_ID');
    

    更改下列內容:

    • MODEL_ID:您定義的模型端點專屬 ID。模型端點需要這個模型 ID,才能生成嵌入內容或叫用預測功能。
    • SECRET_ID:您在先前的google_ml.create_sm_secret()程序中使用的密鑰 ID。

如要生成嵌入,請參閱生成文字嵌入

自訂代管文字嵌入模型

本節說明如何註冊自訂代管模型端點,以及建立轉換函式和自訂 HTTP 標頭 (選用)。無論自訂代管模型端點的代管位置為何,系統都支援。

以下範例會新增 Cymbal 代管的 custom-embedding-model 自訂模型端點。cymbal_text_input_transformcymbal_text_output_transform 轉換函式可用來將模型的輸入和輸出格式,轉換為預測函式的輸入和輸出格式。

如要註冊自訂主機代管的文字嵌入模型端點,請完成下列步驟:

  1. 使用 psql 連線至資料庫。

  2. 設定 google_ml_integration 擴充功能

  3. 選用:將 API 金鑰新增為 Secret Manager 的密鑰,用於驗證

  4. 呼叫儲存在 Secret Manager 中的密鑰:

    CALL
      google_ml.create_sm_secret(
        secret_id => 'SECRET_ID',
        secret_path => 'projects/project-id/secrets/SECRET_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
    

    更改下列內容:

    • SECRET_ID:您設定的密鑰 ID,後續註冊模型端點時會使用這個 ID,例如 key1
    • SECRET_MANAGER_SECRET_ID:您建立密鑰時在 Secret Manager 中設定的密鑰 ID。
    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • VERSION_NUMBER:密鑰 ID 的版本號碼。
  5. 根據文字嵌入模型端點的預測函式,建立輸入和輸出轉換函式。如要進一步瞭解如何建立轉換函式,請參閱轉換函式範例

    以下是專為 custom-embedding-model 文字嵌入模型端點設計的轉換函式範例:

    -- Input Transform Function corresponding to the custom model endpoint
    CREATE OR REPLACE FUNCTION cymbal_text_input_transform(model_id VARCHAR(100), input_text TEXT)
    RETURNS JSON
    LANGUAGE plpgsql
    AS $$
    DECLARE
      transformed_input JSON;
      model_qualified_name TEXT;
    BEGIN
      SELECT json_build_object('prompt', json_build_array(input_text))::JSON INTO transformed_input;
      RETURN transformed_input;
    END;
    $$;
    -- Output Transform Function corresponding to the custom model endpoint
    CREATE OR REPLACE FUNCTION cymbal_text_output_transform(model_id VARCHAR(100), response_json JSON)
    RETURNS REAL[]
    LANGUAGE plpgsql
    AS $$
    DECLARE
      transformed_output REAL[];
    BEGIN
      SELECT ARRAY(SELECT json_array_elements_text(response_json->0)) INTO transformed_output;
      RETURN transformed_output;
    END;
    $$;
    
  6. 呼叫建立模型函式,註冊自訂嵌入模型端點:

    CALL
      google_ml.create_model(
        model_id => 'MODEL_ID',
        model_request_url => 'REQUEST_URL',
        model_provider => 'custom',
        model_type => 'text_embedding',
        model_auth_type => 'secret_manager',
        model_auth_id => 'SECRET_ID',
        model_qualified_name => 'MODEL_QUALIFIED_NAME',
        model_in_transform_fn => 'cymbal_text_input_transform',
        model_out_transform_fn => 'cymbal_text_output_transform');
    

    更改下列內容:

    • MODEL_ID:必填。您定義的模型端點專屬 ID,例如 custom-embedding-model。模型端點需要這個模型 ID,才能生成嵌入內容或叫用預測功能。
    • REQUEST_URL:必填。新增自訂文字嵌入和一般模型端點時,模型專屬的端點 (例如 https://cymbal.com/models/text/embeddings/v1)。確認可透過內部 IP 位址存取模型端點。模型端點管理服務不支援公開 IP 位址。
    • MODEL_QUALIFIED_NAME:如果模型端點使用限定名稱,則為必要欄位。如果模型端點有多個版本,則為完整名稱。
    • SECRET_ID:您在先前的google_ml.create_sm_secret()程序中使用的密鑰 ID。

內建支援的多模態模型

與 Vertex AI 整合並安裝擴充功能

  1. 與 Vertex AI 整合
  2. 確認已安裝最新版 google_ml_integration
    1. 如要檢查已安裝的版本,請執行下列指令:

              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion
              ------------
              1.4.3
              (1 row)
            
    2. 如果未安裝擴充功能,或安裝的版本低於 1.4.3,請執行下列指令更新擴充功能:

              CREATE EXTENSION IF NOT EXISTS google_ml_integration;
              ALTER EXTENSION google_ml_integration UPDATE;
            

      如果您在執行上述指令時遇到問題,或執行上述指令後,擴充功能未更新至 1.4.3 版,請與 AlloyDB 支援團隊聯絡。

    3. 確認版本為最新後,請執行 upgrade_to_preview_version 程序,安裝預覽功能:

              CALL google_ml.upgrade_to_preview_version();
              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion
              ------------
              1.4.4
              (1 row)
            

呼叫模型來生成多模態嵌入

由於模型端點管理功能內建支援 Vertex AI 的 multimodalembedding@001 模型,因此您可以直接呼叫模型來生成多模態嵌入。

下列範例使用 multimodalembedding@001 合格模型名稱做為模型 ID,生成多模態圖片嵌入:

  1. 使用 psql 連線至資料庫。
  2. 設定 google_ml_integration 擴充功能
  3. 生成多模態圖片嵌入:

    SELECT
      ai.image_embedding(
        model_id => 'multimodalembedding@001',
        image => 'IMAGE_PATH_OR_TEXT',
        mimetype => 'MIMETYPE');
    

更改下列內容:

  • IMAGE_PATH_OR_TEXT,其中包含圖片的 Cloud Storage 路徑,例如 gs://cymbal_user_data/image-85097193-cd9788aacebb.jpeg,可轉換為圖片的向量嵌入或 base64 字串。
  • MIMETYPE 改為圖片的 MIME 類型。

排名模型

Vertex AI 排名模型

您可以使用「支援的模型」一節中提及的 Vertex AI 模型,無須註冊。

如要瞭解如何使用 Vertex AI 排序模型為搜尋結果排序,請參閱「排序搜尋結果」。

註冊第三方排名模型

以下範例說明如何註冊 Cohere 的重排序模型。

CREATE OR REPLACE FUNCTION cohere_rerank_input_transform(
    model_id VARCHAR(100),
    search_string TEXT,
    documents TEXT[],
    top_n INT DEFAULT NULL
)
RETURNS JSON
LANGUAGE plpgsql
AS $$
#variable_conflict use_variable
DECLARE
  transformed_input JSONB;
BEGIN
  -- Basic Input Validation
  IF search_string IS NULL OR search_string = '' THEN
    RAISE EXCEPTION 'Invalid input: search_string cannot be NULL or empty.';
  END IF;

  IF documents IS NULL OR array_length(documents, 1) IS NULL OR array_length(documents, 1) = 0 THEN
    RAISE EXCEPTION 'Invalid input: documents array cannot be NULL or empty.';
  END IF;

  IF top_n IS NOT NULL AND top_n < 0 THEN
    RAISE EXCEPTION 'Invalid input: top_n must be greater than or equal to zero. Provided value: %', top_n;
  END IF;

  -- Construct the base JSON payload for Cohere Rerank API
  transformed_input := jsonb_build_object(
    'model', google_ml.model_qualified_name_of(model_id),
    'query', search_string,
    'documents', to_jsonb(documents), -- Convert TEXT[] directly to JSON array
    'return_documents', false -- Explicitly set to false (optional, as its default)
  );

  -- Add top_n to the payload only if it's provided and valid
  IF top_n IS NOT NULL THEN
     transformed_input := transformed_input || jsonb_build_object('top_n', top_n);
  END IF;

  -- Return the final JSON payload
  RETURN transformed_input::JSON;

END;
$$;

CREATE OR REPLACE FUNCTION cohere_rerank_output_transform(
    model_id VARCHAR(100),
    response_json JSON
)
RETURNS TABLE (index INT, score REAL)
LANGUAGE plpgsql
AS $$
DECLARE
  result_item JSONB;
  response_jsonb JSONB;
  cohere_index INT; -- 0-based index from Cohere response
BEGIN
  -- Validate response_json
  IF response_json IS NULL THEN
    RAISE EXCEPTION 'Invalid model response: response cannot be NULL.';
  END IF;

  -- Convert JSON to JSONB for easier processing
  response_jsonb := response_json::JSONB;

  -- Check top-level structure
  IF jsonb_typeof(response_jsonb) != 'object' THEN
    RAISE EXCEPTION 'Invalid model response: response must be a JSON object. Found: %', jsonb_typeof(response_jsonb);
  END IF;

  -- Check for the 'results' array
  IF response_jsonb->'results' IS NULL OR jsonb_typeof(response_jsonb->'results') != 'array' THEN
    -- Check for potential Cohere error structure
    IF response_jsonb->'message' IS NOT NULL THEN
       RAISE EXCEPTION 'Cohere API Error: %', response_jsonb->>'message';
    ELSE
       RAISE EXCEPTION 'Invalid model response: response does not contain a valid "results" array.';
    END IF;
  END IF;

  -- Loop through the 'results' array (JSONB array indices are 0-based)
  FOR i IN 0..jsonb_array_length(response_jsonb->'results') - 1 LOOP
    result_item := response_jsonb->'results'->i;

    -- Validate individual result item structure
    IF result_item IS NULL OR jsonb_typeof(result_item) != 'object' THEN
      RAISE WARNING 'Skipping invalid result item at array index %.', i;
      CONTINUE;
    END IF;

    IF result_item->'index' IS NULL OR jsonb_typeof(result_item->'index') != 'number' THEN
       RAISE WARNING 'Missing or invalid "index" field in result item at array index %.', i;
       CONTINUE;
    END IF;

    IF result_item->'relevance_score' IS NULL OR jsonb_typeof(result_item->'relevance_score') != 'number' THEN
       RAISE WARNING 'Missing or invalid "relevance_score" field in result item at array index %.', i;
       CONTINUE;
    END IF;

    -- Extract values
    BEGIN
      cohere_index := (result_item->>'index')::INT;
      -- Assign values to the output table columns
      -- Cohere returns 0-based index, map it to 1-based for consistency
      -- with input document array position
      index := cohere_index + 1;
      score := (result_item->>'relevance_score')::REAL;
      RETURN NEXT; -- Return the current row
    EXCEPTION WHEN others THEN
      RAISE WARNING 'Error processing result item at array index %: %', i, SQLERRM;
      CONTINUE; -- Skip this item and continue with the next
    END;
  END LOOP;

  RETURN; -- End of function
END;
$$;

CALL
  google_ml.create_sm_secret(
    '<SECRET_ID>',
    'projects/<PROJECT_NUMBER>/secrets/<SECRET_ID>/versions/latest');

CALL
  google_ml.create_model(
    model_id => 'cohere-reranker',
    model_type => 'reranking',
    model_provider => 'custom',
    model_request_url => 'https://api.cohere.com/v2/rerank',
    model_qualified_name => 'rerank-v3.5',
    model_auth_type => 'secret_manager',
    model_auth_id => '<SECRET_ID>',
    model_in_transform_fn => 'cohere_rerank_input_transform',
    model_out_transform_fn => 'cohere_rerank_output_transform'
  );

通用模型

本節說明如何註冊任何可透過代管模型供應商 (例如 Hugging Face、OpenAI、Vertex AI、Anthropic 或任何其他供應商) 提供的通用模型端點。本節將提供範例,說明如何註冊在 Hugging Face 上代管的一般模型端點、Vertex AI Model Garden 中的一般gemini-pro模型,以及claude-haiku模型端點。

只要輸入和輸出內容採用 JSON 格式,您就可以註冊任何一般模型端點。根據模型端點中繼資料,您可能需要產生 HTTP 標頭或定義要求網址。

如要進一步瞭解預先註冊的通用模型和內建支援的模型,請參閱「支援的型號」。

一般 Gemini 模型

本節說明如何註冊一般 Gemini 模型。

gemini-1.5-pro 模型

由於部分 gemini-pro 模型已預先註冊,您可以直接呼叫模型 ID 來叫用預測。

下列範例使用 Vertex AI Model Garden 中的 gemini-1.5-pro:generateContent 模型端點。

  1. 使用 psql 連線至資料庫。
  2. 設定 google_ml_integration 擴充功能
  3. 使用預先註冊的模型 ID 叫用預測:

    SELECT
        json_array_elements(
        google_ml.predict_row(
            model_id => 'gemini-1.5-pro:generateContent',
            request_body => '{
        "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';
    

Hugging Face 上的通用模型

以下範例會新增在 Hugging Face 上代管的 facebook/bart-large-mnli 自訂分類模型端點。

  1. 使用 psql 連線至資料庫。
  2. 設定 google_ml_integration 擴充功能
  3. 將 OpenAI API 金鑰新增為 Secret Manager 的密鑰,用於驗證。如果您已為其他 OpenAI 模型建立密鑰,可以重複使用該密鑰。
  4. 呼叫儲存在 Secret Manager 中的密鑰:

    CALL
      google_ml.create_sm_secret(
        secret_id => 'SECRET_ID',
        secret_path => 'projects/project-id/secrets/SECRET_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
    

    更改下列內容:

    • SECRET_ID:您設定的密鑰 ID,用於註冊模型端點。
    • SECRET_MANAGER_SECRET_ID:您建立密鑰時在 Secret Manager 中設定的密鑰 ID。
    • PROJECT_ID:您的 Google Cloud 專案 ID。
    • VERSION_NUMBER:密鑰 ID 的版本號碼。
  5. 呼叫建立模型函式,註冊 facebook/bart-large-mnli 模型端點:

    CALL
      google_ml.create_model(
        model_id => 'MODEL_ID',
        model_provider => 'hugging_face',
        model_request_url => 'REQUEST_URL',
        model_qualified_name => 'MODEL_QUALIFIED_NAME',
        model_auth_type => 'secret_manager',
        model_auth_id => 'SECRET_ID');
    

    更改下列內容:

    • MODEL_ID:您定義的模型端點專屬 ID,例如 custom-classification-model。模型端點需要這個模型 ID,才能生成嵌入內容或叫用預測功能。
    • REQUEST_URL:新增自訂文字嵌入和通用模型端點時的模型專屬端點,例如 https://api-inference.huggingface.co/models/facebook/bart-large-mnli
    • MODEL_QUALIFIED_NAME:模型端點版本的完整名稱,例如 facebook/bart-large-mnli
    • SECRET_ID:您在先前的google_ml.create_sm_secret()程序中使用的密鑰 ID。

Anthropic 通用模型

以下範例會新增 claude-3-opus-20240229 模型端點。 模型端點管理功能提供註冊 Anthropic 模型所需的標頭函式。

  1. 使用 psql 連線至資料庫。
  2. 建立並啟用 google_ml_integration 擴充功能

    Secret Manager

    1. 將不記名權杖新增為 Secret Manager 的密鑰,以進行驗證
    2. 呼叫儲存在 Secret Manager 中的密鑰:

      CALL
        google_ml.create_sm_secret(
          secret_id => 'SECRET_ID',
          secret_path => 'projects/PROJECT_ID/secrets/SECRET_MANAGER_SECRET_ID/versions/VERSION_NUMBER');
      

      更改下列內容:

      • SECRET_ID:您設定的密鑰 ID,用於註冊模型端點。
      • SECRET_MANAGER_SECRET_ID:您建立密鑰時在 Secret Manager 中設定的密鑰 ID。
      • PROJECT_ID:您的 Google Cloud 專案 ID。
      • VERSION_NUMBER:密鑰 ID 的版本號碼。
    3. 呼叫建立模型函式,註冊 claude-3-opus-20240229 模型端點。

      CALL
        google_ml.create_model(
          model_id => 'MODEL_ID',
          model_provider => 'anthropic',
          model_request_url => 'REQUEST_URL',
          model_auth_type => 'secret_manager',
          model_auth_id => 'SECRET_ID',
          generate_headers_fn => 'google_ml.anthropic_claude_header_gen_fn');
      

      更改下列內容:

      • MODEL_ID:您定義的模型端點專屬 ID,例如 anthropic-opus。模型端點需要這個模型 ID,才能生成嵌入內容或叫用預測功能。
      • REQUEST_URL:新增自訂文字嵌入和通用模型端點時的模型專屬端點,例如 https://api.anthropic.com/v1/messages

    驗證標頭

    1. 使用 google_ml.anthropic_claude_header_gen_fn 預設標頭產生函式,或建立標頭產生函式。

        CREATE OR REPLACE FUNCTION anthropic_sample_header_gen_fn(model_id VARCHAR(100), request_body JSON)
        RETURNS JSON
        LANGUAGE plpgsql
        AS $$
        #variable_conflict use_variable
        BEGIN
              RETURN json_build_object('x-api-key', 'ANTHROPIC_API_KEY', 'anthropic-version', 'ANTHROPIC_VERSION')::JSON;
        END;
        $$;
      

      更改下列內容:

      • ANTHROPIC_API_KEY:Anthropic API 金鑰。
      • ANTHROPIC_VERSION (選用):要使用的特定模型版本,例如 2023-06-01
    2. 呼叫建立模型函式,註冊 claude-3-opus-20240229 模型端點。

      CALL
        google_ml.create_model(
          model_id => 'MODEL_ID',
          model_provider => 'anthropic',
          model_request_url => 'REQUEST_URL',
          generate_headers_fn => 'google_ml.anthropic_claude_header_gen_fn');
      

      更改下列內容:

      • MODEL_ID:您定義的模型端點專屬 ID,例如 anthropic-opus。模型端點需要這個模型 ID,才能生成嵌入內容或叫用預測功能。
      • REQUEST_URL:新增自訂文字嵌入和通用模型端點時的模型專屬端點,例如 https://api.anthropic.com/v1/messages

詳情請參閱如何叫用一般模型端點的預測結果

後續步驟