Um modelo de linguagem, sozinho, só sabe fazer uma coisa: gerar texto. Ele é um conversador brilhante e um executor nulo. Pergunte a ele qual o seu saldo bancário e, sem ajuda, ele vai inventar um número convincente — porque gerar texto plausível é literalmente tudo que ele faz. Function calling é a ponte entre esse conversador e o mundo real. É o mecanismo que transforma "IA que fala" em "IA que faz".
Se você quer construir agentes que resolvem — e não chatbots que empurram o cliente pro portal — precisa entender isso a fundo.
O que é, de verdade
Function calling (também chamado de tool use) é a capacidade do modelo de, no meio de uma conversa, decidir que precisa de uma ferramenta externa e pedir para usá-la. O fluxo é este:
- Você diz ao modelo quais ferramentas existem (nome, descrição, parâmetros).
- Na conversa, o modelo percebe que precisa de uma delas e, em vez de responder texto, devolve uma chamada estruturada:
buscar_pedido(id: "123"). - O seu código executa essa função de verdade — consulta o banco, chama a API — e devolve o resultado ao modelo.
- O modelo usa esse dado real para continuar a conversa: "Seu pedido 123 saiu para entrega hoje."
O ponto que muita gente erra: o LLM não executa nada. Ele só decide o quê chamar e com quais argumentos. Quem executa — e valida — é você. Essa separação é a espinha dorsal de um agente seguro.
Por que isso muda tudo
Sem tools, o teto de um LLM é dar informação genérica e, na pior das hipóteses, alucinar. Com tools, ele passa a operar sobre a realidade do seu negócio: os dados reais do cliente, o estoque real, o pagamento real. A conversa deixa de ser sobre o problema e passa a resolver o problema.
É exatamente essa a diferença que separa um agente de IA de um chatbot. O chatbot diz "para segunda via, acesse o portal". O agente chama gerar_segunda_via(cliente_id), recebe o boleto e manda o PIX na conversa. Mesma pergunta, categorias de software completamente diferentes — e a diferença é function calling bem-feito.
Como projetar boas ferramentas
A qualidade do seu agente depende mais do design das ferramentas do que do modelo. Princípios que eu sigo:
Descrições que o modelo entende. A description de cada ferramenta é um prompt. "Busca informações" é ruim; "Busca o status de entrega de um pedido pelo número do pedido" é bom. O modelo escolhe a ferramenta lendo isso — seja específico.
Parâmetros tipados e mínimos. Peça exatamente o que a função precisa, com tipos claros. Menos parâmetros, menos chance do modelo errar o preenchimento. Enums quando os valores são fixos.
Ferramentas atômicas, não canivetes suíços. Uma ferramenta que faz cinco coisas dependendo de um parâmetro acao confunde o modelo. Prefira abrir_chamado, consultar_chamado, fechar_chamado separados. Cada uma faz uma coisa bem.
Retornos que o modelo consegue usar. Devolva dados estruturados e concisos. Um JSON gigante gasta contexto e confunde. Devolva o essencial para a próxima decisão.
Os erros que quebram em produção
Vi (e cometi) todos estes:
- Confiar nos argumentos do modelo sem validar. O LLM pode alucinar um
cliente_idque não existe, ou um valor negativo. Sua camada de execução valida tudo antes de agir. Regra inegociável. - Ferramentas irreversíveis sem confirmação.
transferir_dinheironão pode ser chamada só porque o modelo achou que era uma boa ideia. Ações que mudam o mundo de forma irreversível exigem confirmação explícita do usuário e log. - Loop infinito de tools. O modelo chama, o resultado o faz chamar de novo, e ele entra em ciclo. Coloque um limite de chamadas por turno e observabilidade pra detectar.
- Sem log das chamadas. Se você não registra qual ferramenta foi chamada, com quais argumentos e qual resultado, você não debuga nada quando der errado. E vai dar.
A regra de ouro
Eu resumo assim: o LLM é o cérebro que decide; a camada de ferramentas é o corpo que age com responsabilidade. O cérebro pode divagar, hesitar, até alucinar. O corpo — o seu código — não pode. Ele valida cada intenção, confirma o que é perigoso, executa o que é seguro, e registra tudo.
Function calling é o que faz IA sair da tela e tocar o negócio. Mas é também onde mora o risco. Fazer bem essa camada é a diferença entre um agente que você confia em produção e um que você não deveria ter ligado.
Construo agentes de IA que agem de verdade — com function calling seguro, integrado aos sistemas do negócio. Se você quer sair do chatbot e ter IA que executa, vamos conversar.