使用 ML.GENERATE_TEXT 函数生成文本

本文档介绍了如何创建表示 Vertex AI 模型的 BigQuery ML 远程模型,然后将该远程模型与 ML.GENERATE_TEXT 函数结合使用来生成文本。

支持以下类型的远程模型:

根据您选择的 Vertex AI 模型,您可以根据对象表中的非结构化数据输入或标准表中的文本输入生成文本。

所需的角色

如需创建远程模型并生成文本,您需要以下 Identity and Access Management (IAM) 角色:

  • 创建和使用 BigQuery 数据集、表和模型:项目的 BigQuery Data Editor (roles/bigquery.dataEditor)。
  • 创建、委托和使用 BigQuery 连接:项目的 BigQuery Connections Admin (roles/bigquery.connectionsAdmin)。

    如果您尚未配置默认连接,则可以在运行 CREATE MODEL 语句时创建并设置一个连接。为此,您必须拥有项目的 BigQuery Admin (roles/bigquery.admin) 角色。如需了解详情,请参阅配置默认连接

  • 为连接的服务账号授予权限:包含 Vertex AI 端点的项目的 Project IAM Admin (roles/resourcemanager.projectIamAdmin)。这是通过将模型名称指定为端点而创建的远程模型的当前项目。这是通过将网址指定为端点而创建的远程模型的网址中标识的项目。

    如果您使用远程模型分析对象表中的非结构化数据,并且您在对象表中使用的 Cloud Storage 存储桶位于与 Vertex AI 端点不同的项目中,则您还必须具有对象表使用的 Cloud Storage 存储桶的 Storage Admin (roles/storage.admin)。

  • 创建 BigQuery 作业:项目的 BigQuery Job User (roles/bigquery.jobUser)。

这些预定义角色包含执行本文档中的任务所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

  • 创建数据集:bigquery.datasets.create
  • 创建、委托和使用连接:bigquery.connections.*
  • 设置服务账号权限:resourcemanager.projects.getIamPolicyresourcemanager.projects.setIamPolicy
  • 创建模型并运行推断:
    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata

您也可以使用自定义角色或其他预定义角色来获取这些权限。

准备工作

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  2. Make sure that billing is enabled for your Google Cloud project.

  3. Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.

    Enable the APIs

创建数据集

创建 BigQuery 数据集以包含您的资源:

控制台

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery 页面

  2. 探索器窗格中,点击您的项目名称。

  3. 点击 查看操作 > 创建数据集

  4. 创建数据集 页面上,执行以下操作:

    • 数据集 ID 中,输入数据集的名称。

    • 位置类型中,为数据集选择一个位置。

    • 点击创建数据集

bq

  1. 如需创建新数据集,请使用带有 --location 标志的 bq mk 命令:

    bq --location=LOCATION mk -d DATASET_ID

    替换以下内容:

    • LOCATION:数据集的位置
    • DATASET_ID 是您要创建的数据集的 ID。
  2. 确认已创建数据集:

    bq ls

创建连接

如果您已配置默认连接,或者您具有 BigQuery Admin 角色,则可以跳过此步骤。

创建一个 Cloud 资源连接供远程模型使用,并获取连接的服务账号。在上一步中创建的数据集所在的位置创建连接。

从下列选项中选择一项:

控制台

  1. 转到 BigQuery 页面。

    转到 BigQuery

  2. 探索器窗格中,点击 添加数据

    “添加数据”界面元素。

    系统随即会打开添加数据对话框。

  3. 过滤条件窗格中的数据源类型部分,选择企业应用

    或者,在搜索数据源字段中,您可以输入 Vertex AI

  4. 精选数据源部分中,点击 Vertex AI

  5. 点击 Vertex AI 模型:BigQuery 联合解决方案卡片。

  6. 连接类型列表中,选择 Vertex AI 远程模型、远程函数和 BigLake(Cloud 资源)

  7. 连接 ID 字段中,输入连接的名称。

  8. 点击创建连接

  9. 点击转到连接

  10. 连接信息窗格中,复制服务账号 ID 以在后续步骤中使用。

bq

  1. 在命令行环境中,创建连接:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID

    --project_id 参数会替换默认项目。

    请替换以下内容:

    • REGION:您的连接区域
    • PROJECT_ID:您的 Google Cloud 项目 ID
    • CONNECTION_ID:您的连接的 ID

    当您创建连接资源时,BigQuery 会创建一个唯一的系统服务账号,并将其与该连接相关联。

    问题排查:如果您收到以下连接错误,请更新 Google Cloud SDK

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. 检索并复制服务账号 ID 以在后续步骤中使用:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID

    输出类似于以下内容:

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

使用 google_bigquery_connection 资源。

如需向 BigQuery 进行身份验证,请设置应用默认凭据。如需了解详情,请参阅为客户端库设置身份验证

以下示例在 US 区域中创建一个名为 my_cloud_resource_connection 的 Cloud 资源连接:


# This queries the provider for project information.
data "google_project" "default" {}

# This creates a cloud resource connection in the US region named my_cloud_resource_connection.
# Note: The cloud resource nested object has only one output field - serviceAccountId.
resource "google_bigquery_connection" "default" {
  connection_id = "my_cloud_resource_connection"
  project       = data.google_project.default.project_id
  location      = "US"
  cloud_resource {}
}

如需在 Google Cloud 项目中应用 Terraform 配置,请完成以下部分中的步骤。

准备 Cloud Shell

  1. 启动 Cloud Shell
  2. 设置要应用 Terraform 配置的默认 Google Cloud 项目。

    您只需为每个项目运行一次以下命令,即可在任何目录中运行它。

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    如果您在 Terraform 配置文件中设置显式值,则环境变量会被替换。

准备目录

每个 Terraform 配置文件都必须有自己的目录(也称为“根模块”)。

  1. Cloud Shell 中,创建一个目录,并在该目录中创建一个新文件。文件名必须具有 .tf 扩展名,例如 main.tf。在本教程中,该文件称为 main.tf
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 如果您按照教程进行操作,可以在每个部分或步骤中复制示例代码。

    将示例代码复制到新创建的 main.tf 中。

    (可选)从 GitHub 中复制代码。如果端到端解决方案包含 Terraform 代码段,则建议这样做。

  3. 查看和修改要应用到您的环境的示例参数。
  4. 保存更改。
  5. 初始化 Terraform。您只需为每个目录执行一次此操作。
    terraform init

    (可选)如需使用最新的 Google 提供程序版本,请添加 -upgrade 选项:

    terraform init -upgrade

应用更改

  1. 查看配置并验证 Terraform 将创建或更新的资源是否符合您的预期:
    terraform plan

    根据需要更正配置。

  2. 通过运行以下命令并在提示符处输入 yes 来应用 Terraform 配置:
    terraform apply

    等待 Terraform 显示“应用完成!”消息。

  3. 打开您的 Google Cloud 项目以查看结果。在 Google Cloud 控制台的界面中找到资源,以确保 Terraform 已创建或更新它们。

向服务账号授予访问权限

您必须向远程模型使用的连接的服务账号授予 Vertex AI User 角色。如果您要使用远程模型根据对象表数据生成文本,还必须向对象表使用的连接的服务账号授予 Vertex AI User 角色。

向远程模型连接的服务账号授予角色

向连接的服务账号授予 Vertex AI User 角色。

如果您打算在创建远程模型时将端点指定为网址(例如 endpoint = 'https://us-central1-aiplatform.googleapis.com/v1/projects/myproject/locations/us-central1/publishers/google/models/gemini-2.0-flash'),请在您在该网址指定的项目中授予此角色。

如果您打算在创建远程模型时使用模型名称指定端点(例如 endpoint = 'gemini-2.0-flash'),请在打算创建远程模型的项目中授予此角色。

在其他项目中授予此角色会导致错误 bqcx-1234567890-wxyz@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource

如需授予该角色,请按以下步骤操作:

控制台

  1. 前往 IAM 和管理页面。

    转到“IAM 和管理”

  2. 点击 Add

    系统随即会打开添加主账号对话框。

  3. 新的主账号字段中,输入您之前复制的服务账号 ID。

  4. 选择角色字段中,选择 Vertex AI,然后选择 Vertex AI User

  5. 点击保存

gcloud

使用 gcloud projects add-iam-policy-binding 命令

gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.user' --condition=None

请替换以下内容:

  • PROJECT_NUMBER:您的项目编号
  • MEMBER:您之前复制的服务账号 ID

向对象表连接的服务账号授予角色

如果您使用远程模型根据对象表数据生成文本,请向对象表连接的服务账号授予 Vertex AI User 角色。

如需查找对象表连接的服务账号,请按以下步骤操作:

  1. 转到 BigQuery 页面。

    转到 BigQuery

  2. 探索器窗格中,展开包含对象表的数据集。

  3. 选择对象表。

  4. 在编辑器窗格中,点击详细信息标签页。

  5. 请记下连接 ID 字段中的连接名称。

  6. 探索器窗格中,展开外部连接文件夹。

  7. 选择与对象表的连接 ID 字段中的连接匹配的连接。

  8. 复制服务账号 ID 字段中的值。

如需授予该角色,请按以下步骤操作:

控制台

  1. 前往 IAM 和管理页面。

    转到“IAM 和管理”

  2. 点击 Add

    系统随即会打开添加主账号对话框。

  3. 新的主账号字段中,输入您之前复制的服务账号 ID。

  4. 选择角色字段中,选择 Vertex AI,然后选择 Vertex AI User

  5. 点击保存

gcloud

使用 gcloud projects add-iam-policy-binding 命令

gcloud projects add-iam-policy-binding 'PROJECT_NUMBER' --member='serviceAccount:MEMBER' --role='roles/aiplatform.user' --condition=None

请替换以下内容:

  • PROJECT_NUMBER:您的项目编号
  • MEMBER:您之前复制的服务账号 ID

启用合作伙伴模型

仅当您想要使用 Anthropic Claude、Llama 或 Mistral AI 模型时,才需要执行此步骤。

  1. 在 Google Cloud 控制台中,转到 Vertex AI Model Garden 页面。

    转到 Model Garden

  2. 搜索或浏览要使用的 Claude 模型。

  3. 点击模型卡片。

  4. 在模型页面上,点击启用

  5. 填写所需的启用信息,然后点击下一步

  6. 条款及条件部分,选中相应复选框。

  7. 点击同意以同意条款及条件,并启用该模型。

部署开放模型

如果您想使用受支持的开放模型,则必须先将该模型部署到 Vertex AI。如需详细了解如何执行此操作,请参阅部署开放模型

创建 BigQuery 机器学习远程模型

创建远程模型:

开放模型

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 使用 SQL 编辑器创建远程模型

    CREATE OR REPLACE MODEL
    `PROJECT_ID.DATASET_ID.MODEL_NAME`
    REMOTE WITH CONNECTION {DEFAULT | `PROJECT_ID.REGION.CONNECTION_ID`}
    OPTIONS (ENDPOINT = 'https://ENDPOINT_REGION-aiplatform.googleapis.com/v1/projects/ENDPOINT_PROJECT_ID/locations/ENDPOINT_REGION/endpoints/ENDPOINT_ID');

    请替换以下内容:

    • PROJECT_ID:您的项目 ID。
    • DATASET_ID:包含模型的数据集的 ID。 此数据集必须与您使用的连接位于同一位置
    • MODEL_NAME:模型的名称。
    • REGION:连接使用的区域。
    • CONNECTION_ID:BigQuery 连接的 ID。

      您可以通过在 Google Cloud 控制台中查看连接详细信息并复制连接 ID 中显示的完全限定连接 ID 的最后一部分中的值来获取此值。例如 projects/myproject/locations/connection_location/connections/myconnection

    • ENDPOINT_REGION:部署开放模型的区域。
    • ENDPOINT_PROJECT_ID:部署开放模型的项目。
    • ENDPOINT_ID:开放模型使用的 HTTPS 端点的 ID。您可以通过在在线预测页面上找到开放模型并复制 ID 字段中的值来获取端点 ID。

所有其他模型

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

  2. 使用 SQL 编辑器创建远程模型

    CREATE OR REPLACE MODEL
    `PROJECT_ID.DATASET_ID.MODEL_NAME`
    REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
    OPTIONS (ENDPOINT = 'ENDPOINT');

    请替换以下内容:

    • PROJECT_ID:您的项目 ID。
    • DATASET_ID:包含模型的数据集的 ID。 此数据集必须与您使用的连接位于同一位置
    • MODEL_NAME:模型的名称。
    • REGION:连接使用的区域。
    • CONNECTION_ID:BigQuery 连接的 ID。

      您可以通过在 Google Cloud 控制台中查看连接详细信息并复制连接 ID 中显示的完全限定连接 ID 的最后一部分中的值来获取此值。例如 projects/myproject/locations/connection_location/connections/myconnection

    • ENDPOINT:要使用的 Vertex AI 模型的端点。

      对于预训练的 Vertex AI 模型、Claude 模型和 Mistral AI 模型,请指定模型的名称。对于其中一些模型,您可以在名称中指定模型的特定版本。对于受支持的 Gemini 模型,您可以指定全球端点来提高可用性。

      对于 Llama 模型,请指定采用 openapi/<publisher_name>/<model_name> 格式的 OpenAI API 端点。 例如 openapi/meta/llama-3.1-405b-instruct-maas

      如需了解支持的模型名称和版本,请参阅 ENDPOINT

      您指定的 Vertex AI 模型必须在您创建远程模型的位置可用。如需了解详情,请参阅位置

根据标准表数据生成文本

ML.GENERATE_TEXT 函数与标准表中的提示数据结合使用来生成文本:

Gemini

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (PROMPT_QUERY)},
  STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature,
  TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output,
  STOP_SEQUENCES AS stop_sequences,
  GROUND_WITH_GOOGLE_SEARCH AS ground_with_google_search,
  SAFETY_SETTINGS AS safety_settings,
  REQUEST_TYPE AS request_type)
);

请替换以下内容:

  • PROJECT_ID:您的项目 ID。
  • DATASET_ID:包含该模型的数据集的 ID。
  • MODEL_NAME:模型的名称。
  • TABLE_NAME:包含提示的表的名称。该表必须具有名为 prompt 的列,或者您可以通过别名来使用其他名称的列。
  • PROMPT_QUERY:提供提示数据的查询。此查询必须生成一个名为 prompt 的列。
  • TOKENS:一个 INT64 值,用于设置回答中可生成的词元数上限。 此值必须在范围 [1,8192] 内。 指定较低的值可获得较短的回答,指定较高的值可获得较长的回答。 默认值为 128
  • TEMPERATURE:范围 [0.0,1.0] 内的一个 FLOAT64 值,用于控制 token 选择的随机程度。 默认值为 0

    较低的 temperature 值适合需要更具确定性、更少开放性或创造性回答的提示,而较高的 temperature 值可以带来更具多样性或创造性的结果。temperature 的值为 0 表示确定性,即始终选择概率最高的回答。

  • TOP_P:范围 [0.0,1.0] 内的一个 FLOAT64 值,用于确定所选 token 的概率。指定较低的值可获得随机程度较低的回答,指定较高的值可获得随机程度较高的回答。默认值为 0.95
  • FLATTEN_JSON:一个 BOOL 值,用于确定是否在单独的列中返回生成的文本和安全属性。默认值为 FALSE
  • STOP_SEQUENCES:一个 ARRAY<STRING> 值,如果模型的回答中包含指定的字符串,则用于移除这些字符串。字符串需要完全匹配,包括大小写。默认值为空数组。
  • GROUND_WITH_GOOGLE_SEARCH:一个 BOOL 值,用于确定 Vertex AI 模型在生成回答时是否使用[通过 Google 搜索建立依据](/vertex-ai/generative-ai/docs/grounding/overview#ground-public)。通过建立依据,模型可以在生成回答时使用网络上的其他信息来生成更具体的真实模型回答。如果 flatten_json_output 和此字段都设置为 True,结果中会包含一个额外的 ml_generate_text_grounding_result 列,其中提供了模型用于收集更多信息的来源。默认值为 FALSE
  • SAFETY_SETTINGS:一个 ARRAY<STRUCT<STRING AS category, STRING AS threshold>> 值,用于配置内容安全阈值以过滤回答。该结构体中的第一个元素指定了危害类别,第二个元素指定了相应的阻塞阈值。模型会过滤掉违反这些设置的内容。您只能指定每个类别一次。例如,您不能同时指定 STRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_MEDIUM_AND_ABOVE' AS threshold)STRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_ONLY_HIGH' AS threshold)。如果给定类别没有安全设置,则系统会使用 BLOCK_MEDIUM_AND_ABOVE 安全设置。 支持的类别如下:
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_DANGEROUS_CONTENT
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    支持的阈值如下:
    • BLOCK_NONE受限
    • BLOCK_LOW_AND_ABOVE
    • BLOCK_MEDIUM_AND_ABOVE(默认)
    • BLOCK_ONLY_HIGH
    • HARM_BLOCK_THRESHOLD_UNSPECIFIED
    如需了解详情,请参阅安全类别阻塞阈值的定义。
  • REQUEST_TYPESTRING 值,用于指定要发送到 Gemini 模型的推断请求的类型。请求类型决定了请求使用的配额。有效值如下所示:
    • DEDICATEDML.GENERATE_TEXT 函数仅使用预配吞吐量配额。如果预配吞吐量配额不可用,ML.GENERATE_TEXT 函数会返回错误 Provisioned throughput is not purchased or is not active
    • SHARED:即使您购买了预配吞吐量配额,ML.GENERATE_TEXT 函数也只会使用动态共享配额 (DSQ)
    • UNSPECIFIEDML.GENERATE_TEXT 函数使用如下所示的配额:
      • 如果您尚未购买预配吞吐量配额,则 ML.GENERATE_TEXT 函数会使用 DSQ 配额。
      • 如果您购买了预配吞吐量配额,ML.GENERATE_TEXT 函数会优先使用预配吞吐量配额。如果请求超出预配吞吐量配额,溢出流量将使用 DSQ 配额。
    • 默认值为 UNSPECIFIED

      如需了解详情,请参阅使用 Vertex AI 预配吞吐量

    示例 1

    以下示例显示了具有以下特征的请求:

    • 提示在 articles 表的 body 列中输入文本摘要。
    • 将模型的 JSON 回答解析为单独的列。
    SELECT *
    FROM
      ML.GENERATE_TEXT(
        MODEL `mydataset.text_model`,
        (
          SELECT CONCAT('Summarize this text', body) AS prompt
          FROM mydataset.articles
        ),
        STRUCT(TRUE AS flatten_json_output));

    示例 2

    以下示例显示了具有以下特征的请求:

    • 通过将提供提示前缀的字符串与表列串联起来,使用查询创建提示数据。
    • 返回简短回答。
    • 不会将模型的 JSON 回答解析为单独的列。
    SELECT *
    FROM
      ML.GENERATE_TEXT(
        MODEL `mydataset.text_model`,
        (
          SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt
          FROM mydataset.input_table
        ),
        STRUCT(
          100 AS max_output_tokens,
          FALSE AS flatten_json_output));

    示例 3

    以下示例显示了具有以下特征的请求:

    • prompts 表的 prompt 列用于提示。
    • 将模型的 JSON 回答解析为单独的列。
    SELECT *
    FROM
      ML.GENERATE_TEXT(
        MODEL `mydataset.text_model`,
        TABLE mydataset.prompts,
        STRUCT(TRUE AS flatten_json_output));

    示例 4

    以下示例显示了具有以下特征的请求:

    • prompts 表的 prompt 列用于提示。
    • 返回简短回答。
    • 将 JSON 响应展平为单独的列。
    • 检索并返回公开 Web 数据以建立回答依据
    • 使用两项安全设置过滤掉不安全的回答。
    SELECT *
    FROM
      ML.GENERATE_TEXT(
        MODEL `mydataset.text_model`,
        TABLE mydataset.prompts,
        STRUCT(
          100 AS max_output_tokens, 0.5 AS top_p,
          TRUE AS flatten_json_output,
          TRUE AS ground_with_google_search,
          [STRUCT('HARM_CATEGORY_HATE_SPEECH' AS category,
            'BLOCK_LOW_AND_ABOVE' AS threshold),
          STRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category,
            'BLOCK_MEDIUM_AND_ABOVE' AS threshold)] AS safety_settings));

    示例 5

    以下示例显示了具有以下特征的请求:

    • prompts 表的 prompt 列用于提示。
    • 返回较长的回答。
    • 将 JSON 响应展平为单独的列。
    SELECT *
    FROM
      ML.GENERATE_TEXT(
        MODEL `mydataset.flash_2_model`,
        TABLE mydataset.prompts,
        STRUCT(
          0.4 AS temperature, 8192 AS max_output_tokens,
          TRUE AS flatten_json_output));

    示例 6

    以下示例显示了具有以下特征的请求:

    • 提示在 articles 表的 body 列中输入文本摘要。
    • 将 JSON 响应展平为单独的列。
    • 检索并返回公开 Web 数据以建立回答依据
    • 使用两项安全设置过滤掉不安全的回答。
    SELECT *
    FROM
      ML.GENERATE_TEXT(
        MODEL `mydataset.text_model`,
        (
          SELECT CONCAT('Summarize this text', body) AS prompt
          FROM mydataset.articles
        ),
        STRUCT(
          .1 AS TEMPERATURE,
          TRUE AS flatten_json_output, TRUE AS ground_with_google_search,
          [STRUCT('HARM_CATEGORY_HATE_SPEECH' AS category,
            'BLOCK_LOW_AND_ABOVE' AS threshold),
          STRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category,
            'BLOCK_MEDIUM_AND_ABOVE' AS threshold)] AS safety_settings));

Claude

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (PROMPT_QUERY)},
  STRUCT(TOKENS AS max_output_tokens, TOP_K AS top_k,
  TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output)
);

请替换以下内容:

  • PROJECT_ID:您的项目 ID。
  • DATASET_ID:包含该模型的数据集的 ID。
  • MODEL_NAME:模型的名称。
  • TABLE_NAME:包含提示的表的名称。该表必须具有名为 prompt 的列,或者您可以通过别名来使用其他名称的列。
  • PROMPT_QUERY:提供提示数据的查询。此查询必须生成一个名为 prompt 的列。
  • TOKENS:一个 INT64 值,用于设置回答中可生成的词元数上限。 此值必须在范围 [1,4096] 内。指定较低的值可获得较短的回答,指定较高的值可获得较长的回答。 默认值为 128
  • TOP_K[1,40] 范围内的一个 INT64 值,用于确定模型考虑选择的初始词元池。指定较低的值可获得随机程度较低的回答,指定较高的值可获得随机程度较高的回答。 如果您未指定值,模型会确定合适的值。
  • TOP_P:范围 [0.0,1.0] 内的一个 FLOAT64 值,用于确定所选 token 的概率。指定较低的值可获得随机程度较低的回答,指定较高的值可获得随机程度较高的回答。如果您未指定值,模型会确定合适的值。
  • FLATTEN_JSON:一个 BOOL 值,用于确定是否在单独的列中返回生成的文本和安全属性。默认值为 FALSE

示例 1

以下示例显示了具有以下特征的请求:

  • 提示在 articles 表的 body 列中输入文本摘要。
  • 将模型的 JSON 回答解析为单独的列。
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.text_model`,
    (
      SELECT CONCAT('Summarize this text', body) AS prompt
      FROM mydataset.articles
    ),
    STRUCT(TRUE AS flatten_json_output));

示例 2

以下示例显示了具有以下特征的请求:

  • 通过将提供提示前缀的字符串与表列串联起来,使用查询创建提示数据。
  • 返回简短回答。
  • 不会将模型的 JSON 回答解析为单独的列。
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.text_model`,
    (
      SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt
      FROM mydataset.input_table
    ),
    STRUCT(
      100 AS max_output_tokens,
      FALSE AS flatten_json_output));

示例 3

以下示例显示了具有以下特征的请求:

  • prompts 表的 prompt 列用于提示。
  • 将模型的 JSON 回答解析为单独的列。
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.text_model`,
    TABLE mydataset.prompts,
    STRUCT(TRUE AS flatten_json_output));

Llama

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (PROMPT_QUERY)},
  STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature,
  TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output,
  STOP_SEQUENCES AS stop_sequences)
);

请替换以下内容:

  • PROJECT_ID:您的项目 ID。
  • DATASET_ID:包含该模型的数据集的 ID。
  • MODEL_NAME:模型的名称。
  • TABLE_NAME:包含提示的表的名称。该表必须具有名为 prompt 的列,或者您可以通过别名来使用其他名称的列。
  • PROMPT_QUERY:提供提示数据的查询。此查询必须生成一个名为 prompt 的列。
  • TOKENS:一个 INT64 值,用于设置回答中可生成的词元数上限。 此值必须在范围 [1,4096] 内。指定较低的值可获得较短的回答,指定较高的值可获得较长的回答。 默认值为 128
  • TEMPERATURE:范围 [0.0,1.0] 内的一个 FLOAT64 值,用于控制 token 选择的随机程度。 默认值为 0

    较低的 temperature 值适合需要更具确定性、更少开放性或创造性回答的提示,而较高的 temperature 值可以带来更具多样性或创造性的结果。temperature 的值为 0 表示确定性,即始终选择概率最高的回答。

  • TOP_P:范围 [0.0,1.0] 内的一个 FLOAT64 值,用于确定所选 token 的概率。指定较低的值可获得随机程度较低的回答,指定较高的值可获得随机程度较高的回答。默认值为 0.95
  • FLATTEN_JSON:一个 BOOL 值,用于确定是否在单独的列中返回生成的文本和安全属性。默认值为 FALSE
  • STOP_SEQUENCES:一个 ARRAY<STRING> 值,如果模型的回答中包含指定的字符串,则用于移除这些字符串。字符串需要完全匹配,包括大小写。默认值为空数组。

示例 1

以下示例显示了具有以下特征的请求:

  • 提示在 articles 表的 body 列中输入文本摘要。
  • 将模型的 JSON 回答解析为单独的列。
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.text_model`,
    (
      SELECT CONCAT('Summarize this text', body) AS prompt
      FROM mydataset.articles
    ),
    STRUCT(TRUE AS flatten_json_output));

示例 2

以下示例显示了具有以下特征的请求:

  • 通过将提供提示前缀的字符串与表列串联起来,使用查询创建提示数据。
  • 返回简短回答。
  • 不会将模型的 JSON 回答解析为单独的列。
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.text_model`,
    (
      SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt
      FROM mydataset.input_table
    ),
    STRUCT(
      100 AS max_output_tokens,
      FALSE AS flatten_json_output));

示例 3

以下示例显示了具有以下特征的请求:

  • prompts 表的 prompt 列用于提示。
  • 将模型的 JSON 回答解析为单独的列。
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.text_model`,
    TABLE mydataset.prompts,
    STRUCT(TRUE AS flatten_json_output));

Mistral AI

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (PROMPT_QUERY)},
  STRUCT(TOKENS AS max_output_tokens, TEMPERATURE AS temperature,
  TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output,
  STOP_SEQUENCES AS stop_sequences)
);

请替换以下内容:

  • PROJECT_ID:您的项目 ID。
  • DATASET_ID:包含该模型的数据集的 ID。
  • MODEL_NAME:模型的名称。
  • TABLE_NAME:包含提示的表的名称。该表必须具有名为 prompt 的列,或者您可以通过别名来使用其他名称的列。
  • PROMPT_QUERY:提供提示数据的查询。此查询必须生成一个名为 prompt 的列。
  • TOKENS:一个 INT64 值,用于设置回答中可生成的词元数上限。 此值必须在范围 [1,4096] 内。指定较低的值可获得较短的回答,指定较高的值可获得较长的回答。 默认值为 128
  • TEMPERATURE:范围 [0.0,1.0] 内的一个 FLOAT64 值,用于控制 token 选择的随机程度。 默认值为 0

    较低的 temperature 值适合需要更具确定性、更少开放性或创造性回答的提示,而较高的 temperature 值可以带来更具多样性或创造性的结果。temperature 的值为 0 表示确定性,即始终选择概率最高的回答。

  • TOP_P:范围 [0.0,1.0] 内的一个 FLOAT64 值,用于确定所选 token 的概率。指定较低的值可获得随机程度较低的回答,指定较高的值可获得随机程度较高的回答。默认值为 0.95
  • FLATTEN_JSON:一个 BOOL 值,用于确定是否在单独的列中返回生成的文本和安全属性。默认值为 FALSE
  • STOP_SEQUENCES:一个 ARRAY<STRING> 值,如果模型的回答中包含指定的字符串,则用于移除这些字符串。字符串需要完全匹配,包括大小写。默认值为空数组。

示例 1

以下示例显示了具有以下特征的请求:

  • 提示在 articles 表的 body 列中输入文本摘要。
  • 将模型的 JSON 回答解析为单独的列。
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.text_model`,
    (
      SELECT CONCAT('Summarize this text', body) AS prompt
      FROM mydataset.articles
    ),
    STRUCT(TRUE AS flatten_json_output));

示例 2

以下示例显示了具有以下特征的请求:

  • 通过将提供提示前缀的字符串与表列串联起来,使用查询创建提示数据。
  • 返回简短回答。
  • 不会将模型的 JSON 回答解析为单独的列。
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.text_model`,
    (
      SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt
      FROM mydataset.input_table
    ),
    STRUCT(
      100 AS max_output_tokens,
      FALSE AS flatten_json_output));

示例 3

以下示例显示了具有以下特征的请求:

  • prompts 表的 prompt 列用于提示。
  • 将模型的 JSON 回答解析为单独的列。
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.text_model`,
    TABLE mydataset.prompts,
    STRUCT(TRUE AS flatten_json_output));

开放模型

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  {TABLE PROJECT_ID.DATASET_ID.TABLE_NAME | (PROMPT_QUERY)},
  STRUCT(TOKENS AS max_output_tokens,
   TEMPERATURE AS temperature, TOP_K AS top_k,
  TOP_P AS top_p, FLATTEN_JSON AS flatten_json_output)
);

请替换以下内容:

  • PROJECT_ID:您的项目 ID。
  • DATASET_ID:包含该模型的数据集的 ID。
  • MODEL_NAME:模型的名称。
  • TABLE_NAME:包含提示的表的名称。该表必须具有名为 prompt 的列,或者您可以通过别名来使用其他名称的列。
  • PROMPT_QUERY:提供提示数据的查询。此查询必须生成一个名为 prompt 的列。
  • TOKENS:一个 INT64 值,用于设置回答中可生成的词元数上限。 此值必须在范围 [1,4096] 内。指定较低的值可获得较短的回答,指定较高的值可获得较长的回答。 如果您未指定值,模型会确定合适的值。
  • TEMPERATURE:范围 [0.0,1.0] 内的一个 FLOAT64 值,用于控制 token 选择的随机程度。 如果您未指定值,模型会确定合适的值。

    较低的 temperature 值适合需要更具确定性、更少开放性或创造性回答的提示,而较高的 temperature 值可以带来更具多样性或创造性的结果。temperature 的值为 0 表示确定性,即始终选择概率最高的回答。

  • TOP_K[1,40] 范围内的一个 INT64 值,用于确定模型考虑选择的初始词元池。指定较低的值可获得随机程度较低的回答,指定较高的值可获得随机程度较高的回答。 如果您未指定值,模型会确定合适的值。
  • TOP_P:范围 [0.0,1.0] 内的一个 FLOAT64 值,用于确定所选 token 的概率。指定较低的值可获得随机程度较低的回答,指定较高的值可获得随机程度较高的回答。如果您未指定值,模型会确定合适的值。
  • FLATTEN_JSON:一个 BOOL 值,用于确定是否在单独的列中返回生成的文本和安全属性。默认值为 FALSE

示例 1

以下示例显示了具有以下特征的请求:

  • 提示在 articles 表的 body 列中输入文本摘要。
  • 将模型的 JSON 回答解析为单独的列。
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.text_model`,
    (
      SELECT CONCAT('Summarize this text', body) AS prompt
      FROM mydataset.articles
    ),
    STRUCT(TRUE AS flatten_json_output));

示例 2

以下示例显示了具有以下特征的请求:

  • 通过将提供提示前缀的字符串与表列串联起来,使用查询创建提示数据。
  • 返回简短回答。
  • 不会将模型的 JSON 回答解析为单独的列。
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.text_model`,
    (
      SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt
      FROM mydataset.input_table
    ),
    STRUCT(
      100 AS max_output_tokens,
      FALSE AS flatten_json_output));

示例 3

以下示例显示了具有以下特征的请求:

  • prompts 表的 prompt 列用于提示。
  • 将模型的 JSON 回答解析为单独的列。
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.text_model`,
    TABLE mydataset.prompts,
    STRUCT(TRUE AS flatten_json_output));

根据对象表数据生成文本

ML.GENERATE_TEXT 函数与 Gemini 模型结合使用,以分析对象表中的非结构化数据,从而生成文本。您可以在 prompt 参数中提供提示数据。

SELECT *
FROM ML.GENERATE_TEXT(
  MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`,
  TABLE PROJECT_ID.DATASET_ID.TABLE_NAME,
  STRUCT(PROMPT AS prompt, TOKENS AS max_output_tokens,
  TEMPERATURE AS temperature, TOP_P AS top_p,
  FLATTEN_JSON AS flatten_json_output,
  STOP_SEQUENCES AS stop_sequences,
  SAFETY_SETTINGS AS safety_settings)
);

请替换以下内容:

  • PROJECT_ID:您的项目 ID。
  • DATASET_ID:包含该模型的数据集的 ID。
  • MODEL_NAME:模型的名称。此模型必须是 Gemini 模型。
  • TABLE_NAME:包含要分析的内容的对象表的名称。如需详细了解您可以分析的内容类型,请参阅输入

    对象表使用的 Cloud Storage 存储桶应位于您创建模型并调用 ML.GENERATE_TEXT 函数所在的项目中。如果您要在不同于对象表使用的 Cloud Storage 存储桶所属项目中调用 ML.GENERATE_TEXT 函数,您必须在存储桶级层将 Storage Admin 角色授予 service-A@gcp-sa-aiplatform.iam.gserviceaccount.com 服务账号。

  • PROMPT:用于分析内容的提示。
  • TOKENS:一个 INT64 值,用于设置回答中可生成的词元数上限。 此值必须在范围 [1,4096] 内。指定较低的值可获得较短的回答,指定较高的值可获得较长的回答。 如果您未指定值,模型会确定合适的值。
  • TEMPERATURE:范围 [0.0,1.0] 内的一个 FLOAT64 值,用于控制 token 选择的随机程度。 如果您未指定值,模型会确定合适的值。

    较低的 temperature 值适合需要更具确定性、更少开放性或创造性回答的提示,而较高的 temperature 值可以带来更具多样性或创造性的结果。temperature 的值为 0 表示确定性,即始终选择概率最高的回答。

  • TOP_K[1,40] 范围内的一个 INT64 值,用于确定模型考虑选择的初始词元池。指定较低的值可获得随机程度较低的回答,指定较高的值可获得随机程度较高的回答。 如果您未指定值,模型会确定合适的值。
  • TOP_P:范围 [0.0,1.0] 内的一个 FLOAT64 值,用于确定所选 token 的概率。指定较低的值可获得随机程度较低的回答,指定较高的值可获得随机程度较高的回答。如果您未指定值,模型会确定合适的值。
  • FLATTEN_JSON:一个 BOOL 值,用于确定是否在单独的列中返回生成的文本和安全属性。默认值为 FALSE

示例

以下示例会翻译和转写名为 feedback 的对象表中的音频内容:

SELECT * FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.audio_model`,
    TABLE `mydataset.feedback`,
      STRUCT('What is the content of this audio clip, translated into Spanish?' AS PROMPT,
      TRUE AS FLATTEN_JSON_OUTPUT));

以下示例会对名为 invoices 的对象表中的 PDF 内容进行分类:

SELECT * FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.classify_model`,
    TABLE `mydataset.invoices`,
      STRUCT('Classify this document based on the invoice total, using the following categories: 0 to 100, 101 to 200, greater than 200' AS PROMPT,
      TRUE AS FLATTEN_JSON_OUTPUT));