Nos últimos anos, a integração entre inteligência artificial generativa e dados corporativos estruturados se tornou uma das áreas mais promissoras da engenharia de software. Este projeto — desenvolvido como parte do MBA em Engenharia de Software com IA da Full Cycle — apresenta uma arquitetura prática de RAG (Retrieval-Augmented Generation) utilizando Python, LangChain e PostgreSQL com a extensão pgVector.
O conceito de RAG (Retrieval-Augmented Generation)
RAG é uma abordagem que combina recuperação de informações (retrieval) com geração de linguagem natural (generation). Diferente de uma IA pura, que depende apenas do conhecimento embutido em seu modelo, o RAG busca informações em fontes externas (bancos de dados, PDFs, documentos corporativos) e as insere no contexto antes de gerar uma resposta. Isso garante precisão, rastreabilidade e atualização contínua dos dados.
Arquitetura e componentes principais
A arquitetura foi desenhada para ser modular e extensível, baseada em três camadas principais:
- Ingestão: carrega o conteúdo de um PDF, divide em chunks (1000 caracteres com overlap de 150) e gera embeddings usando provedores como HuggingFace, OpenAI ou Gemini.
- Armazenamento: salva os vetores gerados no PostgreSQL, utilizando a extensão pgVector, permitindo consultas de similaridade baseadas em distância vetorial.
- Busca e Resposta: consulta o banco vetorial, recupera os contextos mais relevantes e os envia para o modelo de linguagem, que gera uma resposta baseada exclusivamente no conteúdo encontrado.
├── docker-compose.yml
├── requirements.txt
├── .env.example
├── document.pdf
└── src/
├── ingest.py # Pipeline de ingestão e vetorização do PDF
├── search.py # Busca semântica e montagem de contexto
└── chat.py # CLI interativo com fallback rule-basedPipeline de ingestão
A etapa de ingestão é responsável por transformar conteúdo textual em representações numéricas vetoriais. Isso é feito via embeddings, que mapeiam significado semântico em espaços de alta dimensão. O sistema suporta três provedores:
- 🧠 HuggingFace (Local): modelo all-MiniLM-L6-v2, ideal para ambientes sem conexão com APIs.
- ☁️ OpenAI (text-embedding-3-small): rápido e otimizado para custo-benefício.
- ⚡ Gemini (models/embedding-001): alternativa Google com integração direta ao ecossistema Generative AI.
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain_postgres import PGVector
embeddings = HuggingFaceEmbeddings(model_name='sentence-transformers/all-MiniLM-L6-v2')
PGVector.from_documents(
documents=chunks,
embedding=embeddings,
connection=engine,
collection_name='pdf_chunks'
)Busca semântica e geração de respostas
Na fase de consulta, o sistema recebe uma pergunta, gera seu embedding e realiza uma busca de similaridade no banco vetorial. Os 10 chunks mais relevantes são concatenados e usados para formar o contexto da resposta. Caso o modelo LLM esteja indisponível, o sistema aplica um fallback rule-based que busca padrões explícitos (como valores monetários ou nomes de empresas).
context = build_context(results)
chain = prompt | llm | StrOutputParser()
response = chain.invoke({"contexto": context, "pergunta": question})Aplicações práticas em outros projetos
Essa arquitetura pode ser reutilizada em diversos cenários corporativos e de produtos SaaS. Alguns exemplos de aplicação real incluem:
- 📚 Assistentes de suporte interno: bots capazes de responder dúvidas com base em manuais técnicos e políticas empresariais.
- 🏥 Saúde e nutrição: integração com relatórios médicos ou bases de alimentos para recomendações personalizadas (como no projeto MovePro).
- 🏢 Compliance e jurídico: busca semântica em documentos legais para acelerar due diligence e auditorias.
- 🛒 E-commerce: recomendação contextualizada de produtos com base em descrições e catálogos.
- 📊 Data Intelligence: combinação com pipelines ETL para análise de dados não estruturados e consultas híbridas SQL + embeddings.
Lições aprendidas e próximos passos
O projeto demonstrou o poder de combinar IA generativa com bancos de dados relacionais tradicionais. Entre as principais lições: manter consistência entre dimensões vetoriais, usar fallback lógico para ambientes offline e modularizar o código para facilitar trocas de provedores. Como evolução natural, a próxima etapa será expor essa arquitetura como uma API REST com FastAPI e construir uma interface web interativa em Next.js.
Arquitetura RAG com LangChain, PostgreSQL e pgVectorIntegrar LangChain com pgVector é uma das formas mais elegantes e escaláveis de trazer IA contextualizada para aplicações empresariais modernas. É um caminho sólido para transformar dados em inteligência.
