Entendimento de documentos

É possível adicionar documentos (arquivos PDF e TXT) às solicitações do Gemini para realizar tarefas que envolvem a compreensão do conteúdo dos documentos incluídos. Esta página mostra como adicionar PDFs às suas solicitações ao Gemini na Vertex AI usando o console do Google Cloud e a API Vertex AI.

Modelos compatíveis

A tabela a seguir lista os modelos compatíveis com a compreensão de documentos:

Modelo Detalhes da modalidade em PDF

Gemini 1.5 Flash

Acessar o card de modelo em Flash do Gemini 1.5

Máximo de páginas por PDF: 1.000

Tamanho máximo do arquivo PDF: 50 MB

Gemini 1.5 Pro

Acessar o card de modelo do Gemini 1.5 Pro

Máximo de páginas por PDF: 1.000

Tamanho máximo do arquivo PDF: 50 MB

Gemini 1.0 Pro Vision

Acessar o card de modelo Gemini 1.0 Pro Vision

Máximo de páginas por comando: 16

Tamanho máximo do arquivo PDF: 50 MB

Para uma lista de linguagens compatíveis com os modelos do Gemini, consulte as informações do modelo Modelos do Google. Para saber mais sobre como criar comandos multimodais, consulte Criar comandos multimodais. Se você está procurando uma maneira de usar o Gemini diretamente no seu dispositivo móvel e e apps da Web, consulte os SDKs da Vertex AI para Firebase para apps para Android, Swift, da Web e Flutter.

Adicionar documentos a uma solicitação

O exemplo de código abaixo mostra como incluir um PDF em uma solicitação de comando. Esta amostra em PDF funciona com todos os modelos multimodais do Gemini.

Python

Para saber como instalar o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Saiba mais na documentação de referência da API SDK da Vertex AI para Python.

Respostas com e sem streaming

Escolha se o modelo vai gerar respostas de streaming ou sem streaming. Para respostas de streaming, você recebe cada resposta assim que o token de saída for gerado. Para respostas que não são de streaming, você recebe todas as respostas depois que todos os tokens de saída forem gerados.

Para uma resposta de streaming, use o parâmetro stream em generate_content.

  response = model.generate_content(contents=[...], stream = True)
  

Para uma resposta que não seja de streaming, remova o parâmetro ou defina-o como False.

Código de amostra

import vertexai

from vertexai.generative_models import GenerativeModel, Part

# TODO(developer): Update project_id and location
vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-002")

prompt = """
You are a very professional document summarization specialist.
Please summarize the given document.
"""

pdf_file = Part.from_uri(
    uri="gs://cloud-samples-data/generative-ai/pdf/2403.05530.pdf",
    mime_type="application/pdf",
)
contents = [pdf_file, prompt]

response = model.generate_content(contents)
print(response.text)
# Example response:
# Here's a summary of the provided text, which appears to be a research paper on the Gemini 1.5 Pro
# multimodal large language model:
# **Gemini 1.5 Pro: Key Advancements and Capabilities**
# The paper introduces Gemini 1.5 Pro, a highly compute-efficient multimodal model
# significantly advancing long-context capabilities
# ...

Java

Antes de testar esta amostra, siga as instruções de configuração do Java no guia de início rápido da Vertex AI. Para mais informações, consulte a documentação de referência do SDK da Vertex AI para Java para Gemini.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

Respostas com e sem streaming

Escolha se o modelo vai gerar respostas de streaming ou sem streaming. Para respostas de streaming, você recebe cada resposta assim que o token de saída for gerado. Para respostas que não são de streaming, você recebe todas as respostas depois que todos os tokens de saída forem gerados.

Para uma resposta de streaming, use o método generateContentStream.

  public ResponseStream<GenerateContentResponse> generateContentStream(Content content)
  

Para uma resposta que não seja de streaming, use o método generateContent.

  public GenerateContentResponse generateContent(Content content)
  

Código de amostra


import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.api.GenerateContentResponse;
import com.google.cloud.vertexai.generativeai.ContentMaker;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import com.google.cloud.vertexai.generativeai.PartMaker;
import com.google.cloud.vertexai.generativeai.ResponseHandler;
import java.io.IOException;

public class PdfInput {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.5-flash-001";

    pdfInput(projectId, location, modelName);
  }

  // Analyzes the given video input.
  public static String pdfInput(String projectId, String location, String modelName)
      throws IOException {
    // Initialize client that will be used to send requests. This client only needs
    // to be created once, and can be reused for multiple requests.
    try (VertexAI vertexAI = new VertexAI(projectId, location)) {
      String pdfUri = "gs://cloud-samples-data/generative-ai/pdf/2403.05530.pdf";

      GenerativeModel model = new GenerativeModel(modelName, vertexAI);
      GenerateContentResponse response = model.generateContent(
          ContentMaker.fromMultiModalData(
              "You are a very professional document summarization specialist.\n"
                  + "Please summarize the given document.",
              PartMaker.fromMimeTypeAndData("application/pdf", pdfUri)
          ));

      String output = ResponseHandler.getText(response);
      System.out.println(output);
      return output;
    }
  }
}

Node.js

Antes de testar esta amostra, siga as instruções de configuração do Node.js no Guia de início rápido da IA generativa usando o SDK do Node.js. Para mais informações, consulte a documentação de referência do SDK do Node.js para Gemini.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

Respostas com e sem streaming

Escolha se o modelo vai gerar respostas de streaming ou sem streaming. Para respostas de streaming, você recebe cada resposta assim que o token de saída for gerado. Para respostas que não são de streaming, você recebe todas as respostas depois que todos os tokens de saída forem gerados.

Para uma resposta de streaming, use o método generateContentStream.

  const streamingResp = await generativeModel.generateContentStream(request);
  

Para uma resposta que não seja de streaming, use o método generateContent.

  const streamingResp = await generativeModel.generateContent(request);
  

Código de amostra

const {VertexAI} = require('@google-cloud/vertexai');

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function analyze_pdf(projectId = 'PROJECT_ID') {
  const vertexAI = new VertexAI({project: projectId, location: 'us-central1'});

  const generativeModel = vertexAI.getGenerativeModel({
    model: 'gemini-1.5-flash-001',
  });

  const filePart = {
    fileData: {
      fileUri: 'gs://cloud-samples-data/generative-ai/pdf/2403.05530.pdf',
      mimeType: 'application/pdf',
    },
  };
  const textPart = {
    text: `
    You are a very professional document summarization specialist.
    Please summarize the given document.`,
  };

  const request = {
    contents: [{role: 'user', parts: [filePart, textPart]}],
  };

  const resp = await generativeModel.generateContent(request);
  const contentResponse = await resp.response;
  console.log(JSON.stringify(contentResponse));
}

Go

Antes de testar esta amostra, siga as instruções de configuração do Go no Guia de início rápido da Vertex AI. Para mais informações, consulte a documentação de referência do SDK da Vertex AI para Go para Gemini.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

Respostas com e sem streaming

Escolha se o modelo vai gerar respostas de streaming ou sem streaming. Para respostas de streaming, você recebe cada resposta assim que o token de saída for gerado. Para respostas que não são de streaming, você recebe todas as respostas depois que todos os tokens de saída forem gerados.

Para uma resposta de streaming, use o método GenerateContentStream.

  iter := model.GenerateContentStream(ctx, genai.Text("Tell me a story about a lumberjack and his giant ox. Keep it very short."))
  

Para uma resposta que não seja de streaming, use o método GenerateContent.

  resp, err := model.GenerateContent(ctx, genai.Text("What is the average size of a swallow?"))
  

Código de amostra

import (
	"context"
	"errors"
	"fmt"
	"io"

	"cloud.google.com/go/vertexai/genai"
)

// generateContentFromPDF generates a response into the provided io.Writer, based upon the PDF
func generateContentFromPDF(w io.Writer, projectID, location, modelName string) error {
	// location := "us-central1"
	// modelName := "gemini-1.5-flash-001"

	ctx := context.Background()

	client, err := genai.NewClient(ctx, projectID, location)
	if err != nil {
		return fmt.Errorf("unable to create client: %w", err)
	}
	defer client.Close()

	model := client.GenerativeModel(modelName)

	part := genai.FileData{
		MIMEType: "application/pdf",
		FileURI:  "gs://cloud-samples-data/generative-ai/pdf/2403.05530.pdf",
	}

	res, err := model.GenerateContent(ctx, part, genai.Text(`
			You are a very professional document summarization specialist.
    		Please summarize the given document.
	`))
	if err != nil {
		return fmt.Errorf("unable to generate contents: %w", err)
	}

	if len(res.Candidates) == 0 ||
		len(res.Candidates[0].Content.Parts) == 0 {
		return errors.New("empty response from model")
	}

	fmt.Fprintf(w, "generated response: %s\n", res.Candidates[0].Content.Parts[0])
	return nil
}

C#

Antes de testar este exemplo, siga as instruções de configuração do C# na Vertex AI guia de início rápido. Para mais informações, consulte a documentação de referência da Vertex AI C# .

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

Respostas com e sem streaming

Escolha se o modelo vai gerar respostas de streaming ou sem streaming. Para respostas de streaming, você recebe cada resposta assim que o token de saída for gerado. Para respostas que não são de streaming, você recebe todas as respostas depois que todos os tokens de saída forem gerados.

Para uma resposta de streaming, use o método StreamGenerateContent.

  public virtual PredictionServiceClient.StreamGenerateContentStream StreamGenerateContent(GenerateContentRequest request)
  

Para uma resposta que não seja de streaming, use o método GenerateContentAsync.

  public virtual Task<GenerateContentResponse> GenerateContentAsync(GenerateContentRequest request)
  

Para mais informações sobre como o servidor pode transmitir respostas, consulte RPCs de streaming.

Código de amostra


using Google.Cloud.AIPlatform.V1;
using System;
using System.Threading.Tasks;

public class PdfInput
{
    public async Task<string> SummarizePdf(
        string projectId = "your-project-id",
        string location = "us-central1",
        string publisher = "google",
        string model = "gemini-1.5-flash-001")
    {

        var predictionServiceClient = new PredictionServiceClientBuilder
        {
            Endpoint = $"{location}-aiplatform.googleapis.com"
        }.Build();

        string prompt = @"You are a very professional document summarization specialist.
Please summarize the given document.";

        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}",
            Contents =
            {
                new Content
                {
                    Role = "USER",
                    Parts =
                    {
                        new Part { Text = prompt },
                        new Part { FileData = new() { MimeType = "application/pdf", FileUri = "gs://cloud-samples-data/generative-ai/pdf/2403.05530.pdf" }}
                    }
                }
            }
        };

        GenerateContentResponse response = await predictionServiceClient.GenerateContentAsync(generateContentRequest);

        string responseText = response.Candidates[0].Content.Parts[0].Text;
        Console.WriteLine(responseText);

        return responseText;
    }
}

REST

Depois de configurou seu ambiente use REST para testar uma solicitação de texto. O exemplo a seguir envia uma solicitação ao publisher endpoint do modelo.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION: a região para processar a solicitação. Insira uma região compatível. Para a lista completa de regiões compatíveis, consulte Locais disponíveis.

    Clicar para abrir uma lista parcial das regiões disponíveis

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: o ID do projeto.
  • FILE_URI: o URI ou URL do arquivo a ser incluído no comando. Os valores aceitáveis são os seguintes:
    • URI do bucket do Cloud Storage: o objeto precisa ser publicamente legível ou residir no mesmo projeto do Google Cloud que está enviando a solicitação. Para gemini-1.5-pro e gemini-1.5-flash, o limite de tamanho é de 2 GB. Para gemini-1.0-pro-vision, o limite de tamanho é de 20 MB.
    • URL HTTP: o URL do arquivo precisa ser legível publicamente. É possível especificar um arquivo de vídeo, um arquivo de áudio e até 10 arquivos de imagem por solicitação. Os arquivos de áudio, vídeo e documentos não podem exceder 15 MB.
    • URL do vídeo do YouTube: o vídeo do YouTube precisa ser de propriedade da conta que você usou para fazer login no console do Google Cloud ou ser público. Somente um URL de vídeo do YouTube é aceito por solicitação.

    Ao especificar um fileURI, você também precisa especificar o tipo de mídia (mimeType) do arquivo.

    Se você não tiver um arquivo PDF no Cloud Storage, use o seguinte arquivo disponível publicamente: gs://cloud-samples-data/generative-ai/pdf/2403.05530.pdf com um tipo MIME de application/pdf. Para acessar este PDF, abra o arquivo PDF de exemplo.

  • MIME_TYPE: O tipo de mídia do arquivo especificado em data ou fileUri . Os valores aceitáveis são os seguintes:

    Clique para expandir os tipos MIME.

    • application/pdf
    • audio/mpeg
    • audio/mp3
    • audio/wav
    • image/png
    • image/jpeg
    • image/webp
    • text/plain
    • video/mov
    • video/mpeg
    • video/mp4
    • video/mpg
    • video/avi
    • video/wmv
    • video/mpegps
    • video/flv
  • TEXT: as instruções de texto a serem incluídas no comando. Por exemplo, You are a very professional document summarization specialist. Please summarize the given document.

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo chamado request.json. Execute o comando a seguir no terminal para criar ou substituir esse arquivo no diretório atual:

cat > request.json << 'EOF'
{
  "contents": {
    "role": "USER",
    "parts": [
      {
        "fileData": {
          "fileUri": "FILE_URI",
          "mimeType": "MIME_TYPE"
        }
      },
      {
        "text": "TEXT"
      }
    ]
  }
}
EOF

Depois execute o comando a seguir para enviar a solicitação REST:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/gemini-1.5-flash:generateContent"

PowerShell

Salve o corpo da solicitação em um arquivo chamado request.json. Execute o comando a seguir no terminal para criar ou substituir esse arquivo no diretório atual:

@'
{
  "contents": {
    "role": "USER",
    "parts": [
      {
        "fileData": {
          "fileUri": "FILE_URI",
          "mimeType": "MIME_TYPE"
        }
      },
      {
        "text": "TEXT"
      }
    ]
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

Depois execute o comando a seguir para enviar a solicitação REST:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/gemini-1.5-flash:generateContent" | Select-Object -Expand Content

Você receberá uma resposta JSON semelhante a seguinte.

Observe o seguinte no URL deste exemplo:
  • Use o generateContent para solicitar que a resposta seja retornada depois de ser totalmente gerada. Para reduzir a percepção de latência ao público humano, transmita a resposta à medida que geradas usando o streamGenerateContent .
  • O ID do modelo multimodal está localizado no final do URL, antes do método Por exemplo, gemini-1.5-flash ou gemini-1.0-pro-vision). Este exemplo pode oferecer suporte a outras modelos de classificação.

Console

Para enviar um prompt multimodal usando o console do Google Cloud, faça o seguinte:

  1. Na seção Vertex AI do console do Google Cloud, acesse a página do Vertex AI Studio.

    Acesse o Vertex AI Studio

  2. Clique em Abrir formato livre.

  3. Opcional: configure o modelo e os parâmetros:

    • Modelo: selecione um modelo.
    • Região: selecione a região que você quer usar.
    • Temperatura: use o controle deslizante ou a caixa de texto para inserir um valor para a temperatura.

      A temperatura é usada para amostragem durante a geração da resposta, que ocorre quando topP e topK são aplicados. A temperatura controla o grau de aleatoriedade na seleção do token. Temperaturas mais baixas são boas para solicitações que exigem uma resposta menos aberta ou criativa, enquanto temperaturas mais altas podem levar a resultados mais diversos ou criativos. Uma temperatura de 0 significa que os tokens de maior probabilidade são sempre selecionados. Nesse caso, as respostas para uma determinada solicitação são, na maioria das vezes, deterministas, mas uma pequena variação ainda é possível.

      Se o modelo retornar uma resposta muito genérica, muito curta ou se o modelo fornecer uma resposta alternativa, tente aumentar a temperatura.

    • Limite de token de saída: use o controle deslizante ou a caixa de texto para inserir um valor para o limite de saída máximo.

      Número máximo de tokens que podem ser gerados na resposta. Um token tem cerca de quatro caracteres. 100 tokens correspondem a cerca de 60 a 80 palavras.

      Especifique um valor mais baixo para respostas mais curtas e um valor mais alto para respostas potencialmente mais longas.

    • Adicionar sequência de paradas: opcional. Insira uma sequência de paradas, que é uma série de caracteres que inclui espaços. Se o modelo encontrar uma sequência de paradas, a geração de resposta será interrompida. A sequência de paradas não é incluída na resposta, e você pode adicionar até cinco sequências de paradas.

  4. Opcional: para configurar parâmetros avançados, clique em Avançado e faça a configuração da seguinte maneira:

    Clique para abrir as configurações avançadas

    • Top-K: use o controle deslizante ou a caixa de texto para inserir um valor para "top-K". (incompatível com o Gemini 1.5).

      O Top-K muda a forma como o modelo seleciona tokens para saída. Um top-K de 1 significa que o próximo token selecionado é o mais provável entre todos os tokens no vocabulário do modelo (também chamado de decodificação gananciosa), enquanto um top-K de 3 significa que o próximo token está selecionado entre os três tokens mais prováveis usando a temperatura.

      Para cada etapa da seleção de tokens, são amostrados os tokens top-K com as maiores probabilidades. Em seguida, os tokens são filtrados com base no valor de top-P com o token final selecionado por meio da amostragem de temperatura.

      Especifique um valor mais baixo para respostas menos aleatórias e um valor mais alto para respostas mais aleatórias.

    • Top-P: use o controle deslizante ou a caixa de texto para inserir um valor para essa parte. Os tokens são selecionados do mais provável para o menos até que a soma das probabilidades seja igual ao valor do top-P. Para ter menos resultados de variáveis, defina top-P como 0.
    • Respostas máximas: use o controle deslizante ou a caixa de texto para inserir um valor para o número de respostas a serem geradas.
    • Respostas de streaming: ative para mostrar as respostas à medida que são geradas.
    • Limite do filtro de segurança: selecione o limite de probabilidade de mostrar respostas que podem ser prejudiciais.
    • Ativar embasamento: o embasamento não é compatível com solicitações multimodais.

  5. Clique em Inserir mídia e selecione uma origem para o arquivo.

    Fazer upload

    Selecione o arquivo que você quer enviar e clique em Abrir.

    Por URL

    Insira o URL do arquivo que você quer usar e clique em Inserir.

    Cloud Storage

    Selecione o bucket e o arquivo que você quer importar e clique em Selecionar.

    Google Drive

    1. Escolha uma conta e conceda consentimento ao Vertex AI Studio para acessar sua conta na primeira vez que você selecionar essa opção. É possível fazer upload vários arquivos que tenham um tamanho total de até 10 MB. Um único arquivo não pode exceder 7 MB.
    2. Clique no arquivo que você quer adicionar.
    3. Clique em Selecionar.

      A miniatura do arquivo é mostrada no painel Comando. O número total de tokens também é exibido. Se os dados do comando excederem o limite de tokens, os tokens serão truncados e não serão incluídos no processamento dos dados.

  6. Digite o comando de texto no painel Prompt.

  7. Opcional: para conferir o ID do token para texto e os IDs de token, clique na contagem de tokens no painel Comando.

  8. Clique em Enviar.

  9. Opcional: para salvar o comando em Meus comandos, clique em Salvar.

  10. Opcional: para receber o código Python ou um comando curl para seu prompt, clique em Receber código.

Definir parâmetros opcionais do modelo

Cada modelo tem um conjunto de parâmetros opcionais que podem ser definidos. Para mais informações, consulte Parâmetros de geração de conteúdo.

Documentos necessários

Os modelos multimodais do Gemini são compatíveis com os seguintes tipos MIME:

Tipo de documento MIME Gemini 1.5 Flash Gemini 1.5 Pro Gemini 1.0 Pro Vision
PDF - application/pdf
Texto - text/plain

PDFs são tratados como imagens, portanto, uma única página de um PDF é tratada como uma imagem. O número de páginas permitido em um comando é limitado ao número de imagens que o modelo aceita:

  • Gemini 1.0 Pro Vision: 16 páginas
  • Gemini 1.5 Pro e Gemini 1.5 Flash: 1.000 páginas

Tokenização de PDFs

Os PDFs são tratados como imagens. Por isso, cada página de um PDF é tokenizada da mesma forma que uma imagem.

Além disso, o custo dos PDFs segue os preços de imagens do Gemini. Por exemplo, se você incluir um documento de duas páginas em uma chamada da API Gemini, será cobrada uma taxa de entrada pelo processamento de duas imagens.

Tokenização de texto simples

Os documentos de texto simples são tokenizados como texto. Por exemplo, se você incluir um documento de texto simples de 100 palavras em uma chamada da API Gemini, será cobrada uma taxa de entrada pelo processamento de 100 palavras.

Práticas recomendadas para PDF

Ao usar PDFs, siga as práticas recomendadas e informações a seguir para ter os melhores resultados:

  • Se o comando contiver um único PDF, coloque o PDF antes do comando de texto na solicitação.
  • Se você tiver um documento longo, considere dividi-lo em vários PDFs para processá-lo.
  • Use PDFs criados com texto renderizado como texto em vez de usar texto em imagens digitalizadas. Esse formato garante que o texto seja legível por máquina para que seja mais fácil editar, pesquisar e manipular o texto em comparação com PDFs de imagens digitalizadas. Isso fornece os resultados ideais ao trabalhar com documentos com muito texto, como contratos.

Limitações

Embora os modelos multimodais do Gemini sejam eficientes em muitos casos de uso multimodais, é importante entender as limitações dos modelos:

  • Raciocínio espacial: os modelos não são precisos para localizar texto ou objetos em PDFs. Talvez eles retornem somente as contagens aproximadas de objetos.
  • Precisão: os modelos podem cometer erros ao interpretar texto escrito à mão em documentos PDF.

A seguir