Carregamento, divisão e embedding de documentos
PyPDFLoader, RecursiveCharacterTextSplitter, OpenAIEmbeddings e estratégias de embedding.
Carregamento, divisão e embedding de documentos é uma aula grátis de Learn AI with Python no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Learn AI with Python, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Learn AI with Python inclui 4 aulas no total.
O fluxo de ingestão do RAG
Antes que um LLM possa responder com base nos seus documentos, você precisa carregá-los, dividi-los e gerar representações vetoriais deles. Esta lição aborda esse fluxo de ingestão, a base de todo sistema de Geração Aumentada por Recuperação.
pip install langchain-community pypdf langchain-openaiCarregando um PDF
PyPDFLoader lê um PDF e retorna uma lista de objetos Documento, um por página. Cada documento tem page_content (o texto) e metadata (a origem e o número da página).
from langchain_community.document_loaders import PyPDFLoader
loader = PyPDFLoader("handbook.pdf")
docs = loader.load()
print(len(docs), "pages")Por que dividir os documentos?
Páginas inteiras geralmente são grandes demais para gerar representações vetoriais ou caber em uma instrução. A divisão separa o texto em partes menores que podem ser vetorizadas adequadamente e permite que a recuperação retorne somente o trecho relevante, não uma página inteira.
RecursiveCharacterTextSplitter
O divisor recomendado é RecursiveCharacterTextSplitter. Ele tenta dividir primeiro por parágrafos, depois por frases e, por fim, por palavras, mantendo as partes semanticamente coerentes em vez de cortar uma palavra ao meio.
from langchain_text_splitters import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)Tamanho e sobreposição das partes
chunk_size define o número máximo de caracteres por parte; chunk_overlap repete parte do texto entre partes vizinhas para que o contexto não seja perdido nas transições. Uma divisão de 1000/200 é um ponto de partida comum.
chunks = splitter.split_documents(docs)
print(len(chunks), "chunks")
print(chunks[0].page_content[:120])Ajustando o tamanho das partes
Partes pequenas proporcionam uma recuperação precisa, mas podem deixar de incluir o contexto ao redor. Partes grandes preservam o contexto, mas diluem a relevância e consomem mais tokens. Uma sobreposição de 10% a 20% do tamanho da parte é um bom padrão para conectar as transições.
O que são representações vetoriais?
Uma representação vetorial transforma o texto em um vetor de números de tamanho fixo que captura seu significado. Textos semelhantes produzem vetores próximos. É isso que permite pesquisar por similaridade semântica em vez de usar palavras-chave.
OpenAIEmbeddings
Crie representações vetoriais com OpenAIEmbeddings. O modelo text-embedding-3-small é barato e eficaz. embed_query gera a representação vetorial de uma cadeia; embed_documents gera as representações de uma lista.
from langchain_openai import OpenAIEmbeddings
embeddings = OpenAIEmbeddings(model="text-embedding-3-small")
vector = embeddings.embed_query("How do I reset my password?")
print(len(vector)) # 1536Gerando representações vetoriais em lote
Gere as representações vetoriais de todas as suas partes de uma só vez. Cada parte se torna um vetor que você armazenará posteriormente em um banco de dados vetorial para realizar buscas rápidas por similaridade.
texts = [c.page_content for c in chunks]
vectors = embeddings.embed_documents(texts)
print(len(vectors), "vectors of dim", len(vectors[0]))Estimando o custo da vetorização
As representações vetoriais são cobradas por token. Estime o total de tokens de todas as partes e multiplique-o pelo preço por 1 mil tokens. Contar antes da vetorização evita cobranças inesperadas em grandes conjuntos de documentos.
import tiktoken
enc = tiktoken.get_encoding("cl100k_base")
total = sum(len(enc.encode(c.page_content)) for c in chunks)
price_per_1k = 0.00002
print("tokens:", total, "cost $:", total / 1000 * price_per_1k)Resumo do fluxo
O fluxo de ingestão é: carregar os documentos, dividi-los em partes sobrepostas, gerar uma representação vetorial de cada parte e, na próxima lição, armazená-las. Uma boa divisão em partes e a atenção aos custos determinam a qualidade e o preço de todo o sistema RAG.
Verificação rápida
Teste seu conhecimento sobre ingestão.
Recapitulação: carregamento, divisão e vetorização
Você usou PyPDFLoader para carregar documentos, RecursiveCharacterTextSplitter com chunk_size e chunk_overlap para dividi-los em partes, e OpenAIEmbeddings para transformar as partes em vetores. Você também aprendeu a estimar o custo da vetorização por token antes de processar um grande conjunto de documentos.
Perguntas Frequentes
A aula “Carregamento, divisão e embedding de documentos” é grátis?
Sim — o texto completo de “Carregamento, divisão e embedding de documentos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Learn AI with Python, atualize para CoddyKit PRO. O curso de Learn AI with Python inclui 4 aulas no total.
O que vou aprender em “Carregamento, divisão e embedding de documentos”?
PyPDFLoader, RecursiveCharacterTextSplitter, OpenAIEmbeddings e estratégias de embedding. Você pratica Learn AI with Python com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Learn AI with Python?
Nenhuma experiência prévia é necessária. Learn AI with Python no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Carregamento, divisão e embedding de documentos”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Learn AI with Python?
Sim. Cada aula de Learn AI with Python inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Arquitetura do LangChain e LCEL
- Carregamento, divisão e embedding de documentos
- Armazenamentos vetoriais: Chroma e FAISS
- Construção de um sistema de perguntas e respostas com RAG de ponta a ponta