2

Bom tema. Acho que muita integração com LLM quebra exatamente nesse ponto: o sistema começa tratando a resposta como texto, mas depois precisa fingir que aquilo era uma interface estável.

Uma coisa que eu costumo separar é “formato válido” de “ação segura”. Mesmo quando o modelo devolve JSON perfeito, ainda falta validar se a função existe, se os parâmetros fazem sentido para aquele usuário e se a ação pode ser executada naquele estado do sistema. Senão a gente só troca regex frágil por JSON frágil.

Também acho útil tratar a resposta estruturada como uma sugestão de intenção, não como comando direto. O código determinístico ainda deveria decidir se executa, rejeita ou pede confirmação.

Você chegou a comparar JSON por prompt com function/tool calling nativo dos provedores?

Carregando publicação patrocinada...
1

Minha maior experiência foi com os modelos Deepseek sem usar o Tool Calling nativo nem JSON Mode, só prompt básico + Prefix filling.

Eu praticamente não tive problemas em gerar JSONs válidos com esse setup, o que é bem interessante, mas o modelo ainda gerava chamadas inválidas (ferramentas que não existem, parâmetros errados, etc), então os 'fluxos de exceção' eram indispensáveis.

Do pouco que testei, o Tool Calling nativo do Deepseek me pareceu mais robusto, sofrendo menos com esses problemas, mas não fiz comparações muito profundas.

Eu gosto dessa visão que tu comentou de tratar o output do modelo como 'intenção', já que nem sempre aquelas requisições poderão ser executadas. Pra mim, programar integrações com esses LLMs é que nem expor um sistema pra um usuário humano normal (que gosta de quebrar as coisas e apertar botões que não deve) só que 100x mais criativo 😅