Veja como tool use realmente funciona por baixo do capô. Quando você envia uma mensagem para uma API como Claude ou GPT-4, também envia uma lista de definições de ferramentas — cada uma um JSON schema descrevendo o nome da função, seus parâmetros (com tipos e descrições), e o que ela faz. O modelo lê essas definições como parte de seu contexto, e quando determina que chamar uma ferramenta ajudaria a responder a pergunta do usuário, para de gerar texto e em vez disso emite um objeto de chamada de ferramenta estruturado: o nome da função e os argumentos que quer passar. Seu código de aplicação então executa aquela função (acessando uma API, consultando um banco de dados, rodando um cálculo), e envia o resultado de volta ao modelo como uma nova mensagem. O modelo lê o resultado e continua gerando sua resposta. Isso não é o modelo "rodando código" — é o modelo produzindo saída estruturada que sua aplicação interpreta e age sobre ela.
A qualidade das suas definições de ferramentas importa enormemente. Modelos escolhem ferramentas baseados em seus nomes e descrições, então uma ferramenta chamada search_docs com a descrição "Pesquisar a base de conhecimento interna por documentos relevantes dada uma consulta em linguagem natural" será usada apropriadamente, enquanto uma ferramenta chamada sd sem descrição confundirá o modelo. Descrições de parâmetros são igualmente importantes — se você tem um parâmetro date, especifique o formato esperado ("ISO 8601, ex: 2025-03-15") ou o modelo vai adivinhar. Na API do Claude, você também pode adicionar um parâmetro tool_choice para forçar o modelo a usar uma ferramenta específica, deixá-lo escolher livremente, ou prevenir uso de ferramentas inteiramente.
Chamada de ferramentas em paralelo é um recurso fácil de ignorar mas significativo para performance. Quando um modelo precisa coletar informações de múltiplas fontes — digamos, verificar o clima em três cidades — pode emitir múltiplas chamadas de ferramenta em uma única resposta. Sua aplicação as executa concorrentemente e envia todos os resultados de volta de uma vez. Claude, GPT-4 e Gemini todos suportam isso. A alternativa (chamadas sequenciais, uma por viagem de ida e volta) adiciona latência que se compõe rapidamente. Se você está construindo uma integração de tool use, projete sua camada de execução para lidar com arrays de chamadas de ferramenta desde o início.
Uma pegadinha comum é que tool use não é determinístico. O mesmo prompt com as mesmas ferramentas pode levar o modelo a chamar ferramentas diferentes, passar argumentos diferentes, ou escolher não usar ferramentas. Isso importa para testes e confiabilidade. Sistemas de produção tipicamente incluem lógica de validação na saída da chamada de ferramenta — verificando que parâmetros obrigatórios estão presentes, que valores estão em faixas esperadas, que o nome da função corresponde a uma ferramenta conhecida. Algumas equipes adicionam um mecanismo de retry: se o modelo emite uma chamada de ferramenta malformada, o erro é enviado de volta como resultado da ferramenta e o modelo tem chance de tentar novamente. Esse padrão de "autocorreção" funciona surpreendentemente bem na prática.
A história de tool use em modelos de IA é surpreendentemente curta. A OpenAI introduziu "function calling" em junho de 2023 com GPT-3.5 e GPT-4, e imediatamente mudou o que era possível construir. Antes disso, desenvolvedores usavam prompt engineering para fazer modelos gerar JSON em um formato particular, depois parseavam com regex frágil — funcionava, mas era quebradiço. A Anthropic lançou tool use para Claude em 2024, seguida pelo Google para Gemini. As APIs convergiram em designs muito similares: você define ferramentas como JSON schemas, o modelo emite chamadas estruturadas, e você lida com a execução. A introdução do MCP no final de 2024 então adicionou uma camada padronizada de descoberta e transporte sobre esse mecanismo, para que ferramentas pudessem ser compartilhadas entre aplicações sem redefini-las para cada uma.