Skip to content

📊 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_results e 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

  1. Teste Local:

    ./test_new_slack_bot.sh
    

  2. Teste com ngrok:

    ngrok http 8080
    # Configure URL no Slack: https://YOUR_NGROK.ngrok.io/slack/events
    

  3. Deploy no Cloud Run (se tudo ok):

  4. Atualizar cloudbuild.slack.yaml para usar new_slack_bot.py
  5. Deploy com gcloud builds submit

  6. Monitorar:

  7. Verificar se loops ainda acontecem
  8. Comparar performance
  9. 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! 🎉