IMPLEMENTAÇÃO COMPLETA
1️ Instalação de dependências
pip install langchain
pip install langchain-openai
pip install langchain-community
pip install tiktoken
pip install faiss-cpu
pip install pinecone-client
pip install pypdf
pip install python-dotenv
pip install beautifulsoup4
2️ Carregamento de Documentos
Carregador de TXT
from langchain_community.document_loaders import TextLoader
txt_loader = TextLoader("manual_operacional.txt")
txt_docs = txt_loader.load()
Carregador de PDF com Metadados
from langchain_community.document_loaders import PyPDFLoader
pdf_loader = PyPDFLoader("contrato_logistica.pdf")
pdf_docs = pdf_loader.load()
print(pdf_docs[0].metadata)
Metadados úteis:
página
fonte
caminho_do_arquivo
Carregador Web
from langchain_community.document_loaders import WebBaseLoader
web_loader = WebBaseLoader("https://hermexlog.com/politicas")
web_docs = web_loader.load()
Carregador de diretórios
from langchain_community.document_loaders import DirectoryLoader
dir_loader = DirectoryLoader("./documentos", glob="**/*.txt")
dir_docs = dir_loader.load()
Carregador de Mesclagem
all_docs = txt_docs + pdf_docs + web_docs + dir_docs
Simples. E eficiente.
3️ Fragmentação Simples (Divisor de Caracteres)
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
chunks = splitter.split_documents(all_docs)
4️ Chunking por Tokens (TikToken)
from langchain.text_splitter import TokenTextSplitter
token_splitter = TokenTextSplitter(
chunk_size=500,
chunk_overlap=100
)
token_chunks = token_splitter.split_documents(all_docs)
Melhor controle de custo de tokens.
5️ Chunking Semântico (OpenAI)
from langchain_openai import OpenAIEmbeddings
from langchain_experimental.text_splitter import SemanticChunker
embeddings = OpenAIEmbeddings()
semantic_splitter = SemanticChunker(embeddings)
semantic_chunks = semantic_splitter.split_documents(all_docs)
Aqui você está jogando no modo hard.
Chunks são criados com base em significado, não tamanho fixo.
6️ Armazenamento vetorial na memória
from langchain.vectorstores import FAISS
vector_store = FAISS.from_documents(semantic_chunks, embeddings)
7️ Busca com Score de Similaridade
query = "Qual o prazo de entrega para transporte rodoviário?"
results = vector_store.similarity_search_with_score(query, k=3)
for doc, score in results:
print(score)
print(doc.page_content)
Pontuação menor → maior similaridade.
8️ Filtros por Metadados
results = vector_store.similarity_search(
query,
k=3,
filter={"source": "contrato_logistica.pdf"}
)
Agora você tem controle fino. Isso é produção.
9️ Pinha (Nuvem)
import pinecone
from langchain.vectorstores import Pinecone
pinecone.init(
api_key="SUA_API_KEY",
environment="us-east-1"
)
index_name = "hermex-log-index"
vector_store = Pinecone.from_documents(
semantic_chunks,
embeddings,
index_name=index_name
)