Function calling — também chamado de "tool use" — é a capacidade de um modelo de linguagem (LLM) identificar, durante uma conversa, que uma tarefa exige informação ou ação fora do seu conhecimento treinado, e responder com uma instrução estruturada para chamar uma função específica, em vez de gerar apenas texto livre. O ponto chave: o modelo nunca executa a função. Ele apenas decide qual chamar e com quais argumentos. Quem executa de fato é a aplicação que está por trás da chamada à API.
Como funciona o fluxo de chamada de ferramentas
Anthropic, OpenAI e Google documentam esse fluxo de forma equivalente, com nomes de campo diferentes mas a mesma lógica de fundo:
- Você define uma ou mais ferramentas na chamada à API, cada uma com nome, descrição e um schema JSON dos parâmetros aceitos.
- O modelo analisa o prompt e decide se alguma ferramenta é necessária para responder — pode não chamar nenhuma, chamar uma ou chamar várias na mesma resposta.
- Se decidir chamar, o modelo retorna uma estrutura de dados (não texto livre) com o nome da ferramenta e os argumentos preenchidos.
- A aplicação lê essa estrutura, executa a função de verdade (uma consulta a um banco, uma chamada a uma API externa, um cálculo) e devolve o resultado ao modelo em uma nova mensagem.
- O modelo usa esse resultado para formular a resposta final ao usuário — ou para decidir chamar outra ferramenta, em um novo ciclo.
Segundo a documentação da Anthropic, quando o Claude decide usar uma ferramenta, a resposta vem com stop_reason igual a "tool_use" e um ou mais blocos do tipo tool_use; a aplicação precisa executar a chamada e devolver o resultado em um bloco tool_result na mensagem seguinte.
Como definir uma ferramenta com JSON Schema
Apesar da nomenclatura diferente entre provedores, todos usam JSON Schema para descrever os parâmetros de uma ferramenta. Um exemplo simples, para uma função que consulta o status de um pedido:
{
"name": "consultar_status_pedido",
"description": "Consulta o status atual de um pedido a partir do número do pedido.",
"input_schema": {
"type": "object",
"properties": {
"numero_pedido": {
"type": "string",
"description": "Número do pedido, ex: BR-20260906-001"
}
},
"required": ["numero_pedido"]
}
}O campo "name" identifica a ferramenta, "description" é o que o modelo lê para decidir quando (e se) chamá-la — descrições vagas levam a chamadas erradas ou ausentes — e o schema define os parâmetros aceitos e quais são obrigatórios. A OpenAI documenta a mesma estrutura sob o nome "function tools", com um modo estrito (strict mode) que força a saída do modelo a aderir exatamente ao schema declarado, em vez de seguir o schema apenas de forma aproximada.
As diferenças entre Claude, GPT e Gemini
- Claude (Anthropic): a ferramenta é declarada com input_schema; quando o modelo decide chamá-la, a resposta traz stop_reason "tool_use" e um bloco tool_use com o nome e os argumentos.
- GPT (OpenAI): a ferramenta é declarada como function tool com JSON Schema; a API não executa a função — ela gera o JSON que a aplicação usa para chamar a função no próprio código, seguindo um fluxo de várias etapas descrito na documentação da OpenAI.
- Gemini (Google): a ferramenta é declarada como function declaration; o modelo pode devolver uma chamada estruturada com um id, que a aplicação usa para casar a resposta enviada de volta. Segundo a documentação do Google, os SDKs do Gemini têm suporte nativo ao Model Context Protocol (MCP) e podem executar automaticamente uma chamada de ferramenta MCP antes de repassar o resultado ao modelo.
Chamadas paralelas e escolha forçada de ferramenta
Os três provedores documentam a possibilidade de o modelo chamar mais de uma ferramenta na mesma resposta, quando identifica que várias ações são necessárias para atender ao pedido do usuário. A documentação da OpenAI também descreve mecanismos para forçar o uso de uma ferramenta específica ("tool_choice") quando a intenção do usuário deixa claro que uma ação é necessária, em vez de deixar o modelo decidir livremente entre responder em texto ou chamar uma ferramenta.
Forçar uma ferramenta específica remove do modelo a opção de "não fazer nada". Use isso só quando a intenção do usuário for inequívoca — em fluxos ambíguos, forçar uma chamada pode fazer o modelo executar uma ação que ele não deveria.
Onde o function calling falha
Nenhuma implementação de function calling é infalível. Os padrões de erro mais comuns, relatados de forma consistente por documentação de fornecedores e por quem implementa esse tipo de integração em produção, são:
- Chamar uma ferramenta com nome que não existe entre as declaradas (alucinação de função).
- Preencher argumentos com tipo ou formato incorretos em relação ao schema.
- Chamar a mesma ferramenta repetidamente sem necessidade.
- Deixar de chamar uma ferramenta quando ela seria necessária para responder corretamente.
Mitigue com descrições específicas para cada ferramenta, schemas estritos quando o provedor suportar essa opção, e validação obrigatória no lado da aplicação antes de executar qualquer ação. Nunca confie cegamente no argumento retornado pelo modelo — em especial para ações que alteram dados ou movimentam dinheiro.
Function calling não é o mesmo que MCP
É comum confundir os dois conceitos porque costumam aparecer juntos. Function calling é a capacidade do modelo de emitir uma chamada de ferramenta estruturada — existe desde antes do MCP e funciona sem ele. Já o [MCP (Model Context Protocol)](/artigo/o-que-e-mcp-model-context-protocol-guia-completo) é um protocolo aberto que padroniza como ferramentas são descobertas e descritas entre diferentes servidores e clientes, para que você não precise redeclarar cada ferramenta manualmente em cada integração. Um [agente de IA](/artigo/o-que-e-um-agente-de-ia-guia-completo) normalmente combina os dois: usa function calling como mecanismo de chamada e, cada vez mais, MCP como camada de descoberta e padronização dessas ferramentas.
Exemplo prático em Python
O trecho abaixo ilustra a estrutura do laço de chamada de ferramenta com a API da Anthropic — a mesma lógica se aplica, com nomes de campo diferentes, a OpenAI e Gemini. Para o consumo básico da API em Python, veja [Como consumir a API da Anthropic em Python](/artigo/como-consumir-api-anthropic-python).
tools = [
{
"name": "consultar_status_pedido",
"description": "Consulta o status atual de um pedido a partir do numero do pedido.",
"input_schema": {
"type": "object",
"properties": {
"numero_pedido": {"type": "string"}
},
"required": ["numero_pedido"]
}
}
]
response = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
tools=tools,
messages=[{"role": "user", "content": "Qual o status do pedido BR-20260906-001?"}]
)
if response.stop_reason == "tool_use":
tool_call = next(b for b in response.content if b.type == "tool_use")
resultado = consultar_status_pedido(**tool_call.input) # sua funcao real
resposta_final = client.messages.create(
model="claude-sonnet-5",
max_tokens=1024,
tools=tools,
messages=[
{"role": "user", "content": "Qual o status do pedido BR-20260906-001?"},
{"role": "assistant", "content": response.content},
{"role": "user", "content": [{
"type": "tool_result",
"tool_use_id": tool_call.id,
"content": resultado
}]}
]
)Boas práticas para produção
- Nunca execute ações destrutivas (deletar, pagar, enviar) sem uma camada de confirmação ou permissão explícita.
- Trate a saída do modelo como entrada não confiável — valide tipo, formato e limites antes de executar.
- Limite o número de ferramentas visíveis ao modelo em cada chamada; muitas opções aumentam a chance de escolha errada.
- Registre (log) toda chamada de ferramenta com os argumentos recebidos, para depuração e auditoria.
Perguntas frequentes
Sim, são nomes diferentes para o mesmo conceito. "Function calling" é o termo mais comum na documentação da OpenAI e do Google, enquanto a Anthropic usa "tool use" para o Claude.