You Don’t Need That Design Pattern
Padrões de design desnecessários podem estar atrapalhando seu código.
Conteudo
TLDR;
Padrões valem a pena quando você precisa gerenciar variação e complexidade reais, mas devem ser evitados quando só adicionam custo e complexidade desnecessária a variações pequenas. Simplifique substituindo a hierarquia de classes por funções que constroem prompts e por um dicionário que mapeia estilos para essas funções, tornando a função de sumarização mais curta e clara. Faz sentido introduzir uma abstração (classe/protocolo) para o cliente de LLM que exponha gerar, contagem de tokens e limite de contexto, para lidar com provedores diferentes e normalizar respostas.
Resumo
O vídeo descreve um script Python que resume textos usando um LLM e discute escolhas de design: a implementação original usava um padrão Strategy com classes abstratas (PromptStrategy, ConcisePromptStrategy, BulletPromptStrategy) e uma fábrica para criar prompts, mas isso introduzia complexidade desnecessária para poucas variações; o autor demonstra que, em muitos casos, é mais simples e igualmente eficaz usar funções (funções construtoras de prompt) armazenadas em um dicionário como fábrica leve, e uma função build_prompt que escolhe e aplica a estratégia, o que reduz código, melhora legibilidade e facilita testes. No entanto, ele aponta que nem toda simplificação é adequada: a interação com o LLM tende a ser complexa (SDKs distintos, formatos de resposta, contagem de tokens, limites de contexto), então faz sentido introduzir uma abstração para o cliente do LLM. Propõe um protocolo/LLMClient com métodos como generate(prompt) e propriedades úteis (contagem de tokens, max_context_window) para normalizar respostas e encapsular detalhes de provedores; assim, a lógica de sumarização permanece independente do provedor. Por fim, sugere implementar clientes concretos (ou um fake client para testes) que satisfaçam esse protocolo, combinando simplicidade nas estratégias de prompt com abstração adequada para o LLM.