使用 ML.GENERATE_TEXT 函数生成文本
本文档介绍了如何创建引用 Vertex AI 基础模型的 BigQuery ML 远程模型。然后,您可以将该模型与 ML.GENERATE_TEXT
函数结合使用,以分析 BigQuery 表中的文本或视觉内容。
所需权限
如需创建连接,您需要拥有以下 Identity and Access Management (IAM) 角色的成员资格:
roles/bigquery.connectionAdmin
如需向连接的服务账号授予权限,您需要以下权限:
resourcemanager.projects.setIamPolicy
如需使用 BigQuery ML 创建模型,您需要以下 IAM 权限:
bigquery.jobs.create
bigquery.models.create
bigquery.models.getData
bigquery.models.updateData
bigquery.models.updateMetadata
如需运行推断,您需要以下权限:
- 表的
bigquery.tables.getData
权限 - 模型的
bigquery.models.getData
权限 bigquery.jobs.create
- 表的
准备工作
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Enable the BigQuery, BigQuery Connection, and Vertex AI APIs.
如果您要将 ML.GENERATE_TEXT
与 gemini-pro-vision
模型搭配使用以分析对象表中的视觉内容,则必须拥有企业版或企业 Plus 版预留。如需了解详情,请参阅创建预留。
创建连接
创建 Cloud 资源连接并获取连接的服务账号。
从下列选项中选择一项:
控制台
转到 BigQuery 页面。
如需创建连接,请点击
添加,然后点击与外部数据源的连接。在连接类型列表中,选择 Vertex AI 远程模型、远程函数和 BigLake(Cloud 资源)。
在连接 ID 字段中,输入连接的名称。
点击创建连接。
点击转到连接。
在连接信息窗格中,复制服务账号 ID 以在后续步骤中使用。
bq
在命令行环境中,创建连接:
bq mk --connection --location=REGION --project_id=PROJECT_ID \ --connection_type=CLOUD_RESOURCE CONNECTION_ID
--project_id
参数会替换默认项目。替换以下内容:
REGION
:您的连接区域PROJECT_ID
:您的 Google Cloud 项目 IDCONNECTION_ID
:您的连接的 ID
当您创建连接资源时,BigQuery 会创建一个唯一的系统服务账号,并将其与该连接相关联。
问题排查:如果您收到以下连接错误,请更新 Google Cloud SDK:
Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
检索并复制服务账号 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
将以下部分附加到 main.tf
文件中。
## This creates a cloud resource connection. ## Note: The cloud resource nested object has only one output only field - serviceAccountId. resource "google_bigquery_connection" "connection" { connection_id = "CONNECTION_ID" project = "PROJECT_ID" location = "REGION" cloud_resource {} }替换以下内容:
CONNECTION_ID
:您的连接的 IDPROJECT_ID
:您的 Google Cloud 项目 IDREGION
:您的连接区域
向服务账号授予访问权限
向您的服务账号授予使用连接的权限。未授予权限会导致错误。从下列选项中选择一项:
控制台
前往 IAM 和管理页面。
点击
Add。系统随即会打开添加主账号对话框。
在新的主账号字段中,输入您之前复制的服务账号 ID。
在选择角色字段中,选择 Vertex AI,然后选择 Vertex AI User。
点击保存。
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
创建模型
在 Google Cloud 控制台中,转到 BigQuery 页面。
使用 SQL 编辑器创建远程模型:
CREATE OR REPLACE MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME` REMOTE WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID` OPTIONS (ENDPOINT = 'ENDPOINT');
替换以下内容:
PROJECT_ID
:您的项目 IDDATASET_ID
:包含模型的数据集的 ID。 此数据集必须与您使用的连接位于同一位置MODEL_NAME
:模型的名称REGION
:连接使用的区域CONNECTION_ID
:BigQuery 连接的 ID当您在 Google Cloud 控制台中查看连接详情时,它是连接 ID 中显示的完全限定连接 ID 的最后一部分中的值,例如
projects/myproject/locations/connection_location/connections/myconnection
ENDPOINT
:要使用的受支持的 Vertex AI 模型的名称。例如ENDPOINT='gemini-pro'
。对于某些类型的模型,您可以通过将
@version
附加到模型名称来指定模型的特定版本。例如text-bison@001
。如需了解不同模型类型支持的模型版本,请参阅ENDPOINT
。
使用表中的提示根据文本数据生成文本
您可以将 ML.GENERATE_TEXT
函数与基于支持的 Vertex AI Gemini API 或 Vertex AI PaLM API 文本模型的远程模型以及表列中的提示结合使用来生成文本:
gemini-pro
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, TABLE PROJECT_ID.DATASET_ID.TABLE_NAME, 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, STOP_SEQUENCES AS stop_sequences) );
替换以下内容:
PROJECT_ID
:您的项目 ID。DATASET_ID
:包含该模型的数据集的 ID。MODEL_NAME
:模型的名称。TABLE_NAME
:包含提示的表的名称。该表必须具有名为prompt
的列,或者您可以通过别名来使用其他名称的列。TOKENS
:一个INT64
值,用于设置回答中可生成的词元数上限。此值必须在范围[1,8192]
内。指定较低的值可获得较短的回答,指定较高的值可获得较长的回答。默认值为128
。TEMPERATURE
:[0.0,1.0]
范围内的一个FLOAT64
值,用于控制词元选择中的随机程度。默认值为0
。较低的
temperature
值适合需要更具确定性和较少开放性或创造性响应的提示,而较高的temperature
值可以产生更具多样性或创造性的结果。temperature
的0
值具有确定性,这意味着系统始终选择最高概率响应。TOP_K
:[1,40]
范围内的一个INT64
值,用于确定模型考虑选择的初始词元池。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为40
。TOP_P
:[0.0,1.0]
范围内的FLOAT64
值有助于确定选择了TOP_K
确定的池中的哪些词元。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为0.95
。FLATTEN_JSON
:一个BOOL
值,用于确定是否在不同列中返回生成的文本和安全属性。默认值为FALSE
。STOP_SEQUENCES
:一个ARRAY<STRING>
值,如果模型的回答中包含指定的字符串,则用于移除这些字符串。字符串需要完全匹配,包括大小写。默认值为空数组。
示例
以下示例显示了具有以下特征的请求:
- 使用
prompts
表的prompt
列进行提示。 - 返回简短和中等的可能响应。
- 分列返回生成的文本和安全属性。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model`, TABLE mydataset.prompts, STRUCT( 0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p, 40 AS top_k, TRUE AS flatten_json_output));
text-bison
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, TABLE PROJECT_ID.DATASET_ID.TABLE_NAME, 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, STOP_SEQUENCES AS stop_sequences) );
替换以下内容:
PROJECT_ID
:您的项目 ID。DATASET_ID
:包含该模型的数据集的 ID。MODEL_NAME
:模型的名称。TABLE_NAME
:包含提示的表的名称。该表必须具有名为prompt
的列,或者您可以通过别名来使用其他名称的列。TOKENS
:一个INT64
值,用于设置回答中可生成的词元数上限。此值必须在范围[1,1024]
内。指定较低的值可获得较短的回答,指定较高的值可获得较长的回答。默认值为128
。TEMPERATURE
:[0.0,1.0]
范围内的一个FLOAT64
值,用于控制词元选择中的随机程度。默认值为0
。较低的
temperature
值适合需要更具确定性和较少开放性或创造性响应的提示,而较高的temperature
值可以产生更具多样性或创造性的结果。temperature
的0
值具有确定性,这意味着系统始终选择最高概率响应。TOP_K
:[1,40]
范围内的一个INT64
值,用于确定模型考虑选择的初始词元池。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为40
。TOP_P
:[0.0,1.0]
范围内的FLOAT64
值有助于确定选择了TOP_K
确定的池中的哪些词元。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为0.95
。FLATTEN_JSON
:一个BOOL
值,用于确定是否在不同列中返回生成的文本和安全属性。默认值为FALSE
。STOP_SEQUENCES
:一个ARRAY<STRING>
值,如果模型的回答中包含指定的字符串,则用于移除这些字符串。字符串需要完全匹配,包括大小写。默认值为空数组。
示例
以下示例显示了具有以下特征的请求:
- 使用
prompts
表的prompt
列进行提示。 - 返回简短和中等的可能响应。
- 分列返回生成的文本和安全属性。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model`, TABLE mydataset.prompts, STRUCT( 0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p, 40 AS top_k, TRUE AS flatten_json_output));
text-bison32
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, TABLE PROJECT_ID.DATASET_ID.TABLE_NAME, 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, STOP_SEQUENCES AS stop_sequences) );
替换以下内容:
PROJECT_ID
:您的项目 ID。DATASET_ID
:包含该模型的数据集的 ID。MODEL_NAME
:模型的名称。TABLE_NAME
:包含提示的表的名称。该表必须具有名为prompt
的列,或者您可以通过别名来使用其他名称的列。TOKENS
:一个INT64
值,用于设置回答中可生成的词元数上限。此值必须在范围[1,8192]
内。指定较低的值可获得较短的回答,指定较高的值可获得较长的回答。默认值为128
。TEMPERATURE
:[0.0,1.0]
范围内的一个FLOAT64
值,用于控制词元选择中的随机程度。默认值为0
。较低的
temperature
值适合需要更具确定性和较少开放性或创造性响应的提示,而较高的temperature
值可以产生更具多样性或创造性的结果。temperature
的0
值具有确定性,这意味着系统始终选择最高概率响应。TOP_K
:[1,40]
范围内的一个INT64
值,用于确定模型考虑选择的初始词元池。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为40
。TOP_P
:[0.0,1.0]
范围内的FLOAT64
值有助于确定选择了TOP_K
确定的池中的哪些词元。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为0.95
。FLATTEN_JSON
:一个BOOL
值,用于确定是否在不同列中返回生成的文本和安全属性。默认值为FALSE
。STOP_SEQUENCES
:一个ARRAY<STRING>
值,如果模型的回答中包含指定的字符串,则用于移除这些字符串。字符串需要完全匹配,包括大小写。默认值为空数组。
示例
以下示例显示了具有以下特征的请求:
- 使用
prompts
表的prompt
列进行提示。 - 返回简短和中等的可能响应。
- 分列返回生成的文本和安全属性。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model`, TABLE mydataset.prompts, STRUCT( 0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p, 40 AS top_k, TRUE AS flatten_json_output));
text-unicorn
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_NAME`, TABLE PROJECT_ID.DATASET_ID.TABLE_NAME, 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, STOP_SEQUENCES AS stop_sequences) );
替换以下内容:
PROJECT_ID
:您的项目 ID。DATASET_ID
:包含该模型的数据集的 ID。MODEL_NAME
:模型的名称。TABLE_NAME
:包含提示的表的名称。该表必须具有名为prompt
的列,或者您可以通过别名来使用其他名称的列。TOKENS
:一个INT64
值,用于设置回答中可生成的词元数上限。此值必须在范围[1,1024]
内。指定较低的值可获得较短的回答,指定较高的值可获得较长的回答。默认值为128
。TEMPERATURE
:[0.0,1.0]
范围内的一个FLOAT64
值,用于控制词元选择中的随机程度。默认值为0
。较低的
temperature
值适合需要更具确定性和较少开放性或创造性响应的提示,而较高的temperature
值可以产生更具多样性或创造性的结果。temperature
的0
值具有确定性,这意味着系统始终选择最高概率响应。TOP_K
:[1,40]
范围内的一个INT64
值,用于确定模型考虑选择的初始词元池。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为40
。TOP_P
:[0.0,1.0]
范围内的FLOAT64
值有助于确定选择了TOP_K
确定的池中的哪些词元。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为0.95
。FLATTEN_JSON
:一个BOOL
值,用于确定是否在不同列中返回生成的文本和安全属性。默认值为FALSE
。STOP_SEQUENCES
:一个ARRAY<STRING>
值,如果模型的回答中包含指定的字符串,则用于移除这些字符串。字符串需要完全匹配,包括大小写。默认值为空数组。
示例
以下示例显示了具有以下特征的请求:
- 使用
prompts
表的prompt
列进行提示。 - 返回简短和中等的可能响应。
- 分列返回生成的文本和安全属性。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model`, TABLE mydataset.prompts, STRUCT( 0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p, 40 AS top_k, TRUE AS flatten_json_output));
使用查询中的提示根据文本数据生成文本
您可以将 ML.GENERATE_TEXT
函数与基于支持的 Gemini API 或 PaLM API 文本模型的远程模型以及提供提示的查询结合使用来生成文本:
gemini-pro
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_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, STOP_SEQUENCES AS stop_sequences) );
替换以下内容:
PROJECT_ID
:您的项目 ID。DATASET_ID
:包含该模型的数据集的 ID。MODEL_NAME
:模型的名称。PROMPT_QUERY
:提供提示数据的查询。TOKENS
:一个INT64
值,用于设置回答中可生成的词元数上限。此值必须在范围[1,8192]
内。指定较低的值可获得较短的回答,指定较高的值可获得较长的回答。默认值为128
。TEMPERATURE
:[0.0,1.0]
范围内的一个FLOAT64
值,用于控制词元选择中的随机程度。默认值为0
。较低的
temperature
值适合需要更具确定性和较少开放性或创造性响应的提示,而较高的temperature
值可以产生更具多样性或创造性的结果。temperature
的0
值具有确定性,这意味着系统始终选择最高概率响应。TOP_K
:[1,40]
范围内的一个INT64
值,用于确定模型考虑选择的初始词元池。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为40
。TOP_P
:[0.0,1.0]
范围内的FLOAT64
值有助于确定选择了TOP_K
确定的池中的哪些词元。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为0.95
。FLATTEN_JSON
:一个BOOL
值,用于确定是否在不同列中返回生成的文本和安全属性。默认值为FALSE
。STOP_SEQUENCES
:一个ARRAY<STRING>
值,如果模型的回答中包含指定的字符串,则用于移除这些字符串。字符串需要完全匹配,包括大小写。默认值为空数组。
示例 1
以下示例显示了具有以下特征的请求:
- 提示提取
articles
表的body
列中的文本。 - 返回中等且更可能的响应。
- 分列返回生成的文本和安全属性。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model`, ( SELECT CONCAT('Summarize this text', body) AS prompt FROM mydataset.articles ), STRUCT( 0.2 AS temperature, 650 AS max_output_tokens, 0.2 AS top_p, 15 AS top_k, TRUE AS flatten_json_output));
示例 2
以下示例显示了具有以下特征的请求:
- 使用查询通过将提供提示前缀与表列的字符串串联起来来创建提示数据。
- 返回简短和中等的可能响应。
- 不在单独的列中返回生成的文本和安全属性。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model`, ( SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt FROM mydataset.input_table ), STRUCT( 0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p, 30 AS top_k, FALSE AS flatten_json_output));
text-bison
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_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, STOP_SEQUENCES AS stop_sequences) );
替换以下内容:
PROJECT_ID
:您的项目 ID。DATASET_ID
:包含该模型的数据集的 ID。MODEL_NAME
:模型的名称。PROMPT_QUERY
:提供提示数据的查询。TOKENS
:一个INT64
值,用于设置回答中可生成的词元数上限。此值必须在范围[1,1024]
内。指定较低的值可获得较短的回答,指定较高的值可获得较长的回答。默认值为128
。TEMPERATURE
:[0.0,1.0]
范围内的一个FLOAT64
值,用于控制词元选择中的随机程度。默认值为0
。较低的
temperature
值适合需要更具确定性和较少开放性或创造性响应的提示,而较高的temperature
值可以产生更具多样性或创造性的结果。temperature
的0
值具有确定性,这意味着系统始终选择最高概率响应。TOP_K
:[1,40]
范围内的一个INT64
值,用于确定模型考虑选择的初始词元池。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为40
。TOP_P
:[0.0,1.0]
范围内的FLOAT64
值有助于确定选择了TOP_K
确定的池中的哪些词元。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为0.95
。FLATTEN_JSON
:一个BOOL
值,用于确定是否在不同列中返回生成的文本和安全属性。默认值为FALSE
。STOP_SEQUENCES
:一个ARRAY<STRING>
值,如果模型的回答中包含指定的字符串,则用于移除这些字符串。字符串需要完全匹配,包括大小写。默认值为空数组。
示例 1
以下示例显示了具有以下特征的请求:
- 提示提取
articles
表的body
列中的文本。 - 返回中等且更可能的响应。
- 分列返回生成的文本和安全属性。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model`, ( SELECT CONCAT('Summarize this text', body) AS prompt FROM mydataset.articles ), STRUCT( 0.2 AS temperature, 650 AS max_output_tokens, 0.2 AS top_p, 15 AS top_k, TRUE AS flatten_json_output));
示例 2
以下示例显示了具有以下特征的请求:
- 使用查询通过将提供提示前缀与表列的字符串串联起来来创建提示数据。
- 返回简短和中等的可能响应。
- 不在单独的列中返回生成的文本和安全属性。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model`, ( SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt FROM mydataset.input_table ), STRUCT( 0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p, 30 AS top_k, FALSE AS flatten_json_output));
text-bison32
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_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, STOP_SEQUENCES AS stop_sequences) );
替换以下内容:
PROJECT_ID
:您的项目 ID。DATASET_ID
:包含该模型的数据集的 ID。MODEL_NAME
:模型的名称。PROMPT_QUERY
:提供提示数据的查询。TOKENS
:一个INT64
值,用于设置回答中可生成的词元数上限。此值必须在范围[1,8192]
内。指定较低的值可获得较短的回答,指定较高的值可获得较长的回答。默认值为128
。TEMPERATURE
:[0.0,1.0]
范围内的一个FLOAT64
值,用于控制词元选择中的随机程度。默认值为0
。较低的
temperature
值适合需要更具确定性和较少开放性或创造性响应的提示,而较高的temperature
值可以产生更具多样性或创造性的结果。temperature
的0
值具有确定性,这意味着系统始终选择最高概率响应。TOP_K
:[1,40]
范围内的一个INT64
值,用于确定模型考虑选择的初始词元池。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为40
。TOP_P
:[0.0,1.0]
范围内的FLOAT64
值有助于确定选择了TOP_K
确定的池中的哪些词元。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为0.95
。FLATTEN_JSON
:一个BOOL
值,用于确定是否在不同列中返回生成的文本和安全属性。默认值为FALSE
。STOP_SEQUENCES
:一个ARRAY<STRING>
值,如果模型的回答中包含指定的字符串,则用于移除这些字符串。字符串需要完全匹配,包括大小写。默认值为空数组。
示例 1
以下示例显示了具有以下特征的请求:
- 提示提取
articles
表的body
列中的文本。 - 返回中等且更可能的响应。
- 分列返回生成的文本和安全属性。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model`, ( SELECT CONCAT('Summarize this text', body) AS prompt FROM mydataset.articles ), STRUCT( 0.2 AS temperature, 650 AS max_output_tokens, 0.2 AS top_p, 15 AS top_k, TRUE AS flatten_json_output));
示例 2
以下示例显示了具有以下特征的请求:
- 使用查询通过将提供提示前缀与表列的字符串串联起来来创建提示数据。
- 返回简短和中等的可能响应。
- 不在单独的列中返回生成的文本和安全属性。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model`, ( SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt FROM mydataset.input_table ), STRUCT( 0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p, 30 AS top_k, FALSE AS flatten_json_output));
text-unicorn
SELECT * FROM ML.GENERATE_TEXT( MODEL `PROJECT_ID.DATASET_ID.MODEL_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, STOP_SEQUENCES AS stop_sequences) );
替换以下内容:
PROJECT_ID
:您的项目 ID。DATASET_ID
:包含该模型的数据集的 ID。MODEL_NAME
:模型的名称。PROMPT_QUERY
:提供提示数据的查询。TOKENS
:一个INT64
值,用于设置回答中可生成的词元数上限。此值必须在范围[1,1024]
内。指定较低的值可获得较短的回答,指定较高的值可获得较长的回答。默认值为128
。TEMPERATURE
:[0.0,1.0]
范围内的一个FLOAT64
值,用于控制词元选择中的随机程度。默认值为0
。较低的
temperature
值适合需要更具确定性和较少开放性或创造性响应的提示,而较高的temperature
值可以产生更具多样性或创造性的结果。temperature
的0
值具有确定性,这意味着系统始终选择最高概率响应。TOP_K
:[1,40]
范围内的一个INT64
值,用于确定模型考虑选择的初始词元池。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为40
。TOP_P
:[0.0,1.0]
范围内的FLOAT64
值有助于确定选择了TOP_K
确定的池中的哪些词元。指定较低的值可获得随机程度较低的响应,指定较高的值可获得随机程度较高的响应。默认值为0.95
。FLATTEN_JSON
:一个BOOL
值,用于确定是否在不同列中返回生成的文本和安全属性。默认值为FALSE
。STOP_SEQUENCES
:一个ARRAY<STRING>
值,如果模型的回答中包含指定的字符串,则用于移除这些字符串。字符串需要完全匹配,包括大小写。默认值为空数组。
示例 1
以下示例显示了具有以下特征的请求:
- 提示提取
articles
表的body
列中的文本。 - 返回中等且更可能的响应。
- 分列返回生成的文本和安全属性。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model`, ( SELECT CONCAT('Summarize this text', body) AS prompt FROM mydataset.articles ), STRUCT( 0.2 AS temperature, 650 AS max_output_tokens, 0.2 AS top_p, 15 AS top_k, TRUE AS flatten_json_output));
示例 2
以下示例显示了具有以下特征的请求:
- 使用查询通过将提供提示前缀与表列的字符串串联起来来创建提示数据。
- 返回简短和中等的可能响应。
- 不在单独的列中返回生成的文本和安全属性。
SELECT * FROM ML.GENERATE_TEXT( MODEL `mydataset.llm_model`, ( SELECT CONCAT(question, 'Text:', description, 'Category') AS prompt FROM mydataset.input_table ), STRUCT( 0.4 AS temperature, 100 AS max_output_tokens, 0.5 AS top_p, 30 AS top_k, FALSE AS flatten_json_output));
生成描述视觉内容的文本
您可以将ML.GENERATE_TEXT
函数与基于 gemini-pro-vision
多模态模型的远程模型结合使用来生成文本:
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_K AS top_k, 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
:包含要分析的视觉内容的对象表的名称。如需详细了解您可以分析的视觉内容的类型,请参阅支持的视觉内容。对象表使用的 Cloud Storage 存储桶必须位于您创建模型并调用
ML.GENERATE_TEXT
函数所在的项目中。PROMPT
:用于分析视觉内容的提示。TOKENS
:一个INT64
值,用于设置回答中可生成的词元数上限。此值必须在范围[1,2048]
内。指定较低的值可获得较短的回答,指定较高的值可获得较长的回答。默认值为2048
。TEMPERATURE
:[0.0,1.0]
范围内的一个FLOAT64
值,用于控制词元选择的随机程度。默认值为0.4
。较低的
temperature
值适合需要更具确定性、更少开放性或创造性回答的提示,而较高的temperature
值可以带来更具多样性或创造性的结果。temperature
的值为0
表示确定性,即始终选择概率最高的回答。TOP_K
:[1,40]
范围内的一个INT64
值,用于确定模型考虑选择的初始词元池。指定较低的值可获得随机程度较低的回答,指定较高的值可获得随机程度较高的回答。默认值为32
。TOP_P
:[0.0,1.0]
范围内的FLOAT64
值有助于确定选择了由TOP_K
决定的池中的哪些词元。指定较低的值可获得随机程度较低的回答,指定较高的值可获得随机程度较高的回答。默认值为0.95
。FLATTEN_JSON
:一个BOOL
值,用于确定是否在单独的列中返回生成的文本和安全属性。默认值为FALSE
。STOP_SEQUENCES
:一个ARRAY<STRING>
值,如果模型的回答中包含指定的字符串,则用于移除这些字符串。字符串需要完全匹配,包括大小写。默认值为空数组。
示例
以下示例会分析名为 videos
的对象表中的视觉内容,并描述每个视频中的内容:
SELECT uri, ml_generate_text_llm_result FROM ML.GENERATE_TEXT( MODEL `mydataset.gemini_pro_vision_model` TABLE `mydataset.videos` STRUCT('What is happening in this video?' AS PROMPT, TRUE AS FLATTEN_JSON_OUTPUT));