IA

Construindo um sistema RAG com LangChain e PostgreSQL

11 de out de 2025 · 9 min de leitura

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-based

Pipeline 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 pgVectorArquitetura RAG com LangChain, PostgreSQL e pgVector

Integrar 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.