📊 Comparação: slack_bot.py vs new_slack_bot.py¶
🎯 Filosofia¶
slack_bot.py (Atual)¶
- ✅ Controle manual total do fluxo do agent
- ❌ Complexidade alta: gerenciamento manual de loops, timeouts, resultados parciais
- ❌ 500+ linhas de código de controle
- ⚠️ Risco: Lógica duplicada com o que ADK já faz
new_slack_bot.py (Novo)¶
- ✅ Delega ao ADK Runner: confia no framework
- ✅ Simplicidade: ~360 linhas (40% menor)
- ✅ Manutenibilidade: menos código = menos bugs
- ✅ Filosofia ADK: "o framework gerencia, você só consome"
🔄 Principais Diferenças¶
1. Processamento de Eventos¶
slack_bot.py (Manual):
# ❌ Gerenciamento manual complexo
async def run_with_timeout():
partial_results = []
tool_call_history = []
max_identical_calls = 3
max_total_calls = 20
async for ev in runner.run_async(...):
# 100+ linhas de lógica de controle
# Detectar loops, coletar parciais, timeouts...
if identical_count >= max_identical_calls:
break
if len(tool_call_history) > max_total_calls:
break
new_slack_bot.py (Delegado):
# ✅ Simples e direto
async for event in runner.run_async(...):
# Atualiza status visual
if event.content and hasattr(event.content, 'parts'):
# Feedback de tools
if event.is_final_response():
# Pega resposta final
break
2. Tratamento de Erros¶
slack_bot.py: - ❌ Try/except gigante com múltiplas condições - ❌ Lógica de fallback complexa (partial_results) - ❌ Timeout manual (180s) com asyncio.wait_for
new_slack_bot.py: - ✅ Try/except simples - ✅ Confia no Runner para gerenciar timeouts - ✅ Mensagens de erro limpas
3. Status Updates¶
slack_bot.py:
# ❌ Lógica embutida no loop principal
async def update_status(emoji, message, force=False):
# Rate limiting manual
# Lógica de emojis contextuais
# Tudo no meio do processamento
new_slack_bot.py:
# ✅ Integrado naturalmente no loop de eventos
if hasattr(part, 'function_call'):
emoji = "🔍" if 'search' in tool_name else "⚙️"
await client.chat_update(...)
4. Session Management¶
AMBOS IGUAIS: - ✅ CloudSQL Session Service (TTL 60min) - ✅ CloudSQL Memory Service (permanente) - ✅ Callback auto-save após cada interação - ✅ Suporte a Unix Socket para Cloud Run/GKE
📈 Vantagens do new_slack_bot.py¶
1. Menos Código = Menos Bugs¶
- 360 linhas vs 551 linhas (35% menor)
- Menos superfície de ataque para bugs
- Mais fácil de entender e manter
2. Confia no Framework¶
- ADK Runner já tem proteções internas
- Não re-inventa a roda
- Futuras melhorias do ADK são automáticas
3. Mais Legível¶
# ✅ Fácil de entender
async for event in runner.run_async(...):
if event.is_final_response():
final_response_text = extract_text(event)
vs
# ❌ Complexo de entender
async def run_with_timeout():
nonlocal reply_text, iteration_count, tool_call_history, partial_results
# ... 100+ linhas ...
4. Alinhado com Best Practices¶
- Google recomenda: "Use o Runner, não gerencia manualmente"
- Menos acoplamento com internals do ADK
- Mais resiliente a mudanças de API
⚠️ Possíveis Desvantagens do new_slack_bot.py¶
1. Menos Controle sobre Loops¶
- slack_bot.py: Detecta e quebra loops manualmente
- new_slack_bot.py: Confia no Runner para gerenciar
Mitigação: ADK Runner já tem proteções internas contra loops infinitos
2. Sem Resultados Parciais em Timeout¶
- slack_bot.py: Coleta
partial_resultse retorna mesmo com timeout - new_slack_bot.py: Se timeout, perde os resultados parciais
Mitigação: Timeout deveria ser raro se o agent estiver bem configurado
3. Menos Visibilidade de Debug¶
- slack_bot.py: Logs detalhados de cada tool call, hash de params, etc.
- new_slack_bot.py: Menos logs detalhados
Mitigação: enable_run_logs=True no Runner já fornece logs
🎯 Recomendação¶
Usar new_slack_bot.py se:¶
- ✅ Quer código mais simples e manutenível
- ✅ Confia no ADK Runner para gerenciar complexidade
- ✅ Prefere seguir as best practices do framework
- ✅ Quer menos código para debugar
Manter slack_bot.py se:¶
- ⚠️ Precisa de controle total sobre loops (paranoia)
- ⚠️ Quer coletar resultados parciais em timeouts
- ⚠️ Precisa de logs super detalhados
🚀 Próximos Passos¶
-
Teste Local:
./test_new_slack_bot.sh -
Teste com ngrok:
ngrok http 8080 # Configure URL no Slack: https://YOUR_NGROK.ngrok.io/slack/events -
Deploy no Cloud Run (se tudo ok):
- Atualizar
cloudbuild.slack.yamlpara usarnew_slack_bot.py -
Deploy com
gcloud builds submit -
Monitorar:
- Verificar se loops ainda acontecem
- Comparar performance
- Validar se memória e sessão funcionam igual
📝 Conclusão¶
O new_slack_bot.py é uma versão mais simples, limpa e alinhada com best practices do Google ADK.
A filosofia é: "Deixe o framework fazer o trabalho pesado, você só consome os eventos".
Se funcionar bem nos testes, é a versão recomendada para produção! 🎉