Entendimento de documentos

É possível adicionar PDFs às solicitações do Gemini para realizar tarefas que envolvem compreensão do conteúdo dos PDFs incluídos. Esta página mostra como adicionar PDFs às suas solicitações para o 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 comando: 300

Tamanho máximo do arquivo PDF: 30 MB

Gemini 1.5 Pro

Acessar o card de modelo do Gemini 1.5 Pro

Máximo de páginas por comando: 300

Tamanho máximo do arquivo PDF: 30 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: 30 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 dos seus apps para dispositivos móveis e da Web, consulte os SDKs da IA do Google para Android, Swift e Web.

Adicionar documentos a uma solicitação

Você pode adicionar um único PDF às suas solicitações para o Gemini.

PDF único

A guia a seguir mostra como incluir um PDF em uma solicitação de comando usando o SDK do Python. 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 gera uma resposta com streaming ou sem streaming. O streaming envolve receber respostas a solicitações à medida que são geradas. Ou seja, assim que o modelo gera tokens de saída, eles são enviados. Uma resposta sem streaming a prompts é enviada somente 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 and un-comment below lines
# project_id = "PROJECT_ID"

vertexai.init(project=project_id, location="us-central1")

model = GenerativeModel(model_name="gemini-1.5-flash-001")

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

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

response = model.generate_content(contents)
print(response.text)

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 gera uma resposta com streaming ou sem streaming. O streaming envolve receber respostas a prompts à medida que são geradas. Ou seja, assim que o modelo gera tokens de saída, eles são enviados. Uma resposta sem streaming a prompts é enviada somente depois que todos os tokens de saída forem gerados.

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

  public ResponseStream 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 gera uma resposta com streaming ou sem streaming. O streaming envolve receber respostas a prompts à medida que são geradas. Ou seja, assim que o modelo gera tokens de saída, eles são enviados. Uma resposta sem streaming a prompts é enviada somente 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-pro-preview-0409',
  });

  const filePart = {
    file_data: {
      file_uri: 'gs://cloud-samples-data/generative-ai/pdf/2403.05530.pdf',
      mime_type: '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));
}

C#

Antes de testar essa amostra, siga as instruções de configuração para C# Guia de início rápido da Vertex AI: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para 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.


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

Definir parâmetros do modelo

Os seguintes parâmetros de modelo podem ser definidos em modelos multimodais:

Top-P

O top-p muda a forma como o modelo seleciona tokens para saída. Os tokens são selecionados do mais provável (veja o top-K) para o menos provável até que a soma das probabilidades seja igual ao valor do 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 de top-P for 0.5, o modelo selecionará A ou B como token seguinte usando temperatura e exclui C como candidato.

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

Top-K

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.

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.

Valores de parâmetro válidos

Parâmetro Gemini 1.0 Pro Vision Gemini 1.5 Pro Gemini 1.5 Flash
Top-K 1 - 40 (padrão 32) Sem suporte Sem suporte
Top-P 0 - 1.0 (padrão 1.0) 0 - 1.0 (padrão 0.95) 0 - 1.0 (padrão 0.95)
Temperatura 0 - 1.0 (padrão 0.4) 0 - 2.0 (padrão 1.0) 0 - 2.0 (padrão 1.0)

Documentos necessários

O tipo MIME obrigatório para um PDF é application/pdf.

Práticas recomendadas para PDF

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

  • PDFs são tratados como imagens, portanto, uma única página de um PDF é tratada como uma imagem.
    • O número de páginas suportadas é limitado ao número de imagens que um modelo aceita. No Gemini 1.0 Pro Vision, o limite é 16. No Gemini 1.5 Pro e Gemini 1.5 Flash, o limite é de 300. Se você tiver um documento longo, considere dividi-lo em vários PDFs para processá-lo.
    • Ao usar PDFs como entrada, o custo segue o preço 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.
  • Se o comando contiver um único PDF, coloque o PDF antes do comando de texto.
  • 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