Sistema de atendimento bancário com interface web e API backend.
- Autenticação por CPF e data de nascimento
- Consulta de limite de crédito
- Solicitação de aumento de limite
- Cotação de moedas
- Entrevista para atualização de score
python app.pystreamlit run src/ui/streamlit_app_agent.pyPOST /triage/authenticate- AutenticaçãoGET /credit/limit- Consulta limitePOST /credit/request_increase- Solicitação de aumentoGET /exchange- Cotação de moedasPOST /interview/submit- Entrevista financeira
| CPF | Data Nascimento | Score |
|---|---|---|
| 12345678901 | 15/05/1990 | 750 |
| 98765432100 | 22/03/1985 | 600 |
| 11122233344 | 08/11/1992 | 850 |
- Python 3.11+
- pip (gerenciador de pacotes)
# 1. Clone o repositorio
git clone <url-do-repositorio>
cd IA-Agent-Tech-For-Humans-Back-end
# 2. Crie um ambiente virtual (recomendado)
python -m venv venv
# Windows
.\venv\Scripts\activate
# Linux/Mac
source venv/bin/activate
# 3. Instale as dependencias
pip install -r requirements.txt
# 4. Configure o ambiente
cp .env.example .env
# Edite o .env se necessario (valores padrao funcionam)# Execute a interface de chat
streamlit run src/ui/streamlit_app.pyA interface estara disponivel em: http://localhost:8501
# Execute o servidor FastAPI
python app.pyA API estara disponivel em: http://localhost:8000 Documentacao automatica: http://localhost:8000/docs
# Build da imagem
docker build -t agente-bancario .
# Executar container
docker run -p 8000:8000 agente-bancario| CPF | Nome | Data Nascimento | Score |
|---|---|---|---|
| 12345678901 | Maria Silva | 15/05/1990 | 750 |
| 98765432100 | Joao Santos | 22/03/1985 | 600 |
| 11122233344 | Ana Oliveira | 08/11/1992 | 850 |
| 55566677788 | Carlos Souza | 30/07/1978 | 450 |
| 99988877766 | Beatriz Lima | 12/01/1995 | 300 |
- Acesse http://localhost:8501
- Digite o CPF:
12345678901 - Digite a data de nascimento:
15/05/1990 - Apos autenticacao, escolha uma opcao:
1- Consultar limite de credito2- Solicitar aumento de limite3- Consultar cotacao de moedas4- Encerrar atendimento
# Rodar todos os testes
pytest
# Com cobertura de codigo
pytest --cov=src --cov-report=html
# Testes especificos
pytest tests/test_triagem.py -v
pytest tests/test_credito.py -v
pytest tests/test_entrevista.py -v
pytest tests/test_cambio.py -vDesafio: Streamlit e preciso chamar funcoes async do backend.
Solucao: Uso de asyncio.run() para executar coroutines no contexto sincrono do Streamlit.
Desafio: Multiplas requisicoes podem modificar CSVs simultaneamente.
Solucao: Implementacao de FileLock para garantir acesso exclusivo aos arquivos.
Desafio: Sistema precisa funcionar mesmo sem API de LLM. Solucao: Fallback para classificacao baseada em keywords quando LLM indisponivel.
Desafio: CPF pode vir com ou sem formatacao. Solucao: Normalizacao automatica removendo pontos e tracos.
Desafio: Usuario nao deve perceber troca de agentes. Solucao: Maquina de estados no Streamlit com transicoes implicitas.
- Framework moderno e rapido para APIs Python
- Suporte nativo a async/await
- Documentacao automatica via OpenAPI
- Validacao de dados com Pydantic
- Simplicidade para criar interfaces de chat
- Gerenciamento de estado de sessao
- Atualizacao reativa da interface
- Simplicidade para MVP
- Facilidade de inspecao e debug
- Atende requisitos do desafio (clientes.csv, score_limite.csv)
- Padrao da industria
- Stateless (nao requer sessao no servidor)
- Expiracao configuravel
- Facilita integracao com diferentes LLMs
- Fallback para regras quando indisponivel
- Configuravel via variavel de ambiente
IA-Agent-Tech-For-Humans-Back-end/
├── app.py # Ponto de entrada da API
├── requirements.txt # Dependencias Python
├── pyproject.toml # Configuracao do projeto
├── Dockerfile # Container Docker
├── .env.example # Template de variaveis de ambiente
├── src/
│ ├── main.py # Configuracao FastAPI
│ ├── config.py # Gerenciamento de configuracoes
│ ├── api/
│ │ └── routes.py # Endpoints da API
│ ├── agents/
│ │ ├── triagem.py # Agente de Triagem
│ │ ├── credito.py # Agente de Credito
│ │ ├── entrevista.py # Agente de Entrevista
│ │ └── cambio.py # Agente de Cambio
│ ├── services/
│ │ ├── auth_service.py # Servico de autenticacao JWT
│ │ ├── csv_service.py # Persistencia em CSV
│ │ ├── llm_service.py # Integracao com LLM
│ │ └── score_service.py # Calculo de score
│ ├── models/
│ │ ├── domain.py # Modelos de dominio
│ │ └── schemas.py # Schemas Pydantic
│ ├── utils/
│ │ ├── exceptions.py # Excecoes customizadas
│ │ └── logging_config.py # Configuracao de logs
│ ├── ui/
│ │ └── streamlit_app.py # Interface Streamlit
│ └── data/
│ ├── clientes.csv # Base de clientes
│ ├── score_limite.csv # Tabela score x limite
│ └── solicitacoes_aumento_limite.csv # Solicitacoes registradas
└── tests/
├── conftest.py # Fixtures de teste
├── test_triagem.py # Testes do agente de triagem
├── test_credito.py # Testes do agente de credito
├── test_entrevista.py # Testes do agente de entrevista
└── test_cambio.py # Testes do agente de cambio
| Variavel | Descricao | Padrao |
|---|---|---|
JWT_SECRET_KEY |
Chave secreta para JWT | dev-secret-key... |
JWT_EXPIRATION_MINUTES |
Tempo de expiracao do token | 15 |
USE_LANGCHAIN |
Ativar deteccao de intencao via LLM | false |
LLM_PROVIDER |
Provedor LLM (openai/anthropic) | openai |
OPENAI_API_KEY |
Chave API OpenAI | - |
ANTHROPIC_API_KEY |
Chave API Anthropic | - |
EXCHANGE_API_URL |
URL da API de cambio | https://api.exchangerate-api.com/v4/latest |
DATA_DIR |
Diretorio dos arquivos CSV | src/data |
LOG_LEVEL |
Nivel de log | INFO |
MIT License