Quando um manual em PDF ou DOCX entra em uma base de conhecimento, o texto passa por extração, divisão em blocos e indexação. Se a numeração da lista se perde nesse caminho, o modelo recupera um trecho sem saber a qual passo ele pertence e responde com uma ordem plausível, não com a do documento. O sintoma aparece no chat: a IA cita um “passo 3” que não existe ou manda executar o escalonamento antes da triagem.
Conferir a extração antes de indexar custa menos do que corrigir depois. A verificação tem quatro partes: extrair preservando estrutura, guardar número e seção como metadado, montar o bloco com o cabeçalho da seção e testar perguntas que só têm resposta certa se a ordem estiver correta.
Resumo rápido
- Numeração de lista é referência, não enfeite: “vá para o passo 4” só funciona se o 4 existir.
- PDF costuma devolver o número fora de ordem; DOCX costuma devolver o item sem número nenhum.
- O número precisa virar metadado do bloco, junto com a seção e a posição do item.
- Chunk sem cabeçalho de seção é a causa mais comum de citação errada no chat.
- O teste final é uma pergunta de ordem, do tipo “qual é o passo imediatamente anterior a X”.
- Sem essa conferência, o índice parece bom até alguém seguir o procedimento errado.
Por que a numeração carrega significado
Em texto corrido, a ordem dos parágrafos é flexível. Em procedimento, não é. O número do passo é uma coordenada: permite pular para uma etapa, voltar, citar em treinamento e auditar quem executou o quê.
Numa base para IA, essa coordenada tem função extra. O modelo não lê o documento inteiro: recebe alguns blocos recuperados por similaridade. Sem número e sem cabeçalho de seção, o bloco perde a posição relativa, e o modelo reconstrói a sequência pelo conteúdo. Isso é inferência, não leitura.
Onde o problema aparece primeiro
Três tipos de documento sofrem mais. Procedimentos operacionais, porque cada passo depende do anterior. Fluxos de escalonamento, porque a etapa seguinte muda conforme prazo, valor ou gravidade, e o número indica a passagem de nível. Checklists de conformidade, porque a ausência de um item numerado pode significar não conformidade.
Em contratos e políticas, a numeração de cláusulas tem o mesmo papel. Em textos de marketing, listas numeradas são recurso de leitura, e a perda do número quase não afeta a resposta. Priorize a conferência pelo risco.
Como a extração quebra a lista numerada
O problema quase nunca está no modelo. Está na conversão do arquivo para texto. Um PDF guarda instruções de desenho, com cada pedaço de texto posicionado em coordenadas na página. Um DOCX guarda estilos e definições de numeração separados do texto visível. Bibliotecas de extração reconstroem a estrutura a partir disso, e cada uma faz escolhas diferentes.
PDF: número fora de lugar
Na extração de PDF, o texto é lido na ordem em que aparece no arquivo, que não é necessariamente a ordem visual. O “1.” costuma ser um elemento separado, posicionado na margem, e pode sair colado no fim da linha anterior, no início da seguinte ou desaparecer quando o extrator o trata como ornamento. Em listas de duas colunas, a leitura pode intercalar os itens.
PDF escaneado sem camada de texto passa por OCR, e aí o número é reconhecido como caractere. Funciona na maioria dos casos, mas confunde “1.” com “l.” e “1)” com “I)” com frequência suficiente para exigir revisão.
DOCX: numeração invisível
No Word, a numeração automática fica na definição de numeração do documento, não no texto do parágrafo. Uma leitura que percorre apenas o texto dos parágrafos devolve o conteúdo do item sem o número: uma sequência de frases soltas, todas com aparência de parágrafo comum.
É o caso mais traiçoeiro, porque o documento está correto na tela. Quem abre o arquivo vê 1, 2, 3. Quem lê a extração vê três frases.
Os quatro defeitos que se repetem
- Número perdido: o item chega sem marcador e vira parágrafo isolado.
- Número colado no item errado: o “3.” aparece no fim do item 2 e o item 3 fica sem marcador.
- Numeração repetida: uma lista interna de outra seção reaproveita 1, 2, 3, e o índice passa a ter dois “passo 3”.
- Subitem promovido: o item 2.1 vira item 3, e toda a contagem seguinte desloca em um.
Nenhum desses defeitos gera erro na indexação. O índice é criado sem reclamar. O erro só aparece quando alguém faz uma pergunta que depende da ordem.
O pipeline de conferência em cinco etapas
A ordem importa: cada etapa reduz o universo da seguinte. Pular direto para o teste no chat deixa passar falhas, porque um modelo bom disfarça extração ruim com texto fluente.
Etapa 1: extrair com biblioteca que preserve estrutura
Escolha a biblioteca pela estrutura que ela devolve, não pela facilidade. O python-docx percorre parágrafos e tabelas na ordem do documento e expõe o estilo aplicado, o que permite identificar itens de lista. O pypdf extrai texto por página e dá acesso aos metadados do arquivo, o que ajuda a rastrear a origem de cada bloco.
Nenhuma das duas resolve numeração sozinha. As duas entregam o texto em unidades identificáveis, com referência à página ou ao parágrafo.
Etapa 2: guardar o número como metadado
Depois da extração, normalize a lista em uma estrutura explícita. Cada item precisa de quatro campos: documento, seção, número e texto. Guarde o número como string, porque “2.1” e “3-a” não sobrevivem a conversão numérica.
Guarde também o total de itens da seção. O campo detecta bloco truncado: se a seção tem sete itens e o modelo recebeu cinco, a resposta pode estar incompleta mesmo com o texto correto.
Etapa 3: montar o chunk com o cabeçalho da seção
O bloco indexado precisa se explicar fora de contexto. Inclua o caminho da seção e a posição antes do texto. Isso permite ao modelo dizer “no passo 5 da seção 3.2” em vez de “no passo 3” sem referência.
Um bloco por item funciona quando as perguntas são pontuais. Um bloco com a lista inteira funciona quando a pergunta pede a sequência completa. Se houver os dois tipos, indexe as duas visões.
Etapa 4: testar perguntas que dependem da ordem
Este é o teste que separa índice bom de índice com aparência de bom. Pergunte pela relação entre itens: “qual o passo imediatamente anterior a X”, “quantos passos existem entre Y e Z”. Índice sem numeração responde com texto genérico ou inventa a posição.
Etapa 5: comparar a resposta com o documento original
Abra o PDF ou o DOCX na página citada e confira. Não compare com a resposta anterior do modelo: a referência é a fonte. Anote pergunta, resposta, página e veredito. Essa planilha mostra quando uma nova versão do documento quebrou o que funcionava.
Exemplo de chunk errado e do mesmo chunk corrigido
O bloco abaixo perdeu seção e número. É recuperável por similaridade e inútil para perguntas de ordem.
secao: (vazio)
item: (vazio)
---
Abrir o chamado no sistema. Verificar se o cliente ja tem
cadastro. Se o cadastro estiver bloqueado, acionar o
financeiro. Passar para o nivel 2 quando o SLA estourar.
A versão corrigida carrega a posição no próprio bloco. O texto é o mesmo, mas agora ele se localiza.
documento: manual-atendimento-v3.pdf
pagina: 14
secao: 3.2 Escalonamento de chamados
item: 5
total_itens_secao: 7
---
5. Passar para o nivel 2 quando o SLA estourar.
(itens 6 e 7 tratam do retorno ao cliente e do registro
no historico.)
Com os metadados, “o que vem antes de passar para o nível 2” se responde com o item 4. Sem eles, o modelo só sabe que existe uma frase sobre nível 2 em algum lugar.
Sintomas no chat e causa na extração
Use a coluna da esquerda para reconhecer o problema em uma conversa real. A causa quase sempre está na extração, não no prompt.
| Sintoma no chat | Causa provável na extração | Teste rápido |
|---|---|---|
| Cita “passo 3” que não existe | Numeração perdida e reconstruída por inferência | Buscar o número no texto extraído, não no PDF |
| Responde com itens fora de ordem | Ordem de leitura do PDF diferente da ordem visual | Comparar a sequência extraída com a da página |
| Dois “passo 3” na mesma resposta | Numeração reiniciada em outra seção sem metadado de seção | Verificar se o chunk tem cabeçalho de seção |
| Pula uma etapa ao listar o procedimento | Item com numeração automática no DOCX, lido sem marcador | Contar itens extraídos contra itens visíveis |
| Junta dois passos em um | Quebra de linha ou de coluna tratada como continuação | Ler o bloco e ver onde termina a frase de cada item |
| Inventa um passo de encerramento | Lista truncada, sem o último item no índice | Comparar total de itens da seção com o original |
| Responde com cláusula de outro documento | Numeração igual em arquivos diferentes, sem metadado de documento | Conferir se o chunk identifica o arquivo de origem |
Cinco perguntas de teste para validar o índice
Aplique estas perguntas em um documento com pelo menos três seções numeradas. O objetivo não é avaliar a redação da resposta, e sim verificar se ela se ancora na posição correta.
- Qual é o passo imediatamente anterior a [etapa crítica]? Se o índice perdeu a numeração, a resposta traz o texto certo com a posição errada, ou admite que não sabe.
- Quantos passos existem entre [etapa A] e [etapa B]? Exige contagem. Um único item perdido muda o resultado, o que torna o erro visível.
- O que acontece se o passo [N] falhar? Obriga o modelo a buscar o item seguinte e a relação de dependência, não apenas o conteúdo do passo citado.
- Em qual seção fica o passo [N] e o que ele manda fazer? Testa o metadado de seção. Resposta sem seção indica chunk sem cabeçalho.
- Existe mais de um passo [N] neste manual? Testa numeração repetida entre seções. O comportamento correto é identificar as duas ocorrências e diferenciá-las pelo contexto.
Registre acerto, erro e resposta evasiva. Índice saudável erra pouco e, quando erra, erra de forma identificável. Índice ruim dá respostas confiantes com posição trocada, a pior falha em procedimento.
Exemplo: protocolo de uma rede de clínicas em Campinas
Uma rede de clínicas odontológicas em Campinas reuniu em uma base de conhecimento os protocolos de biossegurança, o fluxo de acolhimento e o escalonamento de urgências. Os arquivos vinham de duas origens: PDFs antigos exportados de um sistema e protocolos novos em DOCX, escritos pela coordenação clínica.
O time notou o problema pela recepção. Ao perguntar o que fazer com um paciente que relata dor após procedimento, o assistente respondia com o acionamento do plantão antes da avaliação inicial. A ordem fazia sentido gramatical e não fazia sentido clínico. A resposta citava “passo 2” e “passo 3” que não correspondiam ao protocolo impresso na parede.
Na auditoria, apareceram as duas causas. Nos PDFs, o número do item havia sido extraído como elemento separado e caído no fim do item anterior. Nos DOCX, a numeração automática não estava no texto dos parágrafos, e cada item chegou ao índice como frase solta. O conteúdo estava inteiro. A posição, não.
A correção seguiu o pipeline: nova extração por parágrafo e por página, numeração convertida em campo explícito, um bloco por item com seção e total de itens, e perguntas de ordem rodadas com a coordenação antes de liberar. O protocolo passou a repetir a seção no cabeçalho de cada bloco, o que resolveu as listas internas.
Para quem monta esse tipo de base, vale ler o guia de RAG na prática com documentos, que cobre a divisão em blocos, e o artigo de engenharia de prompts avançada, útil para instruir o modelo a citar seção e item. A documentação de OpenAI e ChatGPT descreve a busca em base vetorial do lado da plataforma.
Erros comuns
- Conferir o texto e não a posição. O conteúdo pode estar perfeito e a ordem errada. São duas verificações distintas.
- Indexar o documento inteiro como um bloco. Bloco grande dilui a numeração e dificulta a citação. Um item por bloco resolve mais casos.
- Confiar no número que aparece na tela. O PDF renderizado mostra a numeração do editor, não a do texto extraído.
- Testar só perguntas de conteúdo. “O que é preciso para abrir um chamado” não revela perda de ordem. Pergunte pela relação entre passos.
- Não versionar o índice. Quando o manual muda, a numeração muda. Sem controle de versão, o modelo mistura o passo antigo com o novo.
- Usar OCR sem revisão. Números são curtos e ambíguos, e o erro passa na leitura rápida.
- Corrigir no prompt o que está quebrado na extração. Pedir cuidado com a ordem não devolve o número perdido.
Perguntas frequentes
Preciso de OCR se o PDF já tem camada de texto?
Não. Se o texto pode ser selecionado no leitor de PDF, a extração direta costuma ser mais fiel que o OCR. Reserve o reconhecimento óptico para documentos escaneados e revise a numeração depois.
Qual o tamanho ideal de chunk para listas numeradas?
Para perguntas pontuais, um item por bloco, com o cabeçalho da seção repetido. Para perguntas de sequência, um bloco por lista completa. Não existe tamanho único: o critério é o tipo de pergunta do time. Manter as duas visões custa pouco.
Dá para recuperar a numeração depois de já ter indexado errado?
Dá, refazendo a extração e reindexando. A alternativa paliativa é criar um campo de contexto a partir do texto, mas isso é reconstrução por inferência. Em procedimento, refaça a partir do arquivo.
Como saber se o erro está na extração ou no modelo?
Olhe o texto que foi indexado. Se o número não está lá, o problema é de extração e nenhum ajuste de prompt resolve. Se o número está no bloco e o modelo ignora, ajuste a instrução para exigir citação de seção e item.
Lista com marcadores também precisa desse cuidado?
Em menor grau. A ordem de uma lista com marcadores raramente é normativa. O risco aparece quando o texto se refere à posição, como “conforme o terceiro item”. Nesse caso, o item precisa de identificador mesmo sem número.
Vale usar a própria IA para conferir a extração?
Como apoio, sim: comparar o texto extraído com a página acelera a auditoria. Como única verificação, não. O modelo tende a preencher lacunas com a sequência mais provável, que é o erro que se quer detectar.
Fontes e leitura recomendada
Documentação oficial das bibliotecas de extração, da busca em base vetorial e dos padrões web usados na marcação.