Marcio Cunha

Como implementar function calling seguro em Python com Pydantic

Aprenda a mitigar alucinações de LLMs em chamadas de ferramentas utilizando validação estrita com Pydantic, tratamento de exceções e sandboxing.

Marcio Cunha•5 min
Também disponível em:EnglishEspañol
Resumo
  • Modelos de linguagem frequentemente inventam argumentos ao chamar funções externas se não houver tipagem rígida
  • Pydantic atua como uma barreira intransigente que rejeita dados inválidos antes de executarem no sistema
  • O tratamento de erros permite que a IA receba feedback claro e corrija os parâmetros automaticamente
  • Isolar a execução em ambientes restritos evita que comandos maliciosos comprometam o servidor principal
  • A combinação de validação e isolamento garante sistemas autônomos corporativos robustos e confiáveis

Por que chamadas de ferramentas por inteligência artificial falham

Quando conectamos um modelo de linguagem a APIs ou bancos de dados através de chamadas de funções, entramos em um terreno fascinante, mas perigoso. A inteligência artificial, por mais avançada que seja, opera gerando tokens estatísticos e não compreende estritamente regras de programação estruturada. Na prática, isso significa que a IA pode inventar campos, enviar strings vazias onde números são obrigatórios ou injetar comandos maliciosos caso receba instruções confusas de usuários mal-intencionados. Para evitar que seu sistema execute operações catastróficas, precisamos de uma camada defensiva robusta logo na fronteira entre o modelo e o código.

Mitigar essas falhas exige abandonar a esperança de que o modelo gerará JSONs perfeitos por conta própria. Historicamente, desenvolvedores tentavam resolver isso com expressões regulares frágeis ou blocos extensos de instruções em texto, conhecidos como engenharia de prompt. No entanto, prompts não oferecem garantias matemáticas. Se o modelo decidir que um parâmetro de data deve vir em um formato totalmente inédito, seu backend quebra. É exatamente nesse cenário crítico que entra a necessidade de validação estrita de esquemas, transformando dados soltos em contratos rígidos de software.

Validando parâmetros de IA com Pydantic na prática

O Pydantic é uma biblioteca em Python extremamente popular que utiliza dicas de tipos nativas da linguagem para validar dados em tempo de execução. Quando combinamos o Pydantic com recursos modernos de provedores de IA, conseguimos forçar o modelo a estruturar suas saídas exatamente no formato que nossa aplicação espera. Antes de executar qualquer lógica de negócio, a biblioteca analisa cada argumento enviado pelo modelo. Se houver divergência, uma exceção detalhada é gerada imediatamente, impedindo que dados corrompidos avancem no fluxo.

Para entender como isso funciona no dia a dia, imagine que você está construindo um assistente capaz de consultar o saldo bancário de clientes. O modelo precisa extrair o CPF e o mês de consulta. Veja abaixo um exemplo limpo de como estruturar essa validação:

from pydantic import BaseModel, Field, field_validator

class ConsultarSaldoArgs(BaseModel):
    cpf: str = Field(..., description='CPF do cliente apenas com numeros')
    mes: int = Field(..., ge=1, le=12, description='Mes de referencia entre 1 e 12')

    @field_validator('cpf')
    def validar_cpf(cls, v):
        if len(v) != 11:
            raise ValueError('CPF deve conter exatamente 11 digitos')
        return v

Com essa classe definida, garantimos que nenhum dado inválido passe adiante. Se a inteligência artificial tentar buscar o mês 15 ou passar um CPF incompleto, o Pydantic intercepta a chamada na hora. Esse rigor estrutural é o mesmo princípio que aplicamos quando integramos bases locais utilizando padrões avançados, conforme abordamos em nosso guia sobre como usar o protocolo MCP da Anthropic para bases locais.

Tratamento de exceções e autocorreção pelo modelo

Apenas bloquear o erro não basta; precisamos fechar o ciclo de feedback para que a inteligência artificial possa corrigir o próprio comportamento. Quando uma validação falha, o erro gerado pelo Pydantic deve ser capturado pelo seu código Python e devolvido diretamente ao modelo de linguagem como um lembrete do que deu errado. Essa abordagem transforma um erro fatal em uma oportunidade de aprendizado em tempo de execução para o agente autônomo.

Na prática, o fluxo funciona como um diálogo iterativo: o usuário faz um pedido, a IA tenta chamar a função com parâmetros incorretos, seu código intercepta a exceção de validação, envia a mensagem de erro de volta ao chat, e o modelo prontamente ajusta os argumentos na tentativa seguinte. Para entender melhor como essa dinâmica de agentes evolui em ecossistemas complexos, vale a pena conferir as discussões técnicas sobre como migrar agentes de IA para o modelo GLM 5.3, onde a resiliência a erros de parâmetros é testada sob alta carga.

Isolamento e sandboxing na execução de ferramentas

Mesmo com uma validação impecável de esquemas, ainda corremos riscos se a função chamada pelo modelo tiver acesso irrestrito ao sistema operacional. E se a ferramenta permitir rodar comandos de terminal ou manipular arquivos arbitrários? Para eliminar esse vetor de ataque, é fundamental implementar o sandboxing, que consiste em isolar a execução do código em ambientes restritos, como contêineres Docker efêmeros ou ambientes virtuais altamente limitados com permissões mínimas.

O sandboxing garante que, caso o modelo seja manipulado por uma injeção de prompt indireta — uma técnica onde dados externos maliciosos convencem a IA a executar ações destrutivas —, o estrago fique contido em uma caixa de areia sem privilégios. Em termos operacionais, isso significa rodar funções críticas em processos separados com limites rígidos de memória e tempo de CPU. Combinar validação estrita de tipos com execução isolada é o divisor de águas entre um protótipo frágil de inteligência artificial e um sistema de produção verdadeiramente seguro e resiliente.

Conclusão e próximos passos para desenvolvedores

Implementar function calling seguro em Python não é apenas uma questão de conveniência, mas um requisito obrigatório para colocar agentes autônomos em ambientes de produção. O uso combinado de validações estritas em tempo de execução com Pydantic, laços inteligentes de tratamento de erros e o isolamento de processos em sandboxes forma uma muralha defensiva sólida contra alucinações e ataques maliciosos. Ao adotar essas práticas, você protege seus bancos de dados, garante a estabilidade das APIs e constrói aplicações de IA nas quais sua empresa pode confiar plenamente no dia a dia.

Para continuar aprimorando suas defesas e arquiteturas de agentes, estude aprofundadamente as diretrizes de segurança dos provedores e mantenha seus esquemas sempre atualizados à medida que novas versões de modelos forem lançadas no mercado. A engenharia por trás de sistemas autônomos maduros exige vigilância constante, testes automatizados rigorosos e uma mentalidade focada em zero trust em todas as fronteiras de integração.