Gerar texto usando a função ML.GENERATE_TEXT

Neste documento, mostramos como criar um modelo remoto do BigQuery ML que representa um modelo da Vertex AI e usar esse modelo remoto com a função ML.GENERATE_TEXT para gerar texto.

Os seguintes tipos de modelos remotos são compatíveis:

Dependendo do modelo da Vertex AI escolhido, é possível gerar texto com base em dados não estruturados de tabelas de objetos ou texto de 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. 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

crie um conjunto de dados

Crie um conjunto de dados do BigQuery para conter seus recursos:

Console

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

    Acessar a página do BigQuery

  2. No painel Explorer, clique no nome do seu projeto.

  3. Clique em Conferir ações > Criar conjunto de dados.

  4. Na página Criar conjunto de dados, faça o seguinte:

    • Em ID do conjunto de dados, digite um nome para o conjunto de dados.

    • Em Tipo de local, selecione um local para o conjunto de dados.

    • Clique em Criar conjunto de dados.

bq

  1. Para criar um conjunto de dados, use o comando bq mk com a flag --location:

    bq --location=LOCATION mk -d DATASET_ID

    Substitua:

    • LOCATION: o local do conjunto de dados.
    • DATASET_ID é o ID do conjunto de dados que você está criando.
  2. Confirme se o conjunto de dados foi criado:

    bq ls

Crie uma conexão

Pule esta etapa se você tiver uma conexão padrão configurada ou a função de administrador do BigQuery.

Crie uma Conexão de recursos do Cloud para o modelo remoto usar e tenha acesso à conta de serviço da conexão. Crie a conexão no mesmo local do conjunto de dados criado na etapa anterior.

Selecione uma das seguintes opções:

Console

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No painel Explorer, clique em Adicionar dados:

    O elemento da interface "Adicionar dados".

    A caixa de diálogo Adicionar dados é aberta.

  3. No painel Filtrar por, na seção Tipo de fonte de dados, selecione Aplicativos comerciais.

    Como alternativa, no campo Pesquisar fontes de dados, insira Vertex AI.

  4. Na seção Fontes de dados em destaque, clique em Vertex AI.

  5. Clique no card da solução Modelos da Vertex AI: federação do BigQuery.

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

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

  8. Clique em Criar conexão.

  9. Clique em Ir para conexão.

  10. 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 Google Cloud projeto
    • 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

Use o recurso google_bigquery_connection.

Para autenticar no BigQuery, configure o Application Default Credentials. Para mais informações, acesse Configurar a autenticação para bibliotecas de cliente.

O exemplo a seguir cria uma conexão de recurso do Google Cloud chamada my_cloud_resource_connection na região US:


# 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 {}
}

Para aplicar a configuração do Terraform em um projeto Google Cloud , siga as etapas nas seções a seguir.

Preparar o Cloud Shell

  1. Inicie o Cloud Shell.
  2. Defina o projeto Google Cloud padrão em que você quer aplicar as configurações do Terraform.

    Você só precisa executar esse comando uma vez por projeto, e ele pode ser executado em qualquer diretório.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    As variáveis de ambiente serão substituídas se você definir valores explícitos no arquivo de configuração do Terraform.

Preparar o diretório

Cada arquivo de configuração do Terraform precisa ter o próprio diretório, também chamado de módulo raiz.

  1. No Cloud Shell, crie um diretório e um novo arquivo dentro dele. O nome do arquivo precisa ter a extensão .tf, por exemplo, main.tf. Neste tutorial, o arquivo é chamado de main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Se você estiver seguindo um tutorial, poderá copiar o exemplo de código em cada seção ou etapa.

    Copie o exemplo de código no main.tf recém-criado.

    Se preferir, copie o código do GitHub. Isso é recomendado quando o snippet do Terraform faz parte de uma solução de ponta a ponta.

  3. Revise e modifique os parâmetros de amostra para aplicar ao seu ambiente.
  4. Salve as alterações.
  5. Inicialize o Terraform. Você só precisa fazer isso uma vez por diretório.
    terraform init

    Opcionalmente, para usar a versão mais recente do provedor do Google, inclua a opção -upgrade:

    terraform init -upgrade

Aplique as alterações

  1. Revise a configuração e verifique se os recursos que o Terraform vai criar ou atualizar correspondem às suas expectativas:
    terraform plan

    Faça as correções necessárias na configuração.

  2. Para aplicar a configuração do Terraform, execute o comando a seguir e digite yes no prompt:
    terraform apply

    Aguarde até que o Terraform exiba a mensagem "Apply complete!".

  3. Abra seu Google Cloud projeto para ver os resultados. No console Google Cloud , navegue até seus recursos na UI para verificar se foram criados ou atualizados pelo Terraform.

Conceder acesso às contas de serviço

Você precisa conceder o papel de usuário da Vertex AI à conta de serviço da conexão usada pelo modelo remoto. Se você estiver usando o modelo remoto para gerar texto com base em dados da tabela de objetos, também será necessário conceder o papel de usuário da Vertex AI à conta de serviço da conexão usada pela tabela de objetos.

Conceder um papel à conta de serviço da conexão do modelo remoto

Conceda à conta de serviço da conexão do modelo remoto a função de usuário da Vertex AI.

Se você planeja especificar o endpoint como um URL ao criar o modelo remoto, por exemplo, endpoint = 'https://us-central1-aiplatform.googleapis.com/v1/projects/myproject/locations/us-central1/publishers/google/models/gemini-2.0-flash', conceda essa função no mesmo projeto especificado no URL.

Se você planeja especificar o endpoint usando o nome do modelo ao criar o modelo remoto, por exemplo, endpoint = 'gemini-2.0-flash', conceda esse papel no mesmo projeto em que planeja criar o modelo remoto.

Conceder o papel em um projeto diferente resulta no erro bqcx-1234567890-xxxx@gcp-sa-bigquery-condel.iam.gserviceaccount.com does not have the permission to access resource.

Para conceder o papel, siga estas etapas:

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 Salvar.

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

Conceder um papel à conta de serviço da conexão da tabela de objetos

Se você estiver usando o modelo remoto para gerar texto com base em dados da tabela de objetos, conceda à conta de serviço da conexão da tabela de objetos a função de usuário da Vertex AI.

Para encontrar a conta de serviço da conexão da tabela de objetos, siga estas etapas:

  1. Acessar a página do BigQuery.

    Acessar o BigQuery

  2. No painel Explorer, expanda o conjunto de dados que contém a tabela de objetos.

  3. Selecione a tabela de objetos.

  4. No painel do editor, clique na guia Detalhes.

  5. Anote o nome da conexão no campo ID da conexão.

  6. No painel Explorer, expanda a pasta Conexões externas.

  7. Selecione a conexão que corresponde ao campo ID da conexão da tabela de objetos.

  8. Copie o valor no campo ID da conta de serviço.

Para conceder o papel, siga estas etapas:

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 Salvar.

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

Ativar um modelo de parceiro

Esta etapa só é necessária se você quiser usar os modelos de IA da Anthropic Claude, Llama ou Mistral.

  1. No console do Google Cloud , acesse a página Model Garden da Vertex AI.

    Acessar o Model Garden

  2. Pesquise ou procure o modelo do Claude que você quer usar.

  3. Clique no card de modelo.

  4. Na página do modelo, clique em Ativar.

  5. Preencha as informações de ativação solicitadas e clique em Avançar.

  6. Na seção Termos e condições, marque a caixa de seleção.

  7. Clique em Concordar para aceitar os Termos e Condições e ativar o modelo.

Implantar um modelo aberto

Se você quiser usar um modelo aberto compatível, primeiro implante esse modelo na Vertex AI. Para mais informações sobre como fazer isso, consulte Implantar modelos abertos.

Criar um modelo remoto do BigQuery ML

Crie um modelo remoto:

Modelos abertos

  1. No console 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 {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');

    Substitua:

    • PROJECT_ID: o 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

      Para conseguir esse valor, veja os detalhes da conexão no console do Google Cloud e copie 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_REGION: a região em que o modelo aberto está implantado.
    • ENDPOINT_PROJECT_ID: o projeto em que o modelo aberto está implantado.
    • ENDPOINT_ID: o ID do endpoint HTTPS usado pelo modelo aberto. Para conseguir o ID do endpoint, localize o modelo aberto na página Previsão on-line e copie o valor no campo ID.

Todos os outros modelos

  1. No console 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: o 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

      Para conseguir esse valor, veja os detalhes da conexão no console do Google Cloud e copie 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 endpoint do modelo da Vertex AI a ser usado.

      Para modelos pré-treinados da Vertex AI, modelos do Claude e modelos da Mistral AI, especifique o nome do modelo. Em alguns desses modelos, é possível especificar uma versão específica como parte do nome.

      Para modelos Llama, especifique um endpoint da API OpenAI no formato openapi/<publisher_name>/<model_name>. Por exemplo, openapi/meta/llama-3.1-405b-instruct-maas.

      Para mais informações sobre nomes e versões de modelos compatíveis, consulte ENDPOINT.

      O modelo da Vertex AI especificado precisa estar disponível no local em que você está criando o modelo remoto. Para mais informações, consulte Locais.

Gerar texto usando dados da tabela padrão

Gere texto usando a função ML.GENERATE_TEXT com dados de comando de uma tabela padrão:

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

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.
  • PROMPT_QUERY: uma consulta que fornece os dados do comando. Essa consulta precisa gerar uma coluna chamada prompt.
  • 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_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.
  • GROUND_WITH_GOOGLE_SEARCH: um valor de BOOL que determina se o modelo da Vertex AI usa o [Embasamento com a Pesquisa Google](/vertex-ai/generative-ai/docs/grounding/overview#ground-public) ao gerar respostas. O embasamento permite que o modelo use informações adicionais da Internet ao gerar uma resposta para torná-las mais específicas e factuais. Quando flatten_json_output e esse campo são definidos como True, uma coluna ml_generate_text_grounding_result extra é incluída nos resultados, fornecendo as fontes usadas pelo modelo para coletar mais informações. O padrão é FALSE.
  • SAFETY_SETTINGS: um valor de ARRAY<STRUCT<STRING AS category, STRING AS threshold>> que configura limites de segurança de conteúdo para filtrar respostas. O primeiro elemento no struct especifica uma categoria de dano, e o segundo especifica um limite de bloqueio correspondente. O modelo filtra o conteúdo que viola essas configurações. Só é possível especificar cada categoria uma vez. Por exemplo, não é possível especificar STRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_MEDIUM_AND_ABOVE' AS threshold) e STRUCT('HARM_CATEGORY_DANGEROUS_CONTENT' AS category, 'BLOCK_ONLY_HIGH' AS threshold) ao mesmo tempo. Se não houver uma configuração de segurança para uma determinada categoria, a configuração de segurança BLOCK_MEDIUM_AND_ABOVE será usada. As categorias compatíveis são as seguintes:
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_DANGEROUS_CONTENT
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    Os limites aceitos são os seguintes:
    • BLOCK_NONE (Restrito)
    • BLOCK_LOW_AND_ABOVE
    • BLOCK_MEDIUM_AND_ABOVE (padrão)
    • BLOCK_ONLY_HIGH
    • HARM_BLOCK_THRESHOLD_UNSPECIFIED
    Para mais informações, consulte a definição de categoria de segurança e limite de bloqueio.
  • REQUEST_TYPE: um valor STRING que especifica o tipo de solicitação de inferência a ser enviada ao modelo do Gemini. O tipo de solicitação determina qual cota ela usa. Estes são os valores válidos:
    • DEDICATED: a função ML.GENERATE_TEXT usa apenas a cota de capacidade de processamento provisionada. A função ML.GENERATE_TEXT retorna o erro Provisioned throughput is not purchased or is not active se a cota de capacidade de transferência provisionada não estiver disponível.
    • SHARED: a função ML.GENERATE_TEXT usa apenas a cota dinâmica compartilhada (DSQ), mesmo que você tenha comprado a cota de capacidade de processamento provisionada.
    • UNSPECIFIED: a função ML.GENERATE_TEXT usa a cota da seguinte maneira:
      • Se você não tiver comprado a cota de capacidade de processamento provisionada, a função ML.GENERATE_TEXT usará a cota de DSQ.
      • Se você comprou uma cota de taxa de transferência provisionada, a função ML.GENERATE_TEXT usa essa cota primeiro. Se as solicitações excederem a cota de capacidade de processamento provisionada, o tráfego de estouro usará a cota de DSQ.
    • O valor padrão é UNSPECIFIED.

      Para mais informações, consulte Usar a taxa de transferência provisionada da Vertex AI.

    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.
    • Analisa a resposta JSON do modelo em colunas separadas.
    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));

    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 analisa a resposta JSON do modelo em colunas separadas.
    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));

    Exemplo 3:

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

    • Usa a coluna prompt da tabela prompts para a solicitação.
    • Analisa a resposta JSON do modelo em colunas separadas.
    SELECT *
    FROM
      ML.GENERATE_TEXT(
        MODEL `mydataset.text_model`,
        TABLE mydataset.prompts,
        STRUCT(TRUE AS flatten_json_output));

    Exemplo 4

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

    • Usa a coluna prompt da tabela prompts para a solicitação.
    • Retorna uma resposta curta.
    • Nivela a resposta JSON em colunas separadas.
    • Recupera e retorna dados públicos da Web para embasamento de resposta.
    • Filtra respostas não seguras usando duas configurações de segurança.
    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));

    Exemplo 5

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

    • Usa a coluna prompt da tabela prompts para a solicitação.
    • Retorna uma resposta mais longa.
    • Nivela a resposta JSON em colunas separadas.
    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));

    Exemplo 6

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

    • Solicita um resumo do texto na coluna body da tabela articles.
    • Nivela a resposta JSON em colunas separadas.
    • Recupera e retorna dados públicos da Web para embasamento de resposta.
    • Filtra respostas não seguras usando duas configurações de segurança.
    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)
);

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.
  • PROMPT_QUERY: uma consulta que fornece os dados do comando. Essa consulta precisa gerar uma coluna chamada prompt.
  • 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,4096]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. O padrão é 128.
  • 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. Se você não especificar um valor, o modelo vai determinar um valor apropriado.
  • 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. Se você não especificar um valor, o modelo vai determinar um valor apropriado.
  • 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.

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.
  • Analisa a resposta JSON do modelo em colunas separadas.
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));

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 analisa a resposta JSON do modelo em colunas separadas.
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));

Exemplo 3:

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

  • Usa a coluna prompt da tabela prompts para a solicitação.
  • Analisa a resposta JSON do modelo em colunas separadas.
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)
);

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.
  • PROMPT_QUERY: uma consulta que fornece os dados do comando. Essa consulta precisa gerar uma coluna chamada prompt.
  • 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,4096]. 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_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.
  • Analisa a resposta JSON do modelo em colunas separadas.
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));

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 analisa a resposta JSON do modelo em colunas separadas.
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));

Exemplo 3:

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

  • Usa a coluna prompt da tabela prompts para a solicitação.
  • Analisa a resposta JSON do modelo em colunas separadas.
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)
);

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.
  • PROMPT_QUERY: uma consulta que fornece os dados do comando. Essa consulta precisa gerar uma coluna chamada prompt.
  • 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,4096]. 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_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.
  • Analisa a resposta JSON do modelo em colunas separadas.
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));

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 analisa a resposta JSON do modelo em colunas separadas.
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));

Exemplo 3:

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

  • Usa a coluna prompt da tabela prompts para a solicitação.
  • Analisa a resposta JSON do modelo em colunas separadas.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.text_model`,
    TABLE mydataset.prompts,
    STRUCT(TRUE AS flatten_json_output));

Modelos abertos

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

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.
  • PROMPT_QUERY: uma consulta que fornece os dados do comando. Essa consulta precisa gerar uma coluna chamada prompt.
  • 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,4096]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. Se você não especificar um valor, o modelo vai determinar um valor apropriado.
  • TEMPERATURE: um valor FLOAT64 no intervalo [0.0,1.0] que controla o grau de aleatoriedade na seleção de token. Se você não especificar um valor, o modelo vai determinar um valor apropriado.

    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. Se você não especificar um valor, o modelo vai determinar um valor apropriado.
  • 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. Se você não especificar um valor, o modelo vai determinar um valor apropriado.
  • 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.

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.
  • Analisa a resposta JSON do modelo em colunas separadas.
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));

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 analisa a resposta JSON do modelo em colunas separadas.
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));

Exemplo 3:

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

  • Usa a coluna prompt da tabela prompts para a solicitação.
  • Analisa a resposta JSON do modelo em colunas separadas.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.text_model`,
    TABLE mydataset.prompts,
    STRUCT(TRUE AS flatten_json_output));

Gerar texto usando dados da tabela de objetos

Gere texto usando a função ML.GENERATE_TEXT com um modelo do Gemini para analisar dados não estruturados de uma tabela de objetos. Você fornece os dados do comando no parâmetro 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)
);

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 Precisa ser um modelo do Gemini.
  • 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. Se você quiser chamar a função ML.GENERATE_TEXT em um projeto diferente que contém o bucket do Cloud Storage usado pela tabela de objetos, é preciso conceder o papel de Administrador do Storage no nível do bucket para a conta de serviço service-A@gcp-sa-aiplatform.iam.gserviceaccount.com.

  • 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,4096]. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. Se você não especificar um valor, o modelo vai determinar um valor apropriado.
  • TEMPERATURE: um valor FLOAT64 no intervalo [0.0,1.0] que controla o grau de aleatoriedade na seleção de token. Se você não especificar um valor, o modelo vai determinar um valor apropriado.

    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. Se você não especificar um valor, o modelo vai determinar um valor apropriado.
  • 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. Se você não especificar um valor, o modelo vai determinar um valor apropriado.
  • 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.

Exemplos

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