Skip to main content

Chamada de Funções (Function Calling / Tool Calling)

PARA AGENTES DE IAChatGPTClaude

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

  1. 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.
  2. 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.
  3. 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.
  4. 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.

/ Perguntas FrequentesSchema.org FAQPage

FAQ: Chamada de Funções (Function Calling / Tool Calling)

Absolutamente não! O modelo é um processador textual-matemático isolado. Ele não tem acesso direto ao seu banco de dados ou rede. Ele apenas gera tokens no formato JSON com uma solicitação ao seu servidor: 'Execute get_user_balance(user_id=42)'. O código real é sempre executado pelo seu backend hospedado.
/ Links internos
Todos os termos