Chamada de Funções (Function Calling / Tool Calling)
Protocolo técnico e padrão de interação entre LLMs e software externo. Em vez de texto livre, o modelo retorna um JSON válido com o nome da função e argumentos tipados conforme esquema JSON Schema, permitindo que o backend execute ações determinísticas em APIs reais.
1. Visão geral do conceito e o problema sistêmico
O modelo de linguagem está confinado ao seu próprio contexto: ele não conhece a hora exata atual, não pode debitar fundos de uma conta nem verificar o status de um container no Docker.
Sem um mecanismo de interação com código, o chatbot poderia apenas simular ações, retornando texto vago: «Verifiquei seu saldo, há $50» (mesmo que o saldo seja $0).
Function Calling (Chamada de Funções ou Tool Calling) transforma o gerador de texto em um orquestrador de sistemas. O modelo analisa o prompt, entende que lhe faltam dados e, em vez de gerar texto, produz um JSON legível por máquina:
{
"name": "fetch_user_balance",
"arguments": "{\"account_id\": \"ACC-9481\"}"
}
Modelo mental: se a LLM é o cérebro, então o Function Calling são os impulsos nervosos que enviam comandos aos músculos (seu código e APIs) para executar uma ação física.
┌─────────────────────────────────────────────────────────────┐
│ ARQUITETURA DE FUNCTION CALLING │
├─────────────────────────────────────────────────────────────┤
│ 1. SOLICITAÇÃO DO USUÁRIO: │
│ «Qual é o clima em Lviv?» │
├─────────────────────────────────────────────────────────────┤
│ │ │
│ ▼ Solicitação ao LLM (com esquema) │
├─────────────────────────────────────────────────────────────┤
│ 2. RESPOSTA DO LLM (finish_reason: "tool_calls"): │
│ { "name": "get_weather", "args": { "city": "Lviv" } } │
├─────────────────────────────────────────────────────────────┤
│ │ │
│ ▼ Backend executa chamada real à API│
├─────────────────────────────────────────────────────────────┤
│ 3. SEU SERVIDOR ➔ OpenWeatherMap ➔ Recebe { temp: 18, rain: 0}│
├─────────────────────────────────────────────────────────────┤
│ │ │
│ ▼ Envio do resultado de volta ao LLM│
├─────────────────────────────────────────────────────────────┤
│ 4. RESPOSTA FINAL PARA O HUMANO: │
│ «Em Lviv está +18°C agora, sem chuva, bom dia!» │
└─────────────────────────────────────────────────────────────┘
2. Exemplo prático: descrição do esquema e chamada via cURL
Veja como fica o registro de uma ferramenta no padrão OpenAI / Anthropic Tool Calling:
curl https://api.openai.com/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d '{
"model": "gpt-4o",
"messages": [
{"role": "user", "content": "Заблокуй картку користувача 5501"}
],
"tools": [
{
"type": "function",
"function": {
"name": "block_payment_card",
"description": "Безпечне блокування банківської картки користувача у разі втрати",
"parameters": {
"type": "object",
"properties": {
"card_id": {
"type": "integer",
"description": "Унікальний ідентифікатор картки в системі"
},
"reason": {
"type": "string",
"enum": ["lost", "stolen", "fraud"],
"description": "Причина блокування"
}
},
"required": ["card_id", "reason"]
}
}
}
],
"tool_choice": "auto"
}'
O que o modelo retorna:
{
"role": "assistant",
"content": null,
"tool_calls": [
{
"id": "call_abc123",
"type": "function",
"function": {
"name": "block_payment_card",
"arguments": "{\"card_id\": 5501, \"reason\": \"lost\"}"
}
}
]
}
3. Quatro regras de segurança ao trabalhar com Function Calling
- Validação estrita dos argumentos (Pydantic / Zod): Nunca confie cegamente nos argumentos vindos do JSON do modelo. Sempre faça o parsing deles através de um esquema de validação antes de executar uma query SQL ou debitar fundos.
- Gateway de aprovação para ações destrutivas (Human-in-the-Loop): Se a função executa uma operação irreversível (
delete_database,transfer_funds), o backend deve interromper a execução e solicitar a confirmação de um humano real. - Limitação do contexto das ferramentas: Não passe centenas de funções para o modelo simultaneamente. Isso dilui a atenção (Attention Saturation) e aumenta a probabilidade de chamadas incorretas. Use filtragem dinâmica ou MCP.
- Proteção contra loops infinitos (Infinite Tool Loop): Sempre defina um limite rígido para o número de chamadas sequenciais de funções (por exemplo, não mais que 5 iterações por requisição).
4. Conclusão final
O Function Calling é a ponte que conectou o mundo da modelagem estatística de linguagem ao mundo determinístico da programação. É exatamente esse mecanismo que constitui o núcleo de todos os agentes de IA modernos, servidores MCP e assistentes autônomos de desenvolvimento.
FAQ: Chamada de Funções (Function Calling / Tool Calling)
Termos relacionados
Schemas de Ferramentas (Tools & JSON Schema)
Padrão para a descrição formalizada das interfaces de ferramentas (Tools) para grandes modelos de linguagem, utilizando o padrão JSON Schema. Inclui o nome da função, uma descrição textual detalhada do seu propósito, a lista de parâmetros obrigatórios e os tipos de valores.
Agentes de IA (Agentes Autônomos)
Sistema autônomo baseado em um grande modelo de linguagem que não apenas responde a mensagens, mas planeja independentemente uma sequência de ações, utiliza ferramentas externas (navegador, terminal, bancos de dados) e executa tarefas complexas sem supervisão humana constante.
Ciclo de Ação do Agente (Thought ➔ Action ➔ Observation / ReAct)
Padrão algorítmico fundamental para o funcionamento de agentes autônomos (conhecido como ReAct: Reasoning + Acting). Consiste em um ciclo contínuo de três etapas: 1) Thought (Pensamento) — análise da situação; 2) Action (Ação) — invocação de uma ferramenta; 3) Observation (Observação) — análise do resultado e ajuste do plano.
MCP (Model Context Protocol)
Padrão aberto da Anthropic baseado em JSON-RPC 2.0 para conexão bidirecional unificada de assistentes de IA a ferramentas externas, bancos de dados e ambientes do sistema.