使用模型端点管理注册和调用远程 AI 模型

本页面介绍了如何通过向模型端点管理注册模型端点,来使用模型调用预测或生成嵌入。

准备工作

设置扩展程序

  1. 使用 psql 或 AlloyDB for PostgreSQL Studio,通过 postgres 用户连接到您的数据库

  2. 可选:请求访问权限以与 AlloyDB for PostgreSQL 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,以便访问 VPC 外部托管的模型(例如第三方模型)。如需了解详情,请参阅添加出站连接

设置身份验证

以下部分介绍了如何在注册模型端点之前设置身份验证。

设置 Vertex AI 身份验证

如需使用 Google Vertex AI 模型端点,您必须向用于连接到数据库的基于 IAM 的 AlloyDB 服务账号添加 Vertex AI 权限。如需详细了解如何与 Vertex AI 集成,请参阅与 Vertex AI 集成

使用 Secret Manager 设置身份验证

本部分介绍了如何在使用 Secret Manager 存储第三方提供方的身份验证详细信息时设置身份验证。

如果您的模型端点不通过 Secret Manager 处理身份验证,则此步骤是可选的(例如,如果您的模型端点使用 HTTP 标头来传递身份验证信息,或者根本不使用身份验证)。

如需创建和使用 API 密钥或不记名令牌,请完成以下步骤:

  1. 在 Secret Manager 中创建 Secret。如需了解详情,请参阅创建 Secret 并访问 Secret 版本

    Secret 路径会在 google_ml.create_sm_secret() SQL 函数中使用。

  2. 向 AlloyDB 集群授予访问 Secret 的权限。

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

    替换以下内容:

    • SECRET_NAME:Secret Manager 中的 Secret 名称。
    • SERVICE_ACCOUNT_ID:采用 serviceAccount:service-PROJECT_ID@gcp-sa-alloydb.iam.gserviceaccount.com 格式的、基于 IAM 的服务账号的 ID,例如 service-212340152456@gcp-sa-alloydb.iam.gserviceaccount.com

      您还可以在项目级向服务账号授予此角色。如需了解详情,请参阅添加 Identity and Access Management 政策绑定

使用标头设置身份验证

以下示例展示了如何使用函数设置身份验证。该函数会返回一个 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. 调用 create model 函数以添加模型端点:

    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 是限定模型名称。

此外,还要向 AlloyDB 实例所在项目的 AlloyDB 服务账号授予 Vertex AI User (roles/aiplatform.user) 角色,以便 AlloyDB 可以访问托管在其他项目中的模型。

打开 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 添加到 Secret Manager 以进行身份验证
  4. 调用存储在 Secret Manager 中的 Secret:

    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:您设置的 Secret ID,随后在注册模型端点时会用到,例如 key1
    • SECRET_MANAGER_SECRET_ID:您创建 Secret 时在 Secret Manager 中设置的 Secret ID。
    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • VERSION_NUMBER:Secret ID 的版本号。
  5. 调用 create model 函数以注册 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() 过程中使用的 Secret ID。

如需生成嵌入,请参阅生成文本嵌入

自定义托管文本嵌入模型

本部分介绍了如何注册自定义托管模型端点以及创建转换函数和(可选)自定义 HTTP 标头。所有自定义托管模型端点都受支持,无论它们托管在何处。

以下示例添加由 Cymbal 托管的 custom-embedding-model 自定义模型端点。cymbal_text_input_transformcymbal_text_output_transform 转换函数用于将模型的输入和输出格式转换为预测函数的输入和输出格式。

如需注册自定义托管文本嵌入模型端点,请完成以下步骤:

  1. 使用 psql 连接到您的数据库。

  2. 设置 google_ml_integration 扩展程序

  3. 可选:将 API 密钥作为 Secret 添加到 Secret Manager 以进行身份验证

  4. 调用存储在 Secret Manager 中的 Secret:

    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:您设置的 Secret ID,随后在注册模型端点时会用到,例如 key1
    • SECRET_MANAGER_SECRET_ID:您创建 Secret 时在 Secret Manager 中设置的 Secret ID。
    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • VERSION_NUMBER:Secret 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. 调用 create model 函数以注册自定义嵌入模型端点:

    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() 过程中使用的 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 添加到 Secret Manager 以进行身份验证。如果您已为任何其他 OpenAI 模型创建 Secret,则可以重复使用该 Secret。
  4. 调用存储在 Secret Manager 中的 Secret:

    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:您设置的 Secret ID,随后在注册模型端点时会用到。
    • SECRET_MANAGER_SECRET_ID:您创建 Secret 时在 Secret Manager 中设置的 Secret ID。
    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • VERSION_NUMBER:Secret ID 的版本号。
  5. 调用 create model 函数以注册 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() 过程中使用的 Secret ID。

Anthropic 通用模型

以下示例会添加 claude-3-opus-20240229 模型端点。 模型端点管理提供注册 Anthropic 模型所需的标头函数。

  1. 使用 psql 连接到您的数据库。
  2. 创建并启用 google_ml_integration 扩展程序

    Secret Manager

    1. 将不记名令牌作为 Secret 添加到 Secret Manager 以进行身份验证
    2. 调用存储在 Secret Manager 中的 Secret:

      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:您设置的 Secret ID,随后在注册模型端点时会用到。
      • SECRET_MANAGER_SECRET_ID:您创建 Secret 时在 Secret Manager 中设置的 Secret ID。
      • PROJECT_ID:您的 Google Cloud 项目的 ID。
      • VERSION_NUMBER:Secret ID 的版本号。
    3. 调用 create model 函数以注册 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. 调用 create model 函数以注册 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

如需了解详情,请参阅如何为通用模型端点调用预测

后续步骤