📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Guia de Inteligência Artificial. Recomendado revisar antes de começar.

🤖 Pipeline RAG com Embeddings & LLM API

v1.0 — Inteligência Artificial, Retrieval-Augmented Generation, Vector DBs e LangChain

Trilha de Especialização Pedagógica — Projeto 1 de 4

🎓 Nível Profissional Simulado: Engenheiro de Inteligência Artificial / LLM Developer. A habilidade mais procurada no mercado de inteligência artificial aplicada é construir sistemas RAG (Retrieval-Augmented Generation): permitindo que modelos como GPT-4 ou Gemini consultem manuais, contratos e bases de dados corporativas em tempo real sem alucinações.


🎯 Objetivo & Escopo do Projeto

Construir um Pipeline RAG (Retrieval-Augmented Generation) completo em Python, implementando carregamento de PDFs/manuais, divisão de texto em chunks com sobreposição, geração de Embeddings Vetoriais, armazenamento e busca por similaridade semântica em Vector Database e resposta contextualizada via LLM.


🧑‍💼 Fase 1 — Levantamento de Requisitos

O Briefing do Cliente (Head de Inovação & IA)

“Nossos atendentes de suporte gastam 20 minutos buscando regras nos 50 PDFs de políticas internas da empresa. Queremos um assistente de IA onde o operador faça uma pergunta em linguagem natural, o sistema busque os 3 trechos mais relevantes dos manuais e a LLM responda de forma resumida e cite a página exata da fonte oficial, sem inventar informações.”

Requisitos Funcionais (RF) e Não-Funcionais (RNF)

ID Tipo Descrição Origem no Briefing
RF01 Funcional Fragmentar documentos em chunks de 500 caracteres com overlap de 50 caracteres. “50 PDFs de políticas internas”
RF02 Funcional Gerar representações vetoriais (Embeddings) e indexar no Vector Database. “busque os 3 trechos mais relevantes”
RF03 Funcional Injetar o contexto resgatado no prompt da LLM com instrução anti-alucinação. “sem inventar informações”
RF04 Funcional Retornar a resposta final acompanhada das fontes documentais citadas. “cite a página exata da fonte”
RNF01 Não-Funcional Similaridade calculada via Distância de Cosseno em sub-segundos. Eficiência de Busca
RNF02 Não-Funcional Prompt com Guardrail impedindo respostas fora do contexto indexado. Segurança de IA

📋 Fase 2 — Backlog & User Stories

ID User Story Prioridade
US01 Como atendente, quero perguntar ‘Qual o prazo de reembolso?’ e receber a resposta exata da política. Alta
US02 Como compliance, quero auditar as fontes citadas para validar a conformidade da resposta. Alta

🌿 Fase 3 — Engenharia em Equipe (Git Flow & Setup)

# Branch da funcionalidade
git checkout -b feature/US01-rag-pipeline-embeddings

# Executar o pipeline RAG
python rag_pipeline.py

🛠️ Fase 4 — Implementação Guiada (rag_pipeline.py)

from sentence_transformers import SentenceTransformer
import chromadb

# 1. Inicializar modelo de Embeddings e Banco Vetorial
model = SentenceTransformer('all-MiniLM-L6-v2')
client = chromadb.Client()
collection = client.create_collection("politicas_empresa")

# 2. Indexar documentos corporativos
docs = [
    "A política de reembolso prevê devolução integral em até 7 dias úteis.",
    "O cancelamento de assinaturas pode ser feito pelo portal a qualquer momento."
]
embeddings = model.encode(docs).tolist()
collection.add(ids=["doc1", "doc2"], documents=docs, embeddings=embeddings)

# 3. Busca por Similaridade Semântica
pergunta = "Em quantos dias recebo meu dinheiro de volta?"
pergunta_emb = model.encode([pergunta]).tolist()
resultados = collection.query(query_embeddings=pergunta_emb, n_results=1)

print("Contexto Recuperado com Sucesso:", resultados['documents'][0])


🚀 Como Executar no Laboratório

1. Abra o terminal na pasta deste projeto

No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:

cd ia_01_rag_embeddings_llm

2. Execute a aplicação ou testes

pip install -r requirements.txt
python app.py

[!TIP] Dica para execução a partir da raiz do repositório: Se você abriu o repositório completo no VS Code, basta navegar até a pasta antes de executar: cd catalogo_projetos/ia_01_rag_embeddings_llm`

🧭 Decisões de Arquitetura (ADRs)


🧪 Testes de Validação & Similaridade



🏛️ Arquitetura Visual & Engenharia do Sistema

A visualização arquitetural abaixo detalha a separação de responsabilidades e o fluxo de dados implementado na subpasta ai-python/:

Arquitetura da Aplicação

flowchart TD
    subgraph Entrada["Camada de Entrada & CLI"]
        IN1["Interface de Comando / API"] --> IN2["Parser & Sanitização"]
    end
    subgraph Dominio["Camada de Domínio & Regras"]
        DM1["Modelos de Domínio"] --> DM2["Processamento Algorítmico"]
    end
    subgraph Armazenamento["Persistência & Recursos"]
        ST1["Banco de Dados / Arquivo"] --> ST2["Transações ACID & Logs"]
    end
    subgraph Qualidade["Validação & Qualidade"]
        QA1["Testes Automatizados"] --> QA2["Checkpoints CP-01..05 PASS"]
    end

    Entrada --> Dominio
    Dominio --> Armazenamento
    Armazenamento --> Qualidade

    style Entrada fill:#e3f2fd,stroke:#1976d2,stroke-width:1.5px
    style Dominio fill:#fffde7,stroke:#fbc02d,stroke-width:1.5px
    style Armazenamento fill:#e8f5e9,stroke:#388e3c,stroke-width:1.5px
    style Qualidade fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1.5px

🎯 Engenharia de Requisitos & Modelagem Formal

👤 User Stories (Histórias de Usuário)

ID Persona História de Usuário Critério de Aceite Prioridade
US-01 Engenheiro de IA Desejo particionar documentos em chunks com sobreposição semântica Chunker configurável por tamanho e overlap preservando contexto Alta
US-02 Arquiteto de Soluções Desejo gerar embeddings vetoriais e armazenar em banco vetorial local Geração de vetores multidimensionais com indexação em memória Alta
US-03 Desenvolvedor de Aplicações Desejo busca por similaridade de cosseno para recuperar contexto relevante Cálculo de cosine similarity retornando top-K chunks mais pertinentes Alta
US-04 Pesquisador de NLP Desejo montar prompt estruturado com contexto injetado para LLM Prompt engineering com instruções de resposta estritamente baseada no contexto Alta
US-05 Auditor de Qualidade Desejo testes com perguntas fora de contexto para validar prevenção de alucinações Validação com testes automatizados checando resposta padronizada de incerteza Média

⚙️ Requisitos Funcionais (RF)

ID Descrição do Requisito Criticidade
RF-01 Pipeline de ingestão de documentos texto e particionamento em chunks Alta
RF-02 Módulo de geração de embeddings vetoriais com normalização L2 Alta
RF-03 Mecanismo de busca vetorial Top-K por similaridade de cosseno Alta
RF-04 Montador de prompts aumentados por recuperação (RAG) com streaming Alta
RF-05 Suíte de testes de precisão e recuperação (Recall/Precision) Média

🛡️ Requisitos Não-Funcionais (RNF)

ID Especificação Arquitetural Criticidade
RNF-01 Tempo de recuperação semântica inferior a 150ms para 1.000 chunks Alta
RNF-02 Tolerância a falhas na API de LLM com retries exponenciais Alta
RNF-03 Configuração modular de chaves e endpoints via variáveis de ambiente Média
RNF-04 Código desacoplado facilitando troca de provedores de embeddings Média
RNF-05 Isolamento dos fontes na pasta ai-python/ Alta

🔗 Matriz de Rastreabilidade (RTM)

User Story Requisito Funcional Requisito Não-Funcional Módulo / Artefato de Código Status de Homologação
US-01 RF-01 RNF-01, RNF-04 ai-python/rag_pipeline.py Testado
US-02 RF-02 RNF-01, RNF-03 ai-python/rag_pipeline.py Testado
US-03 RF-03 RNF-01, RNF-02 ai-python/rag_pipeline.py Testado
US-04 RF-04 RNF-02, RNF-04 ai-python/rag_pipeline.py Testado
US-05 RF-05 RNF-02, RNF-05 ai-python/rag_pipeline.py Testado

🏁 Checkpoints de Qualidade & Homologação

Checkpoint Escopo da Validação Artefato Verificado Status
CP-01 Inicialização & Estrutura de Pastas ai-python/ PASS ✅
CP-02 Modelagem de Domínio & Regras Centrais Domain Models PASS ✅
CP-03 Persistência & Operações de I/O Storage / Data PASS ✅
CP-04 Interface de Operação & Usabilidade CLI / GUI / API PASS ✅
CP-05 Homologação com Suíte de Testes Test Suite PASS ✅