Gerar texto usando a função ML.GENERATE_TEXT

Neste tutorial, mostramos como criar um modelo remoto do BigQuery ML que faz referência ao modelo de fundação da Vertex AI. Dependendo do modelo da Vertex AI escolhido, é possível usar a função ML.GENERATE_TEXT para analisar dados não estruturados em tabelas de objetos ou texto em tabelas padrão.

Permissões necessárias

  • Para criar uma conexão, você precisa da associação no seguinte papel do Identity and Access Management (IAM):

    • roles/bigquery.connectionAdmin
  • Para conceder permissões à conta de serviço da conexão, você precisa da seguinte permissão:

    • resourcemanager.projects.setIamPolicy
  • Para criar o modelo usando o BigQuery ML, você precisa das seguintes permissões do IAM:

    • bigquery.jobs.create
    • bigquery.models.create
    • bigquery.models.getData
    • bigquery.models.updateData
    • bigquery.models.updateMetadata
  • Para executar a inferência, você precisa das seguintes permissões:

    • bigquery.tables.getData na tabela
    • bigquery.models.getData no modelo
    • bigquery.jobs.create

Antes de começar

  1. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  2. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  3. Ative as APIs BigQuery, BigQuery Connection, and Vertex AI.

    Ative as APIs

Crie uma conexão

Crie uma Conexão de recursos do Cloud e tenha acesso à conta de serviço da conexão.

Selecione uma das seguintes opções:

Console

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. Para criar uma conexão, clique em Adicionar e em Conexões com fontes de dados externas.

  3. Na lista Tipo de conexão, selecione Modelos remotos da Vertex AI, funções remotas e BigLake (Cloud Resource).

  4. No campo ID da conexão, insira um nome para a conexão.

  5. Clique em Criar conexão.

  6. Clique em Ir para conexão.

  7. No painel Informações da conexão, copie o ID da conta de serviço para uso em uma etapa posterior.

bq

  1. Em um ambiente de linha de comando, crie uma conexão:

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

    O parâmetro --project_id substitui o projeto padrão.

    Substitua:

    • REGION: sua região de conexão
    • PROJECT_ID: o ID do projeto do Google Cloud
    • CONNECTION_ID: um ID para sua conexão

    Quando você cria um recurso de conexão, o BigQuery cria uma conta de serviço do sistema exclusiva e a associa à conexão.

    Solução de problemas: se você receber o seguinte erro de conexão, atualize o SDK Google Cloud:

    Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...
    
  2. Recupere e copie o ID da conta de serviço para uso em uma etapa posterior:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID
    

    O resultado será assim:

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

Terraform

Anexe a seguinte seção ao seu arquivo 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 {}
}        
Substitua:

  • CONNECTION_ID: um ID para sua conexão
  • PROJECT_ID: o ID do projeto do Google Cloud
  • REGION: sua região de conexão

Conceder acesso à conta de serviço

Conceda à sua conta de serviço a permissão para usar a conexão. Deixar de conceder a permissão resulta em erro. Selecione uma das seguintes opções:

Console

  1. Acesse a página IAM e administrador.

    Acessar IAM e administrador

  2. Clique em Adicionar.

    A caixa de diálogo Adicionar principais é aberta.

  3. No campo Novos principais, digite o ID da conta de serviço que você copiou anteriormente.

  4. No campo Selecionar um papel, selecione Vertex AI e, em seguida, selecione Usuário da Vertex AI.

  5. Clique em Save.

gcloud

Use o comando gcloud projects add-iam-policy-binding.

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

Substitua:

  • PROJECT_NUMBER: o ID do seu projeto
  • MEMBER: o ID da conta de serviço que você copiou anteriormente

Criar um modelo

  1. No Console do Google Cloud, acesse a página BigQuery.

    Acessar o BigQuery

  2. Usando o editor de SQL, crie um modelo remoto:

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

    Substitua:

    • PROJECT_ID: ID do projeto;
    • DATASET_ID: o ID do conjunto de dados para conter o modelo. Esse conjunto de dados precisa estar no mesmo local que a conexão que você está usando.
    • MODEL_NAME: o nome do modelo
    • REGION: a região usada pela conexão
    • CONNECTION_ID: o ID da conexão do BigQuery

      Quando você visualiza os detalhes da conexão no console do Google Cloud, esse é o valor na última seção do ID da conexão totalmente qualificado, mostrado em ID da conexão, por exemplo, projects/myproject/locations/connection_location/connections/myconnection

    • ENDPOINT: o nome do modelo compatível da Vertex AI que será usado. Por exemplo, ENDPOINT='gemini-pro'.

      Em alguns tipos de modelos, é possível especificar uma versão específica do modelo. Para mais informações sobre as versões de modelo compatíveis para diferentes tipos de modelo, consulte ENDPOINT.

Gerar texto de dados de texto usando um comando de uma tabela

Gere texto usando a função ML.GENERATE_TEXT com um modelo remoto e usando dados de comando de uma coluna da tabela:

gemini-1.5-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_P AS top_p, FLATTEN_JSON AS flatten_json_output,
  STOP_SEQUENCES AS stop_sequences)
);

Substitua:

  • PROJECT_ID: o ID do projeto.
  • DATASET_ID: o ID do conjunto de dados que contém o modelo.
  • MODEL_NAME: o nome do modelo
  • TABLE_NAME: o nome da tabela que contém o comando. Essa tabela precisa ter uma tabela chamada prompt ou é possível utilizar um alias para usar uma coluna com um nome diferente.
  • TOKENS: um valor INT64 que define o número máximo de tokens que podem ser gerados na resposta. Esse valor deve estar no intervalo [1,8192]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. O padrão é 128.
  • TEMPERATURE: um valor FLOAT64 no intervalo [0.0,2.0] que controla o grau de aleatoriedade na seleção de token. O padrão é 0.

    Valores mais baixos para temperature são bons para comandos que exigem uma resposta mais determinista e menos aberta ou criativa, enquanto valores mais altos para temperature podem gerar resultados mais diversos ou criativos. Um valor de 0 para temperature é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.

  • TOP_P: um valor FLOAT64 no intervalo [0.0,1.0] ajuda a determinar a probabilidade dos tokens selecionados. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 0.95.
  • FLATTEN_JSON: um valor BOOL que determina se o texto gerado e os atributos de segurança serão retornados em colunas separadas. O padrão é FALSE.
  • STOP_SEQUENCES: um valor ARRAY<STRING> que remove as strings especificadas se elas estiverem incluídas nas respostas do modelo. As strings têm correspondência exata, incluindo as letras maiúsculas. O padrão é uma matriz vazia.

Exemplo

O exemplo a seguir mostra uma solicitação com estas características:

  • Usa a coluna prompt da tabela prompts para a solicitação.
  • Retorna o texto gerado e os atributos de segurança em colunas separadas.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    TABLE mydataset.prompts,
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, TRUE AS flatten_json_output));

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)
);

Substitua:

  • PROJECT_ID: o ID do projeto.
  • DATASET_ID: o ID do conjunto de dados que contém o modelo.
  • MODEL_NAME: o nome do modelo
  • TABLE_NAME: o nome da tabela que contém o comando. Essa tabela precisa ter uma tabela chamada prompt ou é possível utilizar um alias para usar uma coluna com um nome diferente.
  • TOKENS: um valor INT64 que define o número máximo de tokens que podem ser gerados na resposta. Esse valor deve estar no intervalo [1,8192]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. O padrão é 128.
  • TEMPERATURE: um valor FLOAT64 no intervalo [0.0,1.0] que controla o grau de aleatoriedade na seleção de token. O padrão é 0.

    Valores mais baixos para temperature são bons para comandos que exigem uma resposta mais determinista e menos aberta ou criativa, enquanto valores mais altos para temperature podem gerar resultados mais diversos ou criativos. Um valor de 0 para temperature é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.

  • TOP_K: um valor INT64 no intervalo [1,40] que determina o pool inicial de tokens que o modelo considera para seleção. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 40.
  • TOP_P: um valor FLOAT64 no intervalo [0.0,1.0] ajuda a determinar a probabilidade dos tokens selecionados. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 0.95.
  • FLATTEN_JSON: um valor BOOL que determina se o texto gerado e os atributos de segurança serão retornados em colunas separadas. O padrão é FALSE.
  • STOP_SEQUENCES: um valor ARRAY<STRING> que remove as strings especificadas se elas estiverem incluídas nas respostas do modelo. As strings têm correspondência exata, incluindo as letras maiúsculas. O padrão é uma matriz vazia.

Exemplo

O exemplo a seguir mostra uma solicitação com estas características:

  • Usa a coluna prompt da tabela prompts para a solicitação.
  • Retorna o texto gerado e os atributos de segurança em colunas separadas.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    TABLE mydataset.prompts,
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 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)
);

Substitua:

  • PROJECT_ID: o ID do projeto.
  • DATASET_ID: o ID do conjunto de dados que contém o modelo.
  • MODEL_NAME: o nome do modelo
  • TABLE_NAME: o nome da tabela que contém o comando. Essa tabela precisa ter uma tabela chamada prompt ou é possível utilizar um alias para usar uma coluna com um nome diferente.
  • TOKENS: um valor INT64 que define o número máximo de tokens que podem ser gerados na resposta. Esse valor deve estar no intervalo [1,1024]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. O padrão é 128.
  • TEMPERATURE: um valor FLOAT64 no intervalo [0.0,1.0] que controla o grau de aleatoriedade na seleção de token. O padrão é 0.

    Valores mais baixos para temperature são bons para comandos que exigem uma resposta mais determinista e menos aberta ou criativa, enquanto valores mais altos para temperature podem gerar resultados mais diversos ou criativos. Um valor de 0 para temperature é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.

  • TOP_K: um valor INT64 no intervalo [1,40] que determina o pool inicial de tokens que o modelo considera para seleção. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 40.
  • TOP_P: um valor FLOAT64 no intervalo [0.0,1.0] ajuda a determinar a probabilidade dos tokens selecionados. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 0.95.
  • FLATTEN_JSON: um valor BOOL que determina se o texto gerado e os atributos de segurança serão retornados em colunas separadas. O padrão é FALSE.
  • STOP_SEQUENCES: um valor ARRAY<STRING> que remove as strings especificadas se elas estiverem incluídas nas respostas do modelo. As strings têm correspondência exata, incluindo as letras maiúsculas. O padrão é uma matriz vazia.

Exemplo

O exemplo a seguir mostra uma solicitação com estas características:

  • Usa a coluna prompt da tabela prompts para a solicitação.
  • Retorna o texto gerado e os atributos de segurança em colunas separadas.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    TABLE mydataset.prompts,
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 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)
);

Substitua:

  • PROJECT_ID: o ID do projeto.
  • DATASET_ID: o ID do conjunto de dados que contém o modelo.
  • MODEL_NAME: o nome do modelo
  • TABLE_NAME: o nome da tabela que contém o comando. Essa tabela precisa ter uma tabela chamada prompt ou é possível utilizar um alias para usar uma coluna com um nome diferente.
  • TOKENS: um valor INT64 que define o número máximo de tokens que podem ser gerados na resposta. Esse valor deve estar no intervalo [1,8192]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. O padrão é 128.
  • TEMPERATURE: um valor FLOAT64 no intervalo [0.0,1.0] que controla o grau de aleatoriedade na seleção de token. O padrão é 0.

    Valores mais baixos para temperature são bons para comandos que exigem uma resposta mais determinista e menos aberta ou criativa, enquanto valores mais altos para temperature podem gerar resultados mais diversos ou criativos. Um valor de 0 para temperature é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.

  • TOP_K: um valor INT64 no intervalo [1,40] que determina o pool inicial de tokens que o modelo considera para seleção. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 40.
  • TOP_P: um valor FLOAT64 no intervalo [0.0,1.0] ajuda a determinar a probabilidade dos tokens selecionados. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 0.95.
  • FLATTEN_JSON: um valor BOOL que determina se o texto gerado e os atributos de segurança serão retornados em colunas separadas. O padrão é FALSE.
  • STOP_SEQUENCES: um valor ARRAY<STRING> que remove as strings especificadas se elas estiverem incluídas nas respostas do modelo. As strings têm correspondência exata, incluindo as letras maiúsculas. O padrão é uma matriz vazia.

Exemplo

O exemplo a seguir mostra uma solicitação com estas características:

  • Usa a coluna prompt da tabela prompts para a solicitação.
  • Retorna o texto gerado e os atributos de segurança em colunas separadas.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    TABLE mydataset.prompts,
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, 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)
);

Substitua:

  • PROJECT_ID: o ID do projeto.
  • DATASET_ID: o ID do conjunto de dados que contém o modelo.
  • MODEL_NAME: o nome do modelo
  • TABLE_NAME: o nome da tabela que contém o comando. Essa tabela precisa ter uma tabela chamada prompt ou é possível utilizar um alias para usar uma coluna com um nome diferente.
  • TOKENS: um valor INT64 que define o número máximo de tokens que podem ser gerados na resposta. Esse valor deve estar no intervalo [1,1024]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. O padrão é 128.
  • TEMPERATURE: um valor FLOAT64 no intervalo [0.0,1.0] que controla o grau de aleatoriedade na seleção de token. O padrão é 0.

    Valores mais baixos para temperature são bons para comandos que exigem uma resposta mais determinista e menos aberta ou criativa, enquanto valores mais altos para temperature podem gerar resultados mais diversos ou criativos. Um valor de 0 para temperature é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.

  • TOP_K: um valor INT64 no intervalo [1,40] que determina o pool inicial de tokens que o modelo considera para seleção. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 40.
  • TOP_P: um valor FLOAT64 no intervalo [0.0,1.0] ajuda a determinar a probabilidade dos tokens selecionados. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 0.95.
  • FLATTEN_JSON: um valor BOOL que determina se o texto gerado e os atributos de segurança serão retornados em colunas separadas. O padrão é FALSE.
  • STOP_SEQUENCES: um valor ARRAY<STRING> que remove as strings especificadas se elas estiverem incluídas nas respostas do modelo. As strings têm correspondência exata, incluindo as letras maiúsculas. O padrão é uma matriz vazia.

Exemplo

O exemplo a seguir mostra uma solicitação com estas características:

  • Usa a coluna prompt da tabela prompts para a solicitação.
  • Retorna o texto gerado e os atributos de segurança em colunas separadas.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    TABLE mydataset.prompts,
    STRUCT(
      0.4 AS temperature, 100 AS max_output_tokens, TRUE AS flatten_json_output));

Gerar texto de dados de texto usando um comando de uma consulta

Gere texto usando a função ML.GENERATE_TEXT com um modelo remoto e uma consulta que forneça os dados do comando:

gemini-1.5-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_P AS top_p, FLATTEN_JSON AS flatten_json_output,
  STOP_SEQUENCES AS stop_sequences)
);
Substitua:

  • PROJECT_ID: o ID do projeto.
  • DATASET_ID: o ID do conjunto de dados que contém o modelo.
  • MODEL_NAME: o nome do modelo
  • PROMPT_QUERY: uma consulta que fornece os dados do comando.
  • TOKENS: um valor INT64 que define o número máximo de tokens que podem ser gerados na resposta. Esse valor deve estar no intervalo [1,8192]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. O padrão é 128.
  • TEMPERATURE: um valor FLOAT64 no intervalo [0.0,2.0] que controla o grau de aleatoriedade na seleção de token. O padrão é 0.

    Valores mais baixos para temperature são bons para comandos que exigem uma resposta mais determinista e menos aberta ou criativa, enquanto valores mais altos para temperature podem gerar resultados mais diversos ou criativos. Um valor de 0 para temperature é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.

  • TOP_P: um valor FLOAT64 no intervalo [0.0,1.0] ajuda a determinar a probabilidade dos tokens selecionados. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 0.95.
  • FLATTEN_JSON: um valor BOOL que determina se o texto gerado e os atributos de segurança serão retornados em colunas separadas. O padrão é FALSE.
  • STOP_SEQUENCES: um valor ARRAY<STRING> que remove as strings especificadas se elas estiverem incluídas nas respostas do modelo. As strings têm correspondência exata, incluindo as letras maiúsculas. O padrão é uma matriz vazia.

Exemplo 1

O exemplo a seguir mostra uma solicitação com estas características:

  • Solicita um resumo do texto na coluna body da tabela articles.
  • Retorna o texto gerado e os atributos de segurança em colunas separadas.
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, TRUE AS flatten_json_output));

Exemplo 2

O exemplo a seguir mostra uma solicitação com estas características:

  • Usa uma consulta para criar os dados do prompt, concatenando as strings que fornecem prefixos do prompt com as colunas da tabela.
  • Retorna uma resposta curta.
  • Não retorna o texto gerado e os atributos de segurança em colunas separadas.
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,
      FALSE AS flatten_json_output));

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)
);
Substitua:

  • PROJECT_ID: o ID do projeto.
  • DATASET_ID: o ID do conjunto de dados que contém o modelo.
  • MODEL_NAME: o nome do modelo
  • PROMPT_QUERY: uma consulta que fornece os dados do comando.
  • TOKENS: um valor INT64 que define o número máximo de tokens que podem ser gerados na resposta. Esse valor deve estar no intervalo [1,8192]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. O padrão é 128.
  • TEMPERATURE: um valor FLOAT64 no intervalo [0.0,1.0] que controla o grau de aleatoriedade na seleção de token. O padrão é 0.

    Valores mais baixos para temperature são bons para comandos que exigem uma resposta mais determinista e menos aberta ou criativa, enquanto valores mais altos para temperature podem gerar resultados mais diversos ou criativos. Um valor de 0 para temperature é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.

  • TOP_K: um valor INT64 no intervalo [1,40] que determina o pool inicial de tokens que o modelo considera para seleção. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 40.
  • TOP_P: um valor FLOAT64 no intervalo [0.0,1.0] ajuda a determinar a probabilidade dos tokens selecionados. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 0.95.
  • FLATTEN_JSON: um valor BOOL que determina se o texto gerado e os atributos de segurança serão retornados em colunas separadas. O padrão é FALSE.
  • STOP_SEQUENCES: um valor ARRAY<STRING> que remove as strings especificadas se elas estiverem incluídas nas respostas do modelo. As strings têm correspondência exata, incluindo as letras maiúsculas. O padrão é uma matriz vazia.

Exemplo 1

O exemplo a seguir mostra uma solicitação com estas características:

  • Solicita um resumo do texto na coluna body da tabela articles.
  • Retorna o texto gerado e os atributos de segurança em colunas separadas.
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, TRUE AS flatten_json_output));

Exemplo 2

O exemplo a seguir mostra uma solicitação com estas características:

  • Usa uma consulta para criar os dados do prompt, concatenando as strings que fornecem prefixos do prompt com as colunas da tabela.
  • Retorna uma resposta curta.
  • Não retorna o texto gerado e os atributos de segurança em colunas separadas.
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,
      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)
);
Substitua:

  • PROJECT_ID: o ID do projeto.
  • DATASET_ID: o ID do conjunto de dados que contém o modelo.
  • MODEL_NAME: o nome do modelo
  • PROMPT_QUERY: uma consulta que fornece os dados do comando.
  • TOKENS: um valor INT64 que define o número máximo de tokens que podem ser gerados na resposta. Esse valor deve estar no intervalo [1,1024]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. O padrão é 128.
  • TEMPERATURE: um valor FLOAT64 no intervalo [0.0,1.0] que controla o grau de aleatoriedade na seleção de token. O padrão é 0.

    Valores mais baixos para temperature são bons para comandos que exigem uma resposta mais determinista e menos aberta ou criativa, enquanto valores mais altos para temperature podem gerar resultados mais diversos ou criativos. Um valor de 0 para temperature é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.

  • TOP_K: um valor INT64 no intervalo [1,40] que determina o pool inicial de tokens que o modelo considera para seleção. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 40.
  • TOP_P: um valor FLOAT64 no intervalo [0.0,1.0] ajuda a determinar a probabilidade dos tokens selecionados. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 0.95.
  • FLATTEN_JSON: um valor BOOL que determina se o texto gerado e os atributos de segurança serão retornados em colunas separadas. O padrão é FALSE.
  • STOP_SEQUENCES: um valor ARRAY<STRING> que remove as strings especificadas se elas estiverem incluídas nas respostas do modelo. As strings têm correspondência exata, incluindo as letras maiúsculas. O padrão é uma matriz vazia.

Exemplo 1

O exemplo a seguir mostra uma solicitação com estas características:

  • Solicita um resumo do texto na coluna body da tabela articles.
  • Retorna o texto gerado e os atributos de segurança em colunas separadas.
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, TRUE AS flatten_json_output));

Exemplo 2

O exemplo a seguir mostra uma solicitação com estas características:

  • Usa uma consulta para criar os dados do prompt, concatenando as strings que fornecem prefixos do prompt com as colunas da tabela.
  • Retorna uma resposta curta.
  • Não retorna o texto gerado e os atributos de segurança em colunas separadas.
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,
      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)
);
Substitua:

  • PROJECT_ID: o ID do projeto.
  • DATASET_ID: o ID do conjunto de dados que contém o modelo.
  • MODEL_NAME: o nome do modelo
  • PROMPT_QUERY: uma consulta que fornece os dados do comando.
  • TOKENS: um valor INT64 que define o número máximo de tokens que podem ser gerados na resposta. Esse valor deve estar no intervalo [1,8192]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. O padrão é 128.
  • TEMPERATURE: um valor FLOAT64 no intervalo [0.0,1.0] que controla o grau de aleatoriedade na seleção de token. O padrão é 0.

    Valores mais baixos para temperature são bons para comandos que exigem uma resposta mais determinista e menos aberta ou criativa, enquanto valores mais altos para temperature podem gerar resultados mais diversos ou criativos. Um valor de 0 para temperature é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.

  • TOP_K: um valor INT64 no intervalo [1,40] que determina o pool inicial de tokens que o modelo considera para seleção. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 40.
  • TOP_P: um valor FLOAT64 no intervalo [0.0,1.0] ajuda a determinar a probabilidade dos tokens selecionados. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 0.95.
  • FLATTEN_JSON: um valor BOOL que determina se o texto gerado e os atributos de segurança serão retornados em colunas separadas. O padrão é FALSE.
  • STOP_SEQUENCES: um valor ARRAY<STRING> que remove as strings especificadas se elas estiverem incluídas nas respostas do modelo. As strings têm correspondência exata, incluindo as letras maiúsculas. O padrão é uma matriz vazia.

Exemplo 1

O exemplo a seguir mostra uma solicitação com estas características:

  • Solicita um resumo do texto na coluna body da tabela articles.
  • Retorna o texto gerado e os atributos de segurança em colunas separadas.
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, TRUE AS flatten_json_output));

Exemplo 2

O exemplo a seguir mostra uma solicitação com estas características:

  • Usa uma consulta para criar os dados do prompt, concatenando as strings que fornecem prefixos do prompt com as colunas da tabela.
  • Retorna uma resposta curta.
  • Não retorna o texto gerado e os atributos de segurança em colunas separadas.
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,
      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)
);
Substitua:

  • PROJECT_ID: o ID do projeto.
  • DATASET_ID: o ID do conjunto de dados que contém o modelo.
  • MODEL_NAME: o nome do modelo
  • PROMPT_QUERY: uma consulta que fornece os dados do comando.
  • TOKENS: um valor INT64 que define o número máximo de tokens que podem ser gerados na resposta. Esse valor deve estar no intervalo [1,1024]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. O padrão é 128.
  • TEMPERATURE: um valor FLOAT64 no intervalo [0.0,1.0] que controla o grau de aleatoriedade na seleção de token. O padrão é 0.

    Valores mais baixos para temperature são bons para comandos que exigem uma resposta mais determinista e menos aberta ou criativa, enquanto valores mais altos para temperature podem gerar resultados mais diversos ou criativos. Um valor de 0 para temperature é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.

  • TOP_K: um valor INT64 no intervalo [1,40] que determina o pool inicial de tokens que o modelo considera para seleção. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 40.
  • TOP_P: um valor FLOAT64 no intervalo [0.0,1.0] ajuda a determinar a probabilidade dos tokens selecionados. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 0.95.
  • FLATTEN_JSON: um valor BOOL que determina se o texto gerado e os atributos de segurança serão retornados em colunas separadas. O padrão é FALSE.
  • STOP_SEQUENCES: um valor ARRAY<STRING> que remove as strings especificadas se elas estiverem incluídas nas respostas do modelo. As strings têm correspondência exata, incluindo as letras maiúsculas. O padrão é uma matriz vazia.

Exemplo 1

O exemplo a seguir mostra uma solicitação com estas características:

  • Solicita um resumo do texto na coluna body da tabela articles.
  • Retorna o texto gerado e os atributos de segurança em colunas separadas.
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, TRUE AS flatten_json_output));

Exemplo 2

O exemplo a seguir mostra uma solicitação com estas características:

  • Usa uma consulta para criar os dados do prompt, concatenando as strings que fornecem prefixos do prompt com as colunas da tabela.
  • Retorna uma resposta curta.
  • Não retorna o texto gerado e os atributos de segurança em colunas separadas.
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,
      FALSE AS flatten_json_output));

Gerar texto usando dados da tabela de objetos

Gere texto com a função ML.GENERATE_TEXT com um modelo remoto, usando uma tabela de objetos para fornecer o conteúdo a ser analisado e informando os dados do comando no parâmetro prompt:

gemini-1.5-pro

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)
);

Substitua:

  • PROJECT_ID: o ID do projeto.
  • DATASET_ID: o ID do conjunto de dados que contém o modelo.
  • MODEL_NAME: o nome do modelo
  • TABLE_NAME: o nome da tabela de objetos que contém o conteúdo a ser analisado. Para saber mais sobre os tipos de conteúdo que podem ser analisados, consulte Entrada.

    O bucket do Cloud Storage usado pela tabela de objetos precisa estar no mesmo projeto em que você criou o modelo e em que está chamando a função ML.GENERATE_TEXT.

  • PROMPT: o comando a ser usado para analisar o conteúdo.
  • TOKENS: um valor INT64 que define o número máximo de tokens que podem ser gerados na resposta. Esse valor deve estar no intervalo [1,8192]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. O padrão é 128.
  • TEMPERATURE: um valor FLOAT64 no intervalo [0.0,2.0] que controla o grau de aleatoriedade na seleção de token. O padrão é 0.

    Valores mais baixos para temperature são bons para comandos que exigem uma resposta mais determinista e menos aberta ou criativa, enquanto valores mais altos para temperature podem gerar resultados mais diversos ou criativos. Um valor de 0 para temperature é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.

  • TOP_P: um valor FLOAT64 no intervalo [0.0,1.0] ajuda a determinar a probabilidade dos tokens selecionados. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 0.95.
  • FLATTEN_JSON: um valor BOOL que determina se o texto gerado e os atributos de segurança serão retornados em colunas separadas. O padrão é FALSE.
  • STOP_SEQUENCES: um valor ARRAY<STRING> que remove as strings especificadas se elas estiverem incluídas nas respostas do modelo. As strings têm correspondência exata, incluindo as letras maiúsculas. O padrão é uma matriz vazia.

Exemplos

Este exemplo analisa o conteúdo em vídeo de uma tabela de objetos chamada videos e descreve o conteúdo em cada vídeo:

SELECT * FROM
  ML.GENERATE_TEXT(
    MODEL
      `mydataset.video_model`,
        TABLE `mydataset.videos`,
          STRUCT('What is happening in this video?' AS PROMPT,
          TRUE AS FLATTEN_JSON_OUTPUT));

Este exemplo traduz e transcreve o conteúdo de áudio de uma tabela de objetos chamada 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));

Neste exemplo, classificamos o conteúdo PDF de uma tabela de objetos chamada invoices:

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));

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)
);

Substitua:

  • PROJECT_ID: o ID do projeto.
  • DATASET_ID: o ID do conjunto de dados que contém o modelo.
  • MODEL_NAME: o nome do modelo
  • TABLE_NAME: o nome da tabela de objetos que contém o conteúdo a ser analisado. Para saber mais sobre os tipos de conteúdo que podem ser analisados, consulte Entrada.

    O bucket do Cloud Storage usado pela tabela de objetos precisa estar no mesmo projeto em que você criou o modelo e em que está chamando a função ML.GENERATE_TEXT.

  • PROMPT: o comando a ser usado para analisar o conteúdo.
  • TOKENS: um valor INT64 que define o número máximo de tokens que podem ser gerados na resposta. Esse valor deve estar no intervalo [1,2048]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. O padrão é 2048.
  • TEMPERATURE: um valor FLOAT64 no intervalo [0.0,1.0] que controla o grau de aleatoriedade na seleção de token. O padrão é 0.4.

    Valores mais baixos para temperature são bons para comandos que exigem uma resposta mais determinista e menos aberta ou criativa, enquanto valores mais altos para temperature podem gerar resultados mais diversos ou criativos. Um valor de 0 para temperature é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada.

  • TOP_K: um valor INT64 no intervalo [1,40] que determina o pool inicial de tokens que o modelo considera para seleção. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 32.
  • TOP_P: um valor FLOAT64 no intervalo [0.0,1.0] ajuda a determinar a probabilidade dos tokens selecionados. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 0.95.
  • FLATTEN_JSON: um valor BOOL que determina se o texto gerado e os atributos de segurança serão retornados em colunas separadas. O padrão é FALSE.
  • STOP_SEQUENCES: um valor ARRAY<STRING> que remove as strings especificadas se elas estiverem incluídas nas respostas do modelo. As strings têm correspondência exata, incluindo as letras maiúsculas. O padrão é uma matriz vazia.

Exemplos

Este exemplo analisa o conteúdo em vídeo de uma tabela de objetos chamada videos e descreve o conteúdo em cada vídeo:

SELECT * FROM
  ML.GENERATE_TEXT(
    MODEL
      `mydataset.video_model`,
        TABLE `mydataset.videos`,
          STRUCT('What is happening in this video?' AS PROMPT,
          TRUE AS FLATTEN_JSON_OUTPUT));