Neste tutorial, construímos um pipeline visual de recuperação de documentos ponta a ponta usando ColPali. Focamos em tornar a configuração robusta, resolvendo conflitos comuns de dependência e garantindo que o ambiente permaneça estável. Renderizamos páginas de PDF como imagens, as incorporamos usando as representações multi-vetoriais do ColPali, e contamos com a pontuação de interação tardia para recuperar as páginas mais relevantes para uma consulta em linguagem natural. Ao tratar cada página visualmente, em vez de como texto simples, preservamos o layout, tabelas e figuras que são frequentemente perdidos na recuperação tradicional de apenas texto.
Copiar Código Copiado Usar um navegador diferente
import subprocess, sys, os, json, hashlib
def pip(cmd):
subprocess.check_call([sys.executable, "-m", "pip"] + cmd)
pip(["uninstall", "-y", "pillow", "PIL", "torchaudio", "colpali-engine"])
pip(["install", "-q", "--upgrade", "pip"])
pip(["install", "-q", "pillow<12", "torchaudio==2.8.0"])
pip(["install", "-q", "colpali-engine", "pypdfium2", "matplotlib", "tqdm", "requests"])
Preparamos um ambiente de execução limpo e estável desinstalando pacotes conflitantes e atualizando o pip. Fixamos explicitamente versões compatíveis de Pillow e torchaudio para evitar erros de importação em tempo de execução. Em seguida, instalamos o ColPali e suas dependências necessárias para que o restante do tutorial seja executado sem interrupções.
Copiar Código Copiado Usar um navegador diferente
import torch
import requests
import pypdfium2 as pdfium
from PIL import Image
from tqdm import tqdm
import matplotlib.pyplot as plt
from transformers.utils.import_utils import is_flash_attn_2_available
from colpali_engine.models import ColPali, ColPaliProcessor
device = "cuda" if torch.cuda.is_available() else "cpu"
dtype = torch.float16 if device == "cuda" else torch.float32
MODEL_NAME = "vidore/colpali-v1.3"
model = ColPali.from_pretrained(
MODEL_NAME,
torch_dtype=dtype,
device_map=device,
attn_implementation="flash_attention_2" if device == "cuda" and is_flash_attn_2_available() else None,
).eval()
processor = ColPaliProcessor.from_pretrained(MODEL_NAME)
Importamos todas as bibliotecas necessárias e detectamos se uma GPU está disponível para aceleração. Carregamos o modelo e o processador do ColPali com a precisão e a implementação de atenção apropriadas com base no tempo de execução. Garantimos que o modelo esteja pronto para inferência, alternando-o para o modo de avaliação.
Copiar Código Copiado Usar um navegador diferente
PDF_URL = "https://arxiv.org/pdf/2407.01449.pdf"
pdf_bytes = requests.get(PDF_URL).content
pdf = pdfium.PdfDocu
Fonte: MarkTechPost
Publicado em 2026-02-19