Arquivos PDF, como documentos financeiros, podem ser difíceis de usar em pipelines de RAG devido à estrutura complexa e à mistura de texto, figuras e tabelas. Neste tutorial, mostramos como usar a
função AI.CHUNK_DOCUMENT
para criar um pipeline de RAG com base em informações importantes extraídas de um arquivo PDF.
Objetivos
Este tutorial abrange as seguintes tarefas:- Criar um bucket do Cloud Storage e fazer upload de um arquivo PDF de amostra.
- Use a
função
AI.CHUNK_DOCUMENTpara analisar o conteúdo do PDF em blocos e, em seguida, gravar esse conteúdo em uma tabela do BigQuery. - Gerar embeddings do conteúdo em blocos do PDF e, em seguida, gravar esses embeddings em uma tabela do BigQuery. Os embeddings são representações numéricas do conteúdo do PDF que permitem realizar pesquisas semânticas e recuperação no conteúdo do PDF.
- Use a
função
VECTOR_SEARCHnos embeddings para identificar conteúdo de PDF semanticamente semelhante. - Realize a geração aumentada por recuperação (RAG) usando a
função
AI.GENERATEpara gerar texto, usando resultados da pesquisa vetorial para aumentar a entrada do comando e melhorar os resultados.
Custos
Neste documento, você vai usar os seguintes componentes faturáveis do Cloud de Confiance by S3NS:
- BigQuery: You incur costs for the data that you process in BigQuery.
- Gemini Enterprise Agent Platform: You incur costs for calls to Agent Platform models.
- Document AI: You incur costs for calls to the Document AI API.
- Cloud Storage: You incur costs for object storage in Cloud Storage.
Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Para mais informações, consulte Limpeza.
Antes de começar
Console
-
In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Cloud de Confiance project.
Enable the BigQuery, BigQuery Connection, Vertex AI, Document AI, and Cloud Storage APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Verifique se você tem os seguintes papéis no projeto: Administrador do Storage, Editor da Document AI, Administrador do BigQuery, Administrador do IAM do projeto
Verificar os papéis
-
No console do Cloud de Confiance , acesse a página IAM.
Acessar IAM - Selecione o projeto.
-
Na coluna Principal, encontre todas as linhas que identificam você ou um grupo no qual você está incluído. Para saber em quais grupos você está incluído, entre em contato com o administrador.
- Em todas as linhas que especificam ou incluem você, verifique a coluna Papel para ver se a lista de papéis inclui os papéis necessários.
Conceder os papéis
-
No console do Cloud de Confiance , acesse a página IAM.
Acessar IAM - Selecione o projeto.
- Clique em Conceder acesso.
-
No campo Novos principais, digite seu identificador de usuário. Normalmente, é o identificador de um usuário em um pool de identidades de força de trabalho. Saiba mais em Representar usuários do pool de força de trabalho nas políticas do IAM ou entre em contato com seu administrador.
- Clique em Selecionar um papel e pesquise o papel.
- Para conceder outros papéis, adicione-os clicando em Adicionar outro papel.
- Clique em Salvar.
-
gcloud
-
Instale a CLI do Google Cloud.
-
Configure a CLI gcloud para usar sua identidade federada.
Para mais informações, consulte Fazer login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Crie ou selecione um projeto do Cloud de Confiance .
Papéis necessários para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário ter um papel específico do IAM para selecionar um projeto. É possível selecionar qualquer projeto em que você tenha um papel.
-
Criar um projeto: para criar um projeto, é preciso ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Cloud de Confiance :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto do Cloud de Confiance que você está criando. -
Selecione o projeto do Cloud de Confiance que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Cloud de Confiance .
-
Verifique se o faturamento está ativado para o projeto do Cloud de Confiance .
Ative as APIs BigQuery, BigQuery Connection, Vertex AI, Document AI e Cloud Storage, se ainda não estiverem ativadas:
Funções necessárias para ativar APIs
Para ativar APIs, você precisa da permissão
serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pelo papel de proprietário (roles/owner). Caso contrário, é possível conseguir essa permissão pelo papel de administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.gcloud services enable bigquery.googleapis.com
bigqueryconnection.googleapis.com aiplatform.googleapis.com documentai.googleapis.com storage.googleapis.com -
Atribua papéis à sua conta de usuário. Execute uma vez o seguinte comando para cada um dos seguintes papéis do IAM:
roles/storage.admin, roles/documentai.editor, roles/bigquery.admin, roles/resourcemanager.projectIamAdmingcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE
Substitua:
PROJECT_ID: o ID do projeto.USER_IDENTIFIER: o identificador da sua conta de usuário . Para ver exemplos, consulte Representar usuários do pool de força de trabalho nas políticas do IAM.ROLE: o papel do IAM que você concede à sua conta de usuário.
Criar um conjunto de dados
Para criar um conjunto de dados do BigQuery, selecione uma das seguintes opções:
Console
No console do Cloud de Confiance , acesse a página BigQuery.
No painel à esquerda, clique em Explorer:

Se o painel esquerdo não aparecer, clique em Expandir painel esquerdo para abrir.
No Explorer, expanda o projeto e clique em Conjuntos de dados.
Na página Conjuntos de dados, clique em Criar conjunto de dados.
No painel Criar conjunto de dados, faça o seguinte:
Para o código do conjunto de dados, insira
bqml_tutorial.Em Local dos dados, selecione EUA.
Não altere as outras configurações padrão.
Clique em Criar conjunto de dados.
bq
Para criar um novo conjunto de dados, use o
comando bq mk --dataset.
Crie um conjunto de dados chamado
bqml_tutorialcom o local de dados definido comoUS:bq mk --dataset \ --location=US \ --description "BigQuery ML tutorial dataset." \ bqml_tutorial
Confirme se o conjunto de dados foi criado:
bq ls
API
Chame o método datasets.insert com um recurso de conjunto de dados definido:
{ "datasetReference": { "datasetId": "bqml_tutorial" } }
Fazer upload do PDF de amostra para o Cloud Storage
Para fazer upload do PDF de amostra para o Cloud Storage, siga estas etapas:
- Baixe o PDF de amostra do
scf23.pdfem https://www.federalreserve.gov/publications/files/scf23.pdf e clique em download . - Crie um bucket do Cloud Storage.
- Faça upload do arquivo
scf23.pdfpara o bucket.
Analisar o arquivo PDF em partes
Use o processador de documentos com a função AI.CHUNK_DOCUMENT para analisar o
arquivo PDF em blocos e, em seguida, grave esse conteúdo em uma tabela:
No console do Cloud de Confiance , acesse a página BigQuery.
No editor de consultas, execute a seguinte instrução:
CREATE or REPLACE TABLE bqml_tutorial.chunked_pdf AS ( SELECT * FROM AI.CHUNK_DOCUMENT('gs://BUCKET_NAME/scf23.pdf', chunk_size => 250) );
No editor de consultas, execute a consulta a seguir para conferir um subconjunto do conteúdo do PDF analisado:
SELECT chunk_id, start_page, end_page, content FROM `bqml_tutorial.chunked_pdf` ORDER BY chunk_id LIMIT 3;
O resultado será o seguinte:
+----------+------------+----------+-------------------------------------------+ | chunk_id | start_page | end_page | content | +----------+------------+----------+-------------------------------------------+ | 1 | 1 | 1 | OF NORS. • BOARD OF GOVERNO FEDERAL | | | | | RESERVE SYSTEM RESEARCH & ANALYSIS | | 2 | 1 | 7 | # Changes in U.S. Family Finances from | | | | | 2019 to 2022 | | | | | | | | | | Evidence from the Survey of Consumer... | | 3 | 3 | 5 | # Changes in U.S. Family Finances from | | | | | 2019 to 2022 | | | | | | | | | | ## Contents... | +----------+------------+----------+-------------------------------------------+
Gerar embeddings
Gere embeddings para o conteúdo do PDF analisado e grave-os em uma tabela:
No console do Cloud de Confiance , acesse a página BigQuery.
No editor de consultas, execute a seguinte instrução:
CREATE OR REPLACE TABLE `bqml_tutorial.embeddings` AS ( SELECT *, AI.EMBED(content, endpoint => 'text-embedding-005').result AS embedding FROM bqml_tutorial.chunked_pdf );
executar uma pesquisa vetorial
Executar uma pesquisa vetorial no conteúdo do PDF analisado.
A consulta a seguir recebe uma entrada de texto, cria um embedding para essa entrada
usando a função AI.EMBED e, em seguida, usa a função VECTOR_SEARCH
para corresponder o embedding de entrada com os embeddings de conteúdo de PDF mais
semelhantes. Os resultados são os dez principais blocos de PDF mais relacionados
a mudanças no patrimônio líquido da família.
Acessar a página do BigQuery.
No editor de consultas, execute a seguinte instrução SQL:
SELECT distance, base.chunk_id AS chunk_id, base.start_page AS start_page, base.end_page AS end_page, base.content FROM VECTOR_SEARCH( TABLE `bqml_tutorial.embeddings`, 'embedding', query_value => AI.EMBED( 'Did the typical family net worth increase? If so, by how much?', endpoint => 'text-embedding-005').result, top_k => 3, OPTIONS => '{"fraction_lists_to_search": 0.01}') ORDER BY distance DESC;
O resultado será o seguinte:
+----------+----------+------------+----------+-----------------------------------+ | distance | chunk_id | start_page | end_page | content | +----------+----------+------------+----------+-----------------------------------+ | 0.608587 | 25 | 17 | 18 | # Net Worth | | | | | | | | | | | | 18 Between the first quarter of | | | | | | 2019 and the first quarter of... | +----------+----------+------------+----------+-----------------------------------+ | 0.606387 | 29 | 19 | 21 | ## Net Worth | | | | | | | | | | | | ## Net Worth by Family | | | | | | Characteristics... | +----------+----------+------------+----------+-----------------------------------+ | 0.599438 | 23 | 17 | 21 | # Net Worth | | | | | | | | | | | | The net improvements in... | +----------+----------+------------+----------+-----------------------------------+
Gerar texto aumentado pelos resultados da pesquisa vetorial
Realize uma pesquisa vetorial nos embeddings para identificar conteúdo de PDF semanticamente semelhante e, em seguida, use a função AI.GENERATE com os resultados da pesquisa vetorial para aumentar a entrada do comando e melhorar os resultados da geração de texto. Nesse caso, a consulta usa informações dos blocos de PDF para responder
a uma pergunta sobre a mudança no patrimônio líquido da família na última década.
No console do Cloud de Confiance , acesse a página BigQuery.
No editor de consultas, execute a seguinte instrução:
SELECT AI.GENERATE( CONCAT('Did the typical family net worth change? How does this compare the SCF survey a decade earlier? Be concise and use the following context:', STRING_AGG(FORMAT("context: %s", base.content), ',\n') ) ).result AS response FROM VECTOR_SEARCH( TABLE `bqml_tutorial.embeddings`, 'embedding', query_value => AI.EMBED( 'Did the typical family net worth increase? If so, by how much?', endpoint => 'text-embedding-005').result, top_k => 3, OPTIONS => '{"fraction_lists_to_search": 0.01}')
O resultado será assim:
+-------------------------------------------------------------------------+ | response | +-------------------------------------------------------------------------+ | Yes, the typical family net worth changed significantly. Between 2019 | | and 2022, real median net worth surged by 37% to $192,900. | | | | This growth contrasts sharply with the period a decade earlier. Between | | the 2010 and 2013 SCF surveys, real median net worth actually decreased | | by 2%. | +-------------------------------------------------------------------------+
Limpar
Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.
Excluir o projeto
Excluir um projeto do Cloud de Confiance :
gcloud projects delete PROJECT_ID
A seguir
- Saiba mais sobre embeddings e pesquisa vetorial.
- Saiba mais sobre como realizar pesquisa semântica e RAG.