Função ML.GENERATE_TEXT

Neste documento, descrevemos a função ML.GENERATE_TEXT, que permite executar tarefas generativas de linguagem natural em textos armazenados nas tabelas do BigQuery. Ela inclui as seguintes tarefas de linguagem de exemplo:

  • Classificação
  • Análise de sentimento
  • Extração de entidade
  • Respostas a perguntas extrativas
  • Resumo
  • Reescrita de texto em um estilo diferente
  • Geração de texto do anúncio
  • Ideia de conceito

A função envia solicitações para um modelo remoto do BigQuery ML que representa um dos modelos de fundação de linguagem natural text-bison* (LLMs) da Vertex AI e, em seguida, retorna a resposta do LLM. Vários dos argumentos da função fornecem os parâmetros que moldam a resposta do LLM.

O parâmetro prompt fornece o texto para o modelo analisar. O desenvolvimento de comandos pode afetar muito as respostas retornadas pelo LLM. Para mais informações, consulte Projetar prompts de texto.

Sintaxe

ML.GENERATE_TEXT(
MODEL `project_id.dataset.model`,
{ TABLE `project_id.dataset.table` | (query_statement) },
STRUCT(
  [number_of_output_tokens AS max_output_tokens]
  [, top_k_value AS top_k]
  [, top_p_value AS top_p]
  [, temperature AS temperature]
  [, flatten_json_output AS flatten_json_output])
)

Argumentos

ML.GENERATE_TEXT usa os seguintes argumentos:

  • project_id: o ID do projeto.

  • dataset: o conjunto de dados do BigQuery que contém o modelo.

  • model: o nome de um modelo remoto que usa um dos LLMs text-bison* da Vertex AI. Para mais informações sobre como criar esse tipo de modelo remoto, consulte ENDPOINT.

  • table: o nome da tabela do BigQuery que contém os dados do prompt. O texto na coluna chamada prompt é enviado ao modelo. Se a tabela não tiver uma coluna prompt, use uma instrução SELECT desse argumento para fornecer um alias a uma coluna de tabela já existente. Se nenhuma coluna prompt estiver disponível, ocorrerá um erro.

  • query_statement: a consulta GoogleSQL usada para gerar os dados do comando.

  • max_output_tokens é um valor INT64 no intervalo [1,1024] que define o número máximo de tokens de saída do modelo. Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas mais longas. O padrão é 50.

    Um token pode ser menor do que uma palavra e ter aproximadamente quatro caracteres. 100 tokens correspondem a cerca de 60 a 80 palavras.

  • temperature: é um valor FLOAT64 no intervalo [0.0,1.0] usado para amostragem durante a geração da resposta, que ocorre quando top_k e top_p são aplicados. Ele controla o grau de aleatoriedade na seleção do token. Valores temperature mais baixos são bons para comandos que exigem uma resposta mais determinista e menos aberta ou criativa, enquanto valores temperature maiores podem levar a resultados mais diversos ou criativos. Um valor temperature de 0 é determinista, o que significa que a resposta de maior probabilidade é sempre selecionada. O padrão é 1.0.

  • top_k é um valor INT64 no intervalo [1,40] que altera o modo como o modelo seleciona tokens de saída. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 40.

    Um valor top_k de 1 significa que o próximo token selecionado é o mais provável entre todos os tokens no vocabulário do modelo, enquanto um valor top_k de 3 significa que o próximo token é selecionado entre os três tokens mais prováveis usando o valor temperature.

    Em cada etapa de seleção de token, são escolhidos os tokens top_k com as maiores probabilidades. Em seguida, os tokens são filtrados com base no valor top_p, com o token final selecionado usando a amostragem de temperatura.

  • top_p: é um valor FLOAT64 no intervalo [0.0,1.0] que altera o modo como o modelo seleciona tokens de saída. Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias. O padrão é 1.0.

    Os tokens são selecionados do valor mais provável (com base no valor top_k) ao menos provável até que a soma das probabilidades seja igual ao valor top_p. Por exemplo, se os tokens A, B e C tiverem uma probabilidade de 0.3, 0.2 e 0.1 e o valor top_p for 0.5, o modelo selecionará A ou B como o próximo token usando o valor temperature, desconsiderando C.

  • flatten_json_output: é um valor BOOL que determina se o conteúdo JSON retornado pela função será analisado em colunas separadas. O padrão é FALSE.

Saída

ML.GENERATE_TEXT retorna a tabela de entrada mais as seguintes colunas:

  • ml_generate_text_result: a resposta JSON da chamada projects.locations.endpoints.predict para o modelo. O texto gerado está no elemento content. Os atributos de segurança estão no elemento safetyAttributes. Essa coluna é retornada quando flatten_json_output é FALSE.
  • ml_generate_text_llm_result: um valor STRING que contém o texto gerado retornado pela chamada projects.locations.endpoints.predict para o modelo. Essa coluna é retornada quando flatten_json_output é TRUE.
  • ml_generate_text_rai_result: um valor de STRING que contém os atributos de segurança retornados pela chamada projects.locations.endpoints.predict para o modelo. Essa coluna é retornada quando flatten_json_output é TRUE.
  • ml_generate_text_status: um valor STRING que contém o status da resposta da API para a linha correspondente. Esse valor estará vazio se a operação tiver sido bem-sucedida.

Locais

ML.GENERATE_TEXT precisa ser executada na mesma região que o modelo remoto referenciado pela função. Só é possível criar modelos remotos com base em modelos text-bison* nos seguintes locais:

  • asia-northeast3
  • asia-southeast1
  • eu
  • europe-west1
  • europe-west2
  • europe-west3
  • europe-west4
  • europe-west9
  • us
  • us-central1
  • us-west4

Cotas

Consulte Cotas e limites de funções com valores de tabela de serviços do Cloud AI.

Examples

Exemplo 1

Este exemplo mostra uma solicitação com as seguintes características:

  • Fornece um único comando.
  • Retorna uma resposta de texto gerada mais longa.
  • Retorna uma resposta de texto gerada menos provável.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    (SELECT 'What is the purpose of dreams?' AS prompt),
    STRUCT(
      0.8 AS temperature,
      1024 AS max_output_tokens,
      0.95 AS top_p,
      40 AS top_k));

Exemplo 2

Este exemplo mostra uma solicitação com as seguintes características:

  • Fornece dados do comando vindos da coluna chamada prompt de uma tabela.
  • Retorna uma resposta de texto gerada mais curta.
  • Retorna uma resposta de texto gerada mais provável.
  • Nivela a resposta JSON em colunas separadas.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL
      `mydataset.llm_model`
        TABLE `mydataset.prompt_table`,
    STRUCT(
      0.2 AS temperature, 75 AS max_output_tokens, 0.3 AS top_p, 15 AS top_k, TRUE AS flatten_json_output));

Exemplo 3

Este exemplo mostra uma solicitação com as seguintes características:

  • Fornece dados do comando vindos da coluna chamada question de uma tabela, com o alias prompt.
  • Retorna uma resposta de texto gerada moderadamente longa.
  • Retorna uma resposta de texto gerada moderadamente provável.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    (SELECT question AS prompt FROM `mydataset.prompt_table`),
    STRUCT(
      0.4 AS temperature, 750 AS max_output_tokens, 0.5 AS top_p, 30 AS top_k));

Exemplo 4

Este exemplo mostra uma solicitação com as seguintes características:

  • Concatena strings e a coluna de uma tabela para fornecer os dados do comando.
  • Retorna uma resposta de texto gerada mais longa.
  • Retorna uma resposta de texto gerada mais provável.
SELECT *
FROM
  ML.GENERATE_TEXT(
    MODEL `mydataset.llm_model`,
    (
      SELECT
        CONCAT(
          'Classify the sentiment of the following text as positive or negative.Text:',
          input_column,
          'Sentiment:') AS prompt
      FROM `mydataset.input_table`
    ),
    STRUCT(
      0.1 AS temperature,
      1000 AS max_output_tokens,
      0.1 AS top_p,
      10 AS top_k));

A seguir