Você repassa a mensagem de um usuário para a API do GPT e, em vez de uma resposta em linguagem natural, o modelo devolve um objeto JSON estruturado dizendo exatamente qual função chamar e com quais argumentos. Isso é chamada de função — e muda o tipo de aplicações que você pode construir com LLMs.
A maioria dos desenvolvedores ouve “chamada de função” e presume que o modelo está executando código em seu nome. Não está.
Ao usar chamada de função, o próprio LLM não executa a função. Em vez disso, ele identifica a função apropriada, reúne todos os parâmetros necessários e fornece as informações em um formato JSON estruturado.
Seu aplicativo continua responsável por executar a lógica real. O modelo apenas diz o que executar e com quais entradas.
Essa distinção importa mais do que parece e molda tudo, desde como você arquiteta sua integração até como você pensa sobre segurança.
O que é, de fato, a chamada de função — e o que as pessoas continuam entendendo errado
A chamada de função (também conhecida como chamada de ferramenta) oferece uma maneira poderosa e flexível para modelos da OpenAI interagirem com sistemas externos e acessarem dados fora de seu treinamento.
A nomenclatura é a primeira fonte de confusão. As pessoas acham que o modelo está executando algo. Não está.
Há muitos nomes e explicações para chamada de função, mas tudo se resume a uma afirmação: “chamada de função é um tipo de capacidade de saída estruturada de um modelo de linguagem grande.” LLMs não chamam função alguma por conta própria; eles sugerem qual função você deve chamar a partir de funções pré-definidas que você fornece ao LLM em um prompt.
A segunda confusão gira em torno da superfície antiga da API.
Os parâmetros functions e function_call foram descontinuados com o lançamento da versão 2023-12-01-preview da API. O substituto de functions é o parâmetro tools.
Se você está seguindo um tutorial que usa o parâmetro antigo functions, você já está trabalhando com sintaxe obsoleta. Use tools e tool_choice em vez disso.
Uma função é um tipo específico de ferramenta, definida por um esquema JSON. Uma definição de função permite que o modelo passe dados para seu aplicativo, onde seu código pode acessar dados ou executar ações sugeridas pelo modelo.
Esse esquema é o que dá à chamada de função sua vantagem de confiabilidade em relação ao simples prompting — você não está torcendo para o modelo formatar a saída corretamente, você está impondo a estrutura no nível da API.
Como a chamada de função funciona na API da OpenAI — passo a passo
A chamada de ferramenta é uma conversa de múltiplas etapas entre seu aplicativo e um modelo via API da OpenAI. O fluxo de chamada de ferramenta tem cinco etapas de alto nível: fazer uma solicitação ao modelo com as ferramentas que ele pode chamar...
Veja como cada uma dessas etapas funciona na prática.
Etapa 1: Defina os esquemas das suas funções. Você descreve cada função disponível como um objeto JSON dentro do parâmetro tools. O esquema inclui o nome da função, uma descrição em linguagem natural que o modelo usa para decidir quando invocá-la e um bloco parameters que segue as convenções do JSON Schema.
Quanto mais detalhada for sua description — em termos das situações em que pode e deve chamar a função — melhor. Observe, no entanto, que descrições de funções fazem parte do prompt e, portanto, consomem tokens da mesma forma.
Etapa 2: Envie a solicitação. Você chama a Chat Completions API com a mensagem do usuário e sua lista tools. O modelo vê ambas.
Etapa 3: O modelo decide se deve chamar uma função.
Uma chamada de função refere-se a um tipo especial de resposta que você pode obter do modelo se ele examinar um prompt e determinar que, para seguir as instruções, precisa chamar uma das ferramentas disponíveis. Se o modelo recebe um prompt como “qual é o clima em Paris?”, ele pode responder com uma chamada de ferramenta para a ferramenta get_weather, com Paris como argumento de localização.
Etapa 4: Seu código executa a função. Você analisa a resposta do modelo, extrai o nome da função e os argumentos e executa o código real no seu runtime. A API retornou JSON estruturado — você decide o que fazer com ele.
Etapa 5: Envie o resultado de volta.
Você então envia toda a definição da ferramenta, o prompt original, a chamada de ferramenta do modelo e a saída da chamada de ferramenta de volta ao modelo para finalmente receber uma resposta em texto
— algo como “O clima em Paris hoje é 25°C.”
Um detalhe que a maioria dos tutoriais ignora:
quando você define strict: true na sua definição de função, Structured Outputs garante que os argumentos gerados pelo modelo para uma chamada de função correspondam exatamente ao JSON Schema que você forneceu.
Definir strict como true garantirá que as chamadas de função sigam o esquema da função de forma confiável, em vez de serem “best effort”. A OpenAI recomenda sempre habilitar o modo estrito.
Sempre. Não há um bom motivo para não habilitar.
Também há chamadas de função paralelas para conhecer.
Dependendo da consulta do usuário, o modelo invocará chamadas de função paralelas se você estiver usando os modelos mais recentes lançados em ou após 6 de novembro de 2023.
Isso significa que uma única solicitação como “como está o clima em Londres e Tóquio?” pode acionar duas chamadas de ferramentas simultâneas em vez de encadeá-las sequencialmente.
Casos de uso reais de chamada de função
O exemplo do clima está em toda parte porque é limpo. Casos de produção reais são mais bagunçados e mais interessantes.
Pipelines de suporte ao cliente com dados ao vivo
A chamada de função é útil para uma grande variedade de casos — por exemplo, um assistente de IA que precisa buscar os dados mais recentes do cliente em um sistema interno quando o usuário pergunta “quais são meus pedidos recentes?” antes de poder gerar uma resposta.
O modelo descobre a intenção, extrai o ID do cliente a partir do contexto e chama a API interna do seu CRM. Sem regex frágil. Sem prompts tão delicados que quebram por causa de uma vírgula faltando.
Extração de dados estruturados em escala
Um pipeline de extração de dados que captura texto bruto, converte em dados estruturados e salva em um banco de dados também é um ótimo encaixe. Você obtém esquemas consistentes em milhares de documentos sem ajustar à mão a lógica de parsing por tipo de documento.
Tradução de linguagem natural para API
Soluções com LLM para extrair e rotular dados, aplicações que ajudam a converter linguagem natural em chamadas de API ou consultas válidas a bancos de dados, e mecanismos de recuperação de conhecimento conversacionais que interagem com uma base de conhecimento — todos se beneficiam da garantia de formato de saída da chamada de função. Quando você precisa que a saída acione sistemas downstream, a variabilidade é intolerável.
Fluxos de trabalho com agentes e múltiplas ferramentas
Para desenvolvedores, a chamada de função habilita acesso a dados em tempo real para superar cortes de treinamento, buscando preços de ações ao vivo, clima ou registros recentes do banco de dados. Também habilita execução de ações — transformando o LLM de um observador passivo em um participante ativo que modifica estado, como enviar e-mails, atualizar CRMs ou implantar código.
A distinção-chave em relação a um chatbot simples: o modelo não está apenas gerando texto, está orquestrando operações reais nos seus sistemas.
Boas práticas de chamada de função — o que os desenvolvedores geralmente erram
Esta é a seção que a maioria dos tutoriais pula completamente, razão pela qual equipes acabam depurando falhas estranhas de produção às 2 da manhã.
Escrever descrições vagas demais. O modelo usa a descrição da sua função para decidir quando chamá-la. Se sua descrição é genérica — algo como “processa solicitações do usuário” — o modelo não tem um sinal confiável sobre quando acioná-la. Seja específico sobre a condição de disparo e o formato de entrada esperado. Pense na descrição como um contrato, não um rótulo.
Expor funções demais de uma vez
Descrições de funções podem consumir um número significativo de tokens no prompt de entrada.
Carregar definições de 50+ ferramentas no prompt de sistema cria dois problemas: custo e latência, já que definições de ferramentas consomem tokens de entrada; e degradação de acurácia, já que, à medida que o número de opções de ferramentas aumenta, a capacidade do modelo de selecionar a correta diminui.
Comece com o menor conjunto de funções que seu caso de uso realmente necessita.
Presumir que o modelo não vai alucinar parâmetros. Vai.
O modelo pode inventar parâmetros
— especialmente para campos opcionais que não estão claramente limitados por um enum. É exatamente por isso que strict: true importa: ele remove a capacidade do modelo de criar campos fora do seu esquema.
Não lidar com o loop multi-turn. Desenvolvedores costumam construir o caminho feliz — o usuário pergunta, o modelo chama a função, pronto.
Os modelos podem gerar chamadas de função que não correspondem ao esquema que você definiu ou tentar chamar uma função que você não incluiu. Se o modelo estiver gerando chamadas de função inesperadas, tente incluir uma frase na mensagem de sistema que diga “Use apenas as funções que lhe foram fornecidas.”
Projete para os casos extremos.
Pular a etapa de confirmação antes de operações de escrita.
Esteja ciente do impacto no mundo real das chamadas de função que você planeja executar, especialmente aquelas que disparam ações como executar código, atualizar bancos de dados ou enviar notificações. Para funções que tomam ações, implementar uma etapa em que o usuário confirma a ação antes da execução é fortemente recomendado.
Se uma chamada de função pode excluir dados, enviar dinheiro ou modificar estado externo, um humano deve aprová-la primeiro.
Considerações de segurança e confiabilidade
A chamada de função expande o que um LLM pode fazer. Também expande o que um invasor pode fazê-lo fazer.
A principal ameaça aqui é a injeção de prompt.
Os objetivos finais de injeções de prompt variam, mas podem incluir exfiltrar dados privados via chamadas de ferramentas downstream, tomar ações desalinhadas ou, de outra forma, alterar o comportamento do modelo de maneira não intencional.
Quando suas chamadas de função podem enviar e-mails, consultar bancos de dados ou acionar webhooks, um ataque de injeção não é apenas um chatbot saindo do script — é uma potencial violação.
À medida que sistemas de IA vão além do chat e começam a chamar ferramentas e tomar ações, a injeção de prompt se torna um problema muito mais sério. Uma instrução maliciosa escondida em uma página da web, documento ou ferramenta externa pode tentar substituir o comportamento do sistema, expor informações sensíveis ou acionar ações que o modelo nunca deveria tomar.
A estratégia de mitigação tem algumas camadas concretas.
Projete fluxos de trabalho de modo que dados não confiáveis nunca dirijam diretamente o comportamento do agente. Extraia apenas campos estruturados específicos — como enums ou JSON validado — de entradas externas para limitar o risco de injeção fluindo entre nós.
Além disso,
sempre verifique as chamadas de função geradas pelo modelo. Isso inclui checar os parâmetros, a função sendo chamada e garantir que a chamada esteja alinhada com a ação pretendida.
Uma verdade desconfortável:
“A injeção de prompt, assim como golpes e engenharia social na web, provavelmente nunca será totalmente ‘resolvida’.”
Essa é a avaliação da própria OpenAI. A implicação prática é que você não deve arquitetar sistemas de chamada de função com agentes partindo do pressuposto de que o modelo sempre se comportará como pretendido. Defesa em profundidade — validação, permissões com escopo, humano no loop para operações destrutivas — é a única postura sensata.
Chamada de função vs. engenharia de prompt — quando usar qual
Essa comparação surge constantemente. A resposta curta: elas resolvem problemas diferentes, e confundi-las leva a prompts superdimensionados quando a chamada de função bastaria, ou a esquemas de função frágeis quando um bom prompt de sistema seria mais simples.
Engenharia de prompt envolve elaborar entradas de texto para orientar o raciocínio interno do LLM — pedindo que ele “pense passo a passo”, por exemplo.
Ela molda como o modelo raciocina. Chamada de função, por outro lado, molda o que o modelo produz como saída e a encaminha diretamente para o seu sistema.
A chamada de ferramenta é a capacidade que permite ao LLM interagir com sistemas externos. Enquanto você usa engenharia de prompt para ajudar o modelo a decidir qual ferramenta usar, a chamada de ferramenta é o mecanismo que realmente executa a ação. Você provavelmente precisa de ambos, mas eles servem a propósitos diferentes.
Uma vantagem técnica-chave da chamada de função sobre a saída estruturada baseada em prompt:
a chamada de ferramenta é um conceito incorporado ao modelo. Não há necessidade de desperdiçar tokens e energia tentando explicar ao modelo que ele deve retornar um formato específico.
Quando você cria um prompt que diz “retorne sua resposta como JSON com campos X, Y e Z”, você está gastando tokens com instruções que o modelo pode seguir de forma inconsistente. Com a chamada de função, a aplicação do esquema acontece no nível da API.
APIs de chamada de função, agora nativamente suportadas em muitas plataformas de LLM, fornecem uma interface formal orientada por esquema que permite validação estrita de dados e integração com fluxos de trabalho programáticos.
Essa é a razão do mundo real para escolhê-la em vez de engenharia de prompt para qualquer dado que precise fluir para sistemas downstream: confiabilidade não é opcional quando você está em produção.
| Dimensão | Engenharia de Prompt | Chamada de Função |
|---|---|---|
| Finalidade principal | Moldar o raciocínio e o tom do modelo | Produzir saída estruturada para integração com sistemas |
| Formato de saída | Texto livre (ou JSON em formato de texto) | Esquema JSON aplicado |
| Confiabilidade do esquema | Best-effort; sujeito a desvio | Garantida com strict: true |
| Custo de tokens | Menor para saídas simples | Maior (definições de funções adicionam tokens) |
| Quando usar | Tarefas de raciocínio, geração de texto, estilo | Extração de dados estruturados, orquestração de APIs, ações |
| Exposição à injeção de prompt | Menor (sem execução de ferramentas externas) | Maior (chamadas podem acionar ações no mundo real) |
A heurística prática: se a saída precisa acionar um sistema downstream — uma escrita em banco de dados, uma chamada de API, um desvio de decisão no seu código — use chamada de função. Se a saída é para um humano ler, engenharia de prompt geralmente é suficiente e mais barata.
Principais conclusões
| Tópico | O que lembrar |
|---|---|
| O que é | O modelo devolve JSON estruturado descrevendo qual função chamar — ele não executa a função |
| Superfície atual da API | Use tools e tool_choice; os parâmetros antigos functions e function_call estão obsoletos |
| Modo estrito | Sempre defina strict: true nas definições de função para impor conformidade ao esquema |
| Chamada paralela | Suportada em modelos lançados após novembro de 2023; uma solicitação pode acionar múltiplas chamadas de ferramentas |
| Custo de tokens | Esquemas de função consomem tokens de entrada; minimize o número de funções expostas |
| Segurança | Valide todas as saídas de chamadas de função; nunca permita que conteúdo externo não confiável dirija chamadas |
| vs. Engenharia de Prompt | A chamada de função aplica estrutura de saída no nível da API; a engenharia de prompt molda o raciocínio interno |
| Etapas de confirmação | Qualquer função com efeitos no mundo real (escrever, enviar, excluir) deve exigir confirmação do usuário antes |
Se você quer experimentar chamada de função em diferentes modelos — GPT-5.4, claude opus 4.7, gemini 3.1 pro — sem manter credenciais de API separadas para cada um, a CometAPI dá acesso a todos por um único endpoint e chave, o que torna os testes entre modelos significativamente menos trabalhosos.
CometAPI resolve a sobrecarga de infraestrutura:
✅ Sintaxe unificada de chamada de função em 15+ modelos
✅ Chave única de API — sem contas separadas para OpenAI/Anthropic/Google
✅ Tradução automática de esquemas — escreva uma vez, teste em qualquer lugar
✅ Acompanhamento de custos embutido — compare uso de tokens por modelo em tempo real
Comece a testar com créditos grátis → Obter acesso
