Como funciona o function calling em modelos de IA
Function calling é o mecanismo pelo qual um modelo de IA, ao processar sua mensagem, decide que a melhor resposta não é texto e sim uma chamada estruturada a uma função externa, descrita por você em um schema JSON com nome, descrição e parâmetros.
Monte o seu agente e veja ele respondendo com as informações do seu negócio.
Criar meu agente de graça Montar é livre, sem cadastro e sem cartão.O que você vai encontrar neste artigo
Em resumo
- O modelo escolhe chamar uma função com base na descrição do schema, não no nome dela
- Ele gera um JSON com os parâmetros; seu código valida e executa a função de verdade
- A maioria dos erros vem de descrição vaga ou schema mal tipado, não do modelo em si
O que é function calling na prática
Function calling é um formato de saída. Em vez de responder só com texto livre, o modelo pode responder com um bloco estruturado dizendo 'chame a função X com estes parâmetros'. Quem executa a função é sempre o seu código, nunca o modelo — ele só decide quando chamar e com quais dados.
Isso resolve um problema real: modelos de linguagem não sabem a temperatura de hoje, não sabem o saldo de um cliente no seu banco de dados, e não devem inventar esses números. Function calling dá ao modelo um jeito de pedir esse dado a uma fonte confiável em vez de alucinar.
Como o modelo decide chamar uma ferramenta
Na chamada de API, você envia junto com a mensagem do usuário uma lista de ferramentas disponíveis, cada uma com nome, descrição e schema de parâmetros. O modelo lê essa lista como parte do contexto — o texto inteiro que ele processa antes de gerar a resposta.
Durante o treinamento, o modelo aprendeu a reconhecer um padrão: quando a pergunta do usuário 'casa' semanticamente com a descrição de uma ferramenta, a saída de maior probabilidade estatística é o formato de chamada de função, não texto solto. Não existe lógica de decisão separada — é o mesmo mecanismo de previsão de próximo token, só que treinado para preferir esse formato em certos contextos.
O modelo não 'entende' que precisa de dados externos. Ele reconhece um padrão textual e prevê que a resposta mais provável é uma chamada de função, com base em como foi treinado e no que você escreveu na descrição.
Qual é o papel do schema json no function calling
O schema JSON é o contrato entre você e o modelo. Ele define o nome da função, uma descrição em texto livre do que ela faz, e os parâmetros aceitos com tipo (string, número, enum, booleano) e quais são obrigatórios.
A descrição pesa mais do que o nome da função. Um schema com nome buscar_cliente e descrição vaga do tipo 'busca um cliente' funciona pior do que um com descrição detalhada dizendo quando usar a função e o formato esperado de cada campo.
O que colocar num schema bem escrito
- Descrição que diz quando usar a função, não só o que ela faz
- Tipos estritos: use enum em vez de string livre sempre que o valor for uma lista fechada
- Campos obrigatórios marcados como
required, nunca deixados implícitos na descrição - Exemplos de valor dentro da descrição do parâmetro, quando o formato não é óbvio (data, CPF, telefone)
Onde o function calling costuma dar errado
A maior parte dos bugs em produção não é o modelo 'errando' — é o schema comunicando mal a intenção. Os padrões mais comuns se repetem entre projetos diferentes.
| Sintoma | Causa provável |
|---|---|
| Modelo chama a função errada entre duas parecidas | Descrições muito parecidas ou nomes ambíguos |
| Parâmetro vem vazio ou inventado | Campo obrigatório sem exemplo de formato na descrição |
| Modelo chama a função sem precisar | Descrição da função soa relevante demais para perguntas genéricas |
| Modelo nunca chama a função quando devia | Descrição técnica demais, sem linguagem do usuário final |
| Erro de tipo ao validar o JSON retornado | Schema aceita string onde deveria exigir enum ou número |
Como reduzir erro de chamada de função na prática
Trate o schema como parte do produto, não como detalhe de implementação. Reescreva a descrição pensando em como um humano explicaria a função por telefone para outra pessoa, sem jargão de código.
- Valide sempre o JSON retornado no seu código antes de executar a função — nunca confie cegamente no formato
- Limite o número de ferramentas ativas por chamada; muitas opções parecidas aumentam a chance de confusão
- Teste com frases ambíguas de usuário real, não só com o caso ideal que você imaginou ao escrever o schema
- Registre os erros de chamada em produção e ajuste a descrição, não o nome da função, quando o erro se repete
Function calling substitui o RAG
Não. São mecanismos diferentes que resolvem problemas diferentes. Function calling busca um dado pontual e estruturado (preço, saldo, status de pedido); RAG busca trechos relevantes dentro de uma base grande de texto não estruturado, como documentos e manuais.
Na prática, os dois convivem no mesmo agente: uma função pode disparar uma busca vetorial e devolver o resultado como parâmetro de retorno. Se sua dúvida é sobre como a IA lê documentos em vez de chamar uma API, vale ler o material sobre RAG separado deste.
Leia também
Perguntas frequentes
- Function calling funciona igual em todos os provedores de IA?
- O conceito é o mesmo, mas o formato do schema e o nome do campo variam entre OpenAI, Anthropic e Google. Sempre confira a documentação oficial do provedor antes de portar um schema de um para outro.
- O modelo pode chamar mais de uma função na mesma resposta?
- Depende do provedor e da versão do modelo. Alguns suportam chamadas paralelas, retornando uma lista de chamadas para seu código executar em sequência ou ao mesmo tempo.
- Function calling é a mesma coisa que agente de IA?
- Não. Function calling é uma peça técnica; agente é o sistema que usa function calling em loop, decidindo a próxima ação com base no resultado da anterior.
- Preciso pagar mais para usar function calling?
- Geralmente não há custo extra pela funcionalidade em si, mas o schema e a resposta da função entram no contexto e contam como tokens. Consulte a página de preços oficial do provedor para entender como isso pesa na conta.