📚 Pré-requisitos Teóricos: este projeto aplica conceitos ensinados em Guia de Inteligência Artificial. Recomendado revisar antes de começar.
v1.0 — Inteligência Artificial, Retrieval-Augmented Generation, Vector DBs e LangChain
Trilha de Especialização Pedagógica — Projeto 1 de 4
- ➡️ v1 (este): Pipeline RAG · Vector DB (Chroma) · Embeddings · Injeção Contextual
- v2: Agente Autônomo com Function Calling & Tool Use
- v3: Fine-Tuning de LLMs com LoRA / QLoRA
- v4: Sistema de Avaliação de IA com RAGAS & Guardrails de Segurança
🎓 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.
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.
“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.”
| 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 |
| 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 |
# Branch da funcionalidade
git checkout -b feature/US01-rag-pipeline-embeddings
# Executar o pipeline RAG
python rag_pipeline.py
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])
No seu editor/IDE, abra a pasta deste projeto (File > Open Folder) ou navegue via terminal:
cd ia_01_rag_embeddings_llm
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`
A visualização arquitetural abaixo detalha a separação de responsabilidades e o fluxo de dados implementado na subpasta ai-python/:
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
| 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 |
| 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 |
| 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 |
| 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 |
| 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 ✅ |