- impede que mensagens como 'Liste os meus pedidos' sejam consumidas pelo atalho de order_create quando ainda existe draft de compra aberto - corrige o reaproveitamento indevido da ultima falha de credito em fluxos de vendas ativos, permitindo que a listagem siga para o handler correto - adiciona regressao cobrindo o cenario de order_list com pending_order_drafts para evitar que a resposta fique presa no erro anterior |
4 weeks ago | |
|---|---|---|
| app | 4 weeks ago | |
| deploy/systemd | 4 weeks ago | |
| scripts | 4 weeks ago | |
| tests | 4 weeks ago | |
| .dockerignore | 2 months ago | |
| .env.example | 4 weeks ago | |
| .gitignore | 2 months ago | |
| DEPLOY_SERVIDOR.md | 4 weeks ago | |
| Dockerfile | 4 weeks ago | |
| README.md | 4 weeks ago | |
| TEST_CASES.md | 4 weeks ago | |
| docker-compose.yml | 4 weeks ago | |
| requirements.txt | 1 month ago | |
| test-local.sh | 2 months ago | |
README.md
AI Orquestrador
Orquestrador conversacional para concessionaria, focado em combinar:
- interpretacao semantica via Vertex AI
- execucao deterministica de tools de negocio
- normalizacao tecnica na aplicacao
- atendimento pelo Telegram como canal principal
Proposta
A ideia central do sistema e:
- o usuario conversa em linguagem natural
- o modelo entende intencao, contexto e proximo passo
- a aplicacao normaliza dados, protege regras e executa tools
- a resposta final volta para o usuario pelo canal de atendimento
Hoje o projeto esta mais proximo de um orquestrador conversacional do que de uma API tradicional. O FastAPI continua no repositorio como apoio legado/bootstrap, mas o fluxo operacional principal e o satelite do Telegram.
Estado Atual
O dominio atual cobre dois grupos principais:
- vendas
- revisao e pos-venda
Capacidades ja implementadas:
- consultar estoque de veiculos
- validar cliente para compra
- avaliar veiculo para troca
- criar pedido
- listar pedidos
- cancelar pedido
- agendar revisao
- listar revisoes
- cancelar revisao
- remarcar revisao
Capacidades conversacionais ja tratadas:
- multiplos pedidos na mesma mensagem
- fila de pedidos
- troca de contexto entre dominios
- coleta incremental de campos
- reaproveitamento de contexto temporario
- confirmacao antes de mudar de assunto
- sugestao de horario alternativo em conflito de agenda
Arquitetura Atual
| Componente | Tecnologia | Papel atual |
|---|---|---|
| LLM | Vertex AI / Gemini | interpretacao e apoio a decisao |
| Orquestracao | Python | coordena contexto, fluxo e tools |
| Metadados de tools | MySQL | catalogo das tools disponiveis |
| Dados mock de negocio | MySQL | veiculos, clientes, usuarios, pedidos e revisoes |
| Estado conversacional | Redis ou memoria | rascunhos, fila e contexto temporario |
| Canal | Telegram Bot API | atendimento principal via long polling |
| Containerizacao | Docker Compose | ambiente local e deploy simples |
Fluxo Principal
Fluxo principal do atendimento pelo Telegram:
- O usuario envia uma mensagem ao bot.
- O
TelegramSatelliteServiceidentifica ou cria o usuario interno. - O
OrquestradorServicerecupera o contexto conversacional. - O
MessagePlannere o Vertex ajudam a estruturar a intencao do turno. - A aplicacao continua fluxos abertos ou decide a proxima tool.
- A tool e executada com validacoes e normalizacoes deterministicas.
- O sistema devolve a resposta ao usuario no Telegram.
Importante:
- o historico completo da conversa ainda nao e persistido como trilha audivel;
- o estado de trabalho pode ficar em memoria ou Redis;
- em producao, Redis e o backend recomendado para continuidade real.
Estrutura do Projeto
app/
main.py
api/
schemas.py
core/
settings.py
db/
database.py
mock_database.py
init_db.py
tool_seed.py
mock_seed.py
models/
tool.py
integrations/
telegram_satellite_service.py
models/
tool_model.py
repositories/
tool_repository.py
user_repository.py
services/
ai/
llm_service.py
domain/
credit_service.py
inventory_service.py
order_service.py
review_service.py
flows/
order_flow.py
review_flow.py
orchestration/
conversation_policy.py
conversation_state_repository.py
conversation_state_store.py
entity_normalizer.py
message_planner.py
orquestrador_service.py
prompt_builders.py
redis_state_repository.py
response_formatter.py
tool_executor.py
turn_decision.py
tools/
handlers.py
tool_registry.py
user/
mock_customer_service.py
user_service.py
tests/
...
Tools Disponiveis
As definicoes padrao ficam em app/db/tool_seed.py:
| Tool | Finalidade |
|---|---|
consultar_estoque |
consulta veiculos por preco, categoria e ordenacao |
validar_cliente_venda |
valida elegibilidade de compra por CPF e valor |
avaliar_veiculo_troca |
estima valor de troca do veiculo do cliente |
agendar_revisao |
agenda revisao com calculo de valor |
listar_agendamentos_revisao |
lista revisoes do usuario |
cancelar_agendamento_revisao |
cancela revisao por protocolo |
editar_data_revisao |
remarca revisao existente |
realizar_pedido |
cria pedido de compra |
listar_pedidos |
lista pedidos do usuario |
cancelar_pedido |
cancela pedido existente |
limpar_contexto_conversa |
zera contexto e fila |
continuar_proximo_pedido |
retoma o proximo item da fila |
descartar_pedidos_pendentes |
limpa apenas a fila pendente |
cancelar_fluxo_atual |
encerra apenas o fluxo atual |
Banco e Bootstrap
O projeto usa duas conexoes MySQL:
- banco de tools
- banco mock de negocio
O bootstrap atual cria tabelas e executa seed por meio de:
Esse bootstrap e usado no container e pode ser executado manualmente antes do servico principal.
Execucao Local
Sem Docker
- Configure as variaveis de ambiente com base em
.env.example. - Inicialize banco e seed:
python -m app.db.init_db
- Inicie o satelite do Telegram:
python -m app.integrations.telegram_satellite_service
Com Docker Compose
O compose atual sobe:
mysqlredistelegram
Subida completa:
docker compose up --build
Somente infraestrutura:
docker compose up mysql redis
Variaveis de Ambiente
Principais variaveis:
Vertex AI
GOOGLE_PROJECT_IDGOOGLE_LOCATIONVERTEX_MODEL_NAME
Banco de tools
DB_HOSTDB_PORTDB_USERDB_PASSWORDDB_NAMEDB_CLOUD_SQL_CONNECTION_NAME
Banco mock
MOCK_DB_HOSTMOCK_DB_PORTMOCK_DB_USERMOCK_DB_PASSWORDMOCK_DB_NAMEMOCK_DB_CLOUD_SQL_CONNECTION_NAMEMOCK_SEED_ENABLEDAUTO_SEED_TOOLSAUTO_SEED_MOCK
Telegram
TELEGRAM_BOT_TOKENTELEGRAM_POLLING_TIMEOUTTELEGRAM_REQUEST_TIMEOUT
Estado conversacional
CONVERSATION_STATE_BACKEND(memoryouredis)CONVERSATION_STATE_TTL_MINUTESREDIS_URLREDIS_KEY_PREFIXREDIS_SOCKET_TIMEOUT_SECONDS
Ambiente
ENVIRONMENTDEBUG
Observacao:
- para producao com Telegram, prefira
CONVERSATION_STATE_BACKEND=redis; - evite valores nao booleanos em
DEBUG.
Docker
O Dockerfile hoje sobe o servico principal do projeto:
python -m app.db.init_db && python -m app.integrations.telegram_satellite_service
Isso deixa o container alinhado com o uso atual do sistema, sem assumir FastAPI como interface principal.
Testes
Suite automatizada atual:
python -m unittest discover -s tests -v
Se o ambiente local tiver DEBUG com valor invalido, force antes da execucao:
DEBUG=false python -m unittest discover -s tests -v
Arquivos Uteis
Proximos Passos Naturais
Os proximos ganhos mais valiosos para o projeto sao:
- persistir trilha de conversa e decisoes
- desacoplar bootstrap de banco do startup da aplicacao
- aumentar observabilidade por turno e por tool
- reduzir o tamanho do
OrquestradorService - consolidar documentacao operacional Telegram-first