Um agente de vendas autônomo baseado em IA que analisa mensagens de prospects, utiliza conhecimento externo e decide sobre as melhores respostas e ações internas. Este projeto demonstra orquestração avançada de LLM, engenharia de prompts sofisticada e uma estratégia robusta de avaliação.
- 🎯 Visão Geral
- 🏗️ Arquitetura
- 🚀 Quick Start
- ⚙️ Configuração Detalhada
- 📡 API Endpoints
- 🧪 Testes
- 📊 Monitoramento
- 🔧 Desenvolvimento
- 📈 Avaliação e Métricas
- 🧠 Orquestração Inteligente de LLM: Análise contextual de mensagens, reconhecimento de intenções e síntese de respostas
- 🔧 Sistema de Ferramentas:
KnowledgeAugmentationToolcom capacidades de CRM e RAG - 📚 Pipeline RAG: Busca semântica em base de conhecimento de produtos e playbooks de vendas
- 📊 Monitoramento Completo: Dashboard profissional com métricas de performance do LLM
- 🧪 Framework de Avaliação: Métricas offline e online para melhoria contínua
- Backend: FastAPI, Python 3.11+
- LLM: OpenAI GPT-4o-mini com function calling
- Vector DB: FAISS para busca semântica
- Embeddings: SentenceTransformers (all-MiniLM-L6-v2)
- Monitoramento: Prometheus + Grafana
- Testes: pytest (251 testes unitários, 100% sucesso)
- Containerização: Docker + Docker Compose
┌─────────────────────────────────────────────────────────────┐
│ API Layer (FastAPI) │
├─────────────────────────────────────────────────────────────┤
│ Service Layer │
│ ┌─────────────────┐ ┌─────────────────┐ ┌──────────────┐ │
│ │ OrchestratorSvc │ │ EvaluationSvc │ │ MemoryService│ │
│ └─────────────────┘ └─────────────────┘ └──────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ Adapter Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ LLM Client │ │ RAG Client │ │ KnowledgeAugTool │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ Infrastructure Layer │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ Logging │ │ Monitoring │ │ Observability │ │
│ └─────────────┘ └─────────────┘ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
- Análise Inicial: Extração de intenção, entidades e sentimento
- Decisão de Ferramentas: LLM decide quais ferramentas usar
- Execução de Ferramentas: CRM lookup e/ou busca RAG
- Síntese: Geração de resposta estruturada com ações internas
- Python 3.11+
- Docker e Docker Compose
- Git
# 1. Clone o repositório
git clone https://github.com/seu-usuario/AI-Sales-Agent.git
cd AI-Sales-Agent
# 2. Configure as variáveis de ambiente
cp .env.example .env
# Edite .env com suas configurações
# 3. Execute com Docker
docker-compose up -d
# 4. Acesse a aplicação
# API: http://localhost:8000
# Docs: http://localhost:8000/docs
# Monitoring: http://localhost:3000 (admin/admin123)# Teste o endpoint principal
curl -X POST "http://localhost:8000/api/process_message" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer seu-token" \
-d '{
"conversation_history": [
{"sender": "prospect", "content": "Olá, gostaria de saber sobre seus planos", "timestamp": "2024-01-15T10:00:00Z"}
],
"current_prospect_message": "Qual é o preço do plano profissional?",
"prospect_id": "prospect-123"
}'# 1. Clone e setup
git clone https://github.com/seu-usuario/AI-Sales-Agent.git
cd AI-Sales-Agent
# 2. Ambiente virtual
python -m venv venv
source venv/bin/activate # Linux/Mac
# venv\Scripts\activate # Windows
# 3. Dependências
pip install -r requirements.txt
# 4. Configuração
cp .env.example .env
# Configure suas variáveis no .env
# 5. Preparar dados
python scripts/setup_embeddings.py
# 6. Executar
uvicorn app.main:app --reload# Desenvolvimento
docker-compose -f docker-compose.dev.yml up -d
# Produção
docker-compose up -d
# Apenas monitoramento
cd monitoring && docker-compose up -dVeja .env.example para todas as configurações disponíveis.
Variáveis Obrigatórias:
OPENAI_API_KEY: Sua chave da OpenAIJWT_SECRET_KEY: Chave secreta para JWTENVIRONMENT: development/production
| Endpoint | Método | Descrição |
|---|---|---|
/api/process_message |
POST | Principal: Processa mensagem do prospect |
/health |
GET | Health check da aplicação |
/metrics |
GET | Métricas do Prometheus |
| Endpoint | Método | Descrição |
|---|---|---|
/api/metrics/kpis |
GET | KPIs do sistema |
/api/metrics/generate_sample_data |
GET | Público: Gera dados para dashboard |
/api/metrics/user_feedback |
POST | Submete feedback do usuário |
/api/metrics/evaluate_prompts |
POST | Compara variações de prompts |
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
- OpenAPI JSON: http://localhost:8000/openapi.json
# Executar todos os testes
pytest
# Com output limpo
pytest -q
# Com output detalhado
pytest -v
# Com coverage
pytest --cov=app
# Com coverage detalhada + HTML
pytest --cov=app --cov-report=htmltests/
├── adapters/ # Testes dos adapters (83 testes)
├── core/ # Testes dos services (126 testes)
├── infrastructure/ # Testes de infraestrutura (42 testes)
└── __init__.py # Configurações básicas
Resultado: ✅ 251 testes passando, 100% sucesso, ~14.5s execução
# Apenas Core Services
pytest tests/core/
# Apenas Adapters
pytest tests/adapters/
# Apenas Infrastructure
pytest tests/infrastructure/
# Parar no primeiro erro
pytest -x
# Executar apenas testes que falharam
pytest --lf# Ver estatísticas sem executar
pytest --collect-only -q
# Executar testes específicos por nome
pytest -k "test_openai"
# Com cobertura mínima obrigatória
pytest --cov=app --cov-fail-under=80Acesse: http://localhost:3000 (admin/admin123)
Métricas Disponíveis:
- 🧠 Performance Score do LLM (78.5%)
- 🎯 Confidence Score (P95: 79%)
- ⚡ Tempo de Resposta (P95: 2.3s)
- 📩 Taxa de Mensagens (req/s)
- ⚙️ Ações Internas (UPDATE_CRM, SCHEDULE_FOLLOW_UP)
- 🛠️ Performance de Ferramentas (CRM: 100%, RAG: 87%)
# Popular todas as métricas
cd monitoring
python generate_test_metrics.py
# Ou via API
curl http://localhost:8000/api/metrics/generate_sample_data- URL: http://localhost:9090
- Targets: http://localhost:9090/targets
- Config: monitoring/prometheus/prometheus.yml
app/
├── api/ # Camada de API
│ ├── dependencies/ # Dependências (auth, etc.)
│ ├── models/ # Modelos Pydantic
│ └── routes/ # Rotas da API
├── core/ # Lógica de negócio
│ ├── models/ # Modelos de domínio
│ ├── services/ # Serviços principais
│ └── tools/ # KnowledgeAugmentationTool
├── adapters/ # Integrações externas
│ ├── llm/ # Cliente OpenAI
│ ├── rag/ # Pipeline RAG
│ └── crm/ # Mock CRM
├── infrastructure/ # Infraestrutura
│ ├── logging/ # Sistema de logs
│ └── observability/ # Métricas e monitoring
└── data/ # Dados estáticos
├── knowledge_base/ # Documentos para RAG
├── golden_set.json # Dataset de avaliação
└── crm_mock.json # Dados mock do CRM
- Strategy Pattern: Diferentes estratégias de análise
- Factory Pattern: Criação de ferramentas
- Repository Pattern: Acesso a dados
- Dependency Injection: Inversão de controle
- Nova Ferramenta: Implemente
BaseToolemapp/core/tools/ - Novo Serviço: Adicione em
app/core/services/ - Nova Rota: Crie em
app/api/routes/ - Testes: Sempre adicione testes correspondentes
Localização: app/data/golden_set.json
Estrutura:
- 20 exemplos de conversas diversas
- Ground truth para cada exemplo
- Métricas esperadas definidas
- Intent Classification: F1 Score
- Entity Extraction: Precision/Recall
- Response Quality: ROUGE, BLEU, Semantic Similarity
- Tool Usage: Precision para decisões de tool calling
- LLM Performance Score: Métrica composta (0-1)
- Confidence Score: Média dos confidence scores
- Human Review Rate: % de casos flagged para revisão
- Tool Success Rate: % de chamadas de ferramenta bem-sucedidas
- Response Time: Latência P95
# Comparar variações de prompts
curl -X POST "http://localhost:8000/api/metrics/evaluate_prompts" \
-H "Content-Type: application/json" \
-d '{
"variation1": {"name": "Prompt A", "responses": [...]},
"variation2": {"name": "Prompt B", "responses": [...]}
}'- Performance Score: >75% (Atual: 78.5%)
- Confidence Score: >70% (Atual: 79%)
- Human Review Rate: <20% (Atual: 15%)
- Tool Success Rate: >85% (Atual: 87%)
- Response Time P95: <5s (Atual: 2.3s)
- Fork o projeto
- Crie uma branch (
git checkout -b feature/nova-funcionalidade) - Commit suas mudanças (
git commit -am 'Adiciona nova funcionalidade') - Push para a branch (
git push origin feature/nova-funcionalidade) - Abra um Pull Request
Este projeto está sob a licença Apache 2.0. Veja o arquivo LICENSE para detalhes.
Desenvolvedor: Lucas Gabriel
Email: lucasgabriel.vr@gmail.com
LinkedIn: linkedin
🎯 Desafio Técnico - Backend/AI Engineer
Desenvolvido para demonstrar expertise em LLM Orchestration, System Design e AI Evaluation