Function calling na prática: o segredo por trás dos agentes de IA

Rocketseat

Rocketseat

5 min de leitura
https://prod-files-secure.s3.us-west-2.amazonaws.com/08f749ff-d06d-49a8-a488-9846e081b224/0b9fd6a3-f2ca-49b6-8be9-d4f77422bceb/function-calling-agentes-de-ia-na-pratica.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=ASIAZI2LB466YRXEKXUH%2F20260721%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20260721T203410Z&X-Amz-Expires=3600&X-Amz-Security-Token=IQoJb3JpZ2luX2VjEPj%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FwEaCXVzLXdlc3QtMiJHMEUCICFHzjx1kvs0tMWM59TPOU8mKdkq3baE9eObYRwOpruIAiEA14%2FbB7LpC8dwoRgMdSIEJ8XFbMqUEuOSioKKbdDqrdYqiAQIwf%2F%2F%2F%2F%2F%2F%2F%2F%2F%2FARAAGgw2Mzc0MjMxODM4MDUiDPVX5462fOZIbtabjyrcA0OZiMXa1dUfEJFztFozU5nP5wf1WRsdhqPkNTFR03MdBrEeSrUw3yfWbeD5lpeHlygdMICm4Ti4DpD%2BoeugyPCDM2v4Q2cFfnPv%2FNuYey%2BEvjp0vtlwYRpj2p2w4TAhNseO1URYPZQx01PkPKl9boU613Zig7vr7vJzEhnIvW%2FSIuEouISw0rfrDsZeyPTvTwTq8RN3XZiZq1u1kKkl9AR9ZihwYBXekobmI8Q0cGYnWJnQogwbYEkAJ3fOVv06qSfYgpx69ZtsehDpAxHZk3qqP3O7W2%2BtcGpgLxMYIAUFJK9eUH76lK%2BU1NkWfNID%2Fl6M1b8K%2BbvglAmfiWn%2Bt%2FUK%2FTv8LuxizWklzfE253Wp3KpQNYGjYReeOTpVQKBm0gdBLZK7uvmbBDdMKbLn8lKBMFb%2BIkBZ4nqFS5lmuQa7hvxOEXGAEM1r%2FFJdAtg8Ob4e7VV0CG3u0GRGbHAa7drvXZS96k9JAdqezm3msONnYZKZo%2B2EwLT1eUG8Oy%2Fao5xDFRZbRfPIJ2G%2FpyGHt17h2TUczpGI7GTYNvdVRTOqr%2B8FXY5cTQF00EKmHVfesU519Zcov7gtAv8kR2u3SOBSSqVFPTmHj%2BNXy7APJCWP4D26chCgYBiNx4xvMPSr%2FtIGOqUBDtWbi3h8RBuCbarlKn4%2B5Yrkvn0z%2F%2ByNymCIXaaeYUe1Ouh627Il9Yqid9GQc0zGf543tzc3r%2B%2FDGov5Y8o1hrxEEkud0gGL%2Bnmny9DZ7VdL3yY4bXVkdnFt9TUID2iACCQ5SYLM2oK71GgRbct05GAJmNQJPgIoaMyiAi2rmyX81HGnXx%2BRcyGuZNnPww1d5ZeJwXrVS6vKkG7xMNHmt6EhQq1X&X-Amz-Signature=a10d4c700a1121c8b03912b3a3e74cdef8faaebc57e170684d7954f49daa66d4&X-Amz-SignedHeaders=host&x-amz-checksum-mode=ENABLED&x-id=GetObject
Um modelo de linguagem, sozinho, só faz uma coisa: prever o próximo pedaço de texto. Ele não consulta um banco de dados, não manda um e-mail, não verifica o status de um pedido em tempo real. Então como agentes de IA conseguem fazer exatamente isso, executar ações reais no mundo, e não só conversar sobre elas?
A resposta é function calling. É esse mecanismo, simples na ideia mas fácil de implementar errado, que transforma um modelo que só gera texto em um agente que decide quando e como chamar uma função real do seu sistema, com os parâmetros certos, para resolver o pedido do usuário.
Vamos entender como ele funciona por trás dos panos, e mostra na prática como estruturar isso em código, incluindo os pontos onde a maioria dos primeiros agentes falha.

O que é function calling, sem o mistério

Function calling é a capacidade de um modelo de linguagem identificar, a partir de uma mensagem do usuário, que uma função específica do seu código precisa ser chamada, e gerar os parâmetros dessa chamada no formato correto. O modelo não executa a função, ele apenas decide qual função chamar e com quais argumentos. Quem executa de fato é o seu código, que recebe essa decisão do modelo, roda a função correspondente, e devolve o resultado para o modelo continuar a conversa.
Esse detalhe é importante: o modelo nunca tem acesso direto ao seu banco de dados, à sua API de pagamento ou ao seu sistema de e-mail. Ele só decide a intenção. A execução, e todo o controle de segurança em torno dela, continua sendo responsabilidade do seu código.

Como o fluxo funciona na prática

O ciclo de uma chamada com function calling segue, de forma simplificada, estes passos:
  1. Você descreve para o modelo quais funções estão disponíveis, incluindo nome, descrição e os parâmetros que cada uma espera.
  1. O usuário envia uma mensagem, por exemplo "qual o status do meu pedido 123?".
  1. O modelo responde não com texto, mas com uma instrução estruturada dizendo qual função chamar e com quais argumentos, no caso, a função de consulta de pedido com o número 123.
  1. Seu código executa essa função de verdade, busca a informação no seu sistema, e envia o resultado de volta para o modelo.
  1. O modelo usa esse resultado para gerar a resposta final em linguagem natural para o usuário.

Definindo uma função para o modelo

O primeiro passo prático é descrever a função de um jeito que o modelo consiga entender quando ela deve ser usada.
# Define o "contrato" de uma função disponível para o modelo # O modelo usa essa descrição para decidir quando chamar essa função ferramenta_consulta_pedido = { "name": "consultar_status_pedido", "description": "Consulta o status atual de um pedido a partir do número dele", "parameters": { "type": "object", "properties": { "numero_pedido": { "type": "integer", "description": "Número do pedido a ser consultado", } }, "required": ["numero_pedido"], }, }
Essa estrutura é enviada junto com a mensagem do usuário para o modelo. A qualidade da descrição importa bastante: descrições vagas fazem o modelo chamar a função errada, ou deixar de chamar uma função quando deveria.

Executando a função escolhida pelo modelo

Quando o modelo decide que uma função deve ser chamada, ele retorna essa decisão em formato estruturado, e é o seu código que interpreta essa decisão e executa a lógica real.
# Recebe a decisão do modelo e executa a função correspondente de verdade # O modelo nunca executa código, só decide qual função chamar e com quais dados def consultar_status_pedido(numero_pedido: int) -> dict: """Busca o status do pedido no sistema real da aplicação.""" # aqui entraria uma consulta real ao banco de dados pedidos_simulados = {123: "em transporte", 456: "entregue"} status = pedidos_simulados.get(numero_pedido, "pedido não encontrado") return {"numero_pedido": numero_pedido, "status": status} def executar_funcao_escolhida(nome_funcao: str, argumentos: dict) -> dict: """Roteia a decisão do modelo para a função real correspondente.""" funcoes_disponiveis = { "consultar_status_pedido": consultar_status_pedido, } if nome_funcao not in funcoes_disponiveis: raise ValueError(f"Função desconhecida: {nome_funcao}") return funcoes_disponiveis[nome_funcao](**argumentos) # exemplo de uso, simulando a decisão que o modelo retornaria resultado = executar_funcao_escolhida("consultar_status_pedido", {"numero_pedido": 123}) print(resultado)
Esse roteamento entre "o que o modelo decidiu" e "o que o código realmente executa" é o ponto onde vale colocar validação extra, garantindo que os argumentos recebidos fazem sentido antes de rodar qualquer ação com efeito real, como uma cobrança ou um envio de e-mail.

Onde os primeiros agentes costumam falhar

Alguns problemas aparecem com frequência em quem está construindo seu primeiro agente com function calling:
  • Descrever funções de forma ambígua, fazendo o modelo confundir qual função chamar quando existem várias parecidas.
  • Confiar cegamente nos argumentos gerados pelo modelo, sem validar tipos e valores antes de executar a função, especialmente em ações irreversíveis.
  • Não tratar o caso em que o modelo decide chamar uma função que não existe ou que não deveria estar disponível naquele contexto.
  • Deixar de limitar quais funções cada tipo de usuário pode acionar, tratando o agente como se ele tivesse acesso irrestrito ao sistema.

Function calling é a base dos agentes de IA

Um agente de IA, no fim das contas, é um modelo de linguagem com acesso a um conjunto de funções bem definidas e a capacidade de decidir, em sequência, quais delas chamar para resolver um objetivo maior. Um agente que agenda uma reunião, por exemplo, pode precisar chamar uma função para consultar disponibilidade na agenda, outra para criar o evento, e outra para notificar os participantes, tudo isso encadeado a partir de decisões sucessivas de function calling.
Entender esse mecanismo na base é o que separa quem consegue debugar e ajustar um agente que não está se comportando como esperado de quem só está copiando um framework pronto sem saber o que acontece por dentro.
Bora entender praticar um pouco mais ▶️
Video preview

Próximos passos

Function calling é o mecanismo técnico, mas construir agentes de IA confiáveis exige também pensar em automação de ponta a ponta, tratamento de erros e integração segura com sistemas reais. A Pós em IA e Automação da Rocketseat aprofunda esse caminho, indo dos fundamentos de IA até a construção de agentes e automações que executam ações reais em produção.

Conheça o Rocketseat Para Empresas

Oferecemos soluções personalizadas para empresas de todos os portes.

Rocketseat

Rocketseat

Ecossistema de educação contínua referência em programação e Inteligência Artificial.

Artigos_

Explore conteúdos relacionados

Descubra mais artigos que complementam seu aprendizado e expandem seu conhecimento.

Imagem contendo uma carta e um símbolo de check
NewsletterReceba conteúdos inéditos e novidades gratuitamente