roteiavários modelos de IA, em reais
GuiasFERRAMENTAS

Tool calling em APIs de IA: seu código decide se executa.

O ciclo entre modelo, aplicação e sistema externo, com os controles necessários para transformar intenção em ação segura.

Revisado em pela equipe da Roteia.

Tool calling permite oferecer funções ao modelo, como consultar bancos de dados, chamar APIs externas, buscar uma agenda ou calcular um frete. Assim, o modelo pode propor etapas em fluxos de trabalho e usar dados em tempo real sem receber permissão direta para executar ações. Quem valida e executa é a sua aplicação.

Essa fronteira é a parte mais importante do recurso. Texto probabilístico sugere uma operação; código determinístico verifica identidade, permissão, formato, limite e efeito. Tratar os argumentos do modelo como comando confiável abre o caminho para consulta indevida, cobrança duplicada ou ação diferente da que o usuário autorizou.

Este guia percorre o ciclo completo em APIs compatíveis com OpenAI e mostra onde colocar validação, confirmação, idempotência e observabilidade. Na Roteia, tools só podem ser enviadas para modelos que declaram essa capacidade no catálogo.

As quatro etapas de uma chamada de ferramenta

Primeiro, a aplicação descreve as funções disponíveis. Cada definição tem nome, finalidade e parâmetros em formato semelhante a JSON Schema. Segundo, envia essas definições junto com a conversa. Terceiro, o modelo decide responder em texto ou emitir uma ou mais tool calls com nome e argumentos. Quarto, a aplicação executa as chamadas aprovadas e devolve os resultados ao modelo, ligados pelos identificadores corretos.

Uma resposta final pode exigir duas requisições ao modelo. Na primeira ele pede buscar_pedido com um ID. Seu backend consulta o sistema. Na segunda, você envia o resultado como mensagem de ferramenta e pede ao modelo que explique ao cliente. Chamadas em sequência repetem esse ciclo; chamadas paralelas produzem mais de uma solicitação no mesmo turno.

O modelo não deve receber uma ferramenta genérica como executar_sql ou fazer_requisicao. Funções estreitas expressam intenção e deixam a autorização verificável: consultar_status_pedido, simular_frete e solicitar_cancelamento têm riscos e regras diferentes.

Descrição e schema fazem parte do produto

O nome precisa dizer o que acontece; a descrição deve explicar quando usar e quando não usar. Parâmetros obrigatórios devem ser realmente necessários. Use tipos, enumerações e limites para reduzir ambiguidades. Se status aceita apenas aberto, pago e cancelado, declare os três em vez de receber qualquer texto e tentar adivinhar depois.

Mesmo um schema estrito não comprova verdade. O modelo pode produzir um CPF com formato válido que não pertence ao cliente autenticado. Validação estrutural é a primeira camada; regras de negócio e autorização vêm depois. Recalcule preço, identidade e saldo no sistema responsável, nunca a partir do argumento sugerido.

Muitas ferramentas também ocupam janela de contexto e confundem escolha. Exponha somente as relevantes para a etapa. Um agente de suporte que precisa consultar pedido não deveria ver uma função de alterar limite financeiro. Menos opções bem descritas costumam ser mais seguras e mais fáceis de avaliar.

Definição de ferramenta
{
  "model": "COLE_UM_ID_COM_TOOLS_DO_CATALOGO",
  "messages": [{"role":"user","content":"Onde está o pedido 123?"}],
  "tools": [{
    "type": "function",
    "function": {
      "name": "consultar_status_pedido",
      "description": "Consulta um pedido que pertence ao cliente autenticado",
      "parameters": {
        "type": "object",
        "properties": {"id": {"type": "string"}},
        "required": ["id"],
        "additionalProperties": false
      }
    }
  }]
}

Valide como se os argumentos viessem da internet

Faça parse do JSON e valide contra um schema no servidor. Rejeite campo extra quando ele não tiver função, normalize identificadores e imponha tamanhos. Depois aplique o contexto autenticado: a pessoa pode consultar aquele pedido? A organização tem acesso ao projeto? A função está liberada naquele ambiente? O modelo não recebe o poder de responder essas perguntas.

Para leitura, aplique filtros no backend e devolva apenas os dados necessários. Para escrita, separe preparação de confirmação. Uma tool pode montar uma proposta de cancelamento e outra, chamada somente após confirmação explícita, efetivar. Valor, destinatário e consequência precisam aparecer ao usuário antes de dinheiro, mensagem ou exclusão.

Proteja também o retorno. Conteúdo vindo de página, e-mail ou banco pode conter instrução maliciosa tentando convencer o modelo a ignorar regras. Identifique o resultado como dado, limite seu tamanho e mantenha as instruções de segurança fora dele. O modelo pode resumir o resultado; não deve tratar texto recuperado como autoridade para ampliar permissão.

  • Autentique a pessoa e derive tenant no servidor.
  • Valide tipos, limites e relação entre campos.
  • Cheque autorização por operação e por recurso.
  • Peça confirmação humana para efeitos sensíveis.

Idempotência evita executar duas vezes

Rede falha, cliente repete e modelos podem pedir a mesma ação novamente. Toda operação com efeito material precisa de chave de idempotência definida pela aplicação e armazenada junto ao resultado. Se a mesma intenção chegar de novo, o serviço retorna o resultado anterior em vez de cobrar, enviar ou cancelar pela segunda vez.

Não use apenas o texto dos argumentos como chave. Duas operações legítimas podem ter valores iguais, e o modelo pode mudar ordem ou formatação. Combine identidade, operação e um identificador estável do fluxo criado no servidor. Defina também expiração e comportamento quando a primeira tentativa ficou em estado desconhecido.

Para ferramentas somente leitura, repetição costuma ser segura, mas ainda pode aumentar custo e atingir limite. Use cache quando a regra permitir e limite quantidade de chamadas por turno. Um loop em que o modelo chama a mesma consulta sem avançar precisa de condição de parada.

Devolva o resultado sem perder a ligação da chamada

A resposta do modelo traz um ID para cada tool call. Ao enviar o resultado, preserve esse ID no campo tool_call_id. Isso permite associar cada retorno à solicitação, principalmente quando há chamadas paralelas. Não invente um novo vínculo e não misture resultados em uma mensagem de usuário.

Retorne uma estrutura compacta e explícita. Em vez de despejar a linha inteira do banco, envie campos aprovados, estado e erro legível. Diferencie nao_encontrado, sem_permissao e indisponivel; dizer apenas “falhou” incentiva o modelo a preencher lacunas. Nunca esconda erro transformando-o em dado de sucesso.

Depois, o modelo pode gerar a fala final. A aplicação ainda deve validar saídas críticas. Se a ferramenta informou que o pagamento está pendente, a resposta não pode dizer que foi confirmado. Testes de integração precisam verificar esse vínculo e o efeito produzido, além de registrar qual função foi chamada.

Como testar um fluxo com tools

Crie casos em que a ferramenta deve ser chamada, não deve ser chamada e exige confirmação. Inclua argumento ausente, ID de outro cliente, retorno vazio, timeout e erro do sistema externo. Verifique nome escolhido, argumentos, autorização, número de execuções e resposta final. O teste só passa quando o efeito real corresponde à intenção permitida.

Avalie modelos com o mesmo conjunto e a mesma definição de tools. Meça taxa de escolha correta, validade dos argumentos, chamadas desnecessárias, recuperação após erro, tokens, latência e custo. Um modelo que chama mais ferramentas pode parecer ativo e ainda resolver menos tarefas.

Na Roteia, confira capabilities.tools na página do modelo antes de enviar tools. O gateway valida essa capacidade, mas não conhece as permissões do seu negócio nem executa suas funções. Essa responsabilidade continua no backend da aplicação.

Dúvidas frequentes

O modelo executa a função no tool calling?

Não. Ele produz o nome e os argumentos de uma chamada. A aplicação faz parse, valida permissão, executa o código e devolve o resultado ao modelo. Ferramentas hospedadas por um provedor são outro contrato e devem ser avaliadas separadamente.

Tool calling é a mesma coisa que structured output?

Não. Tool calling serve para pedir uma ação intermediária à aplicação. Structured output serve para formatar a resposta final conforme um schema. Os dois usam estrutura, mas têm ciclos e riscos diferentes.

Posso confiar nos argumentos se o schema for estrito?

Não. Schema prova formato, não verdade nem autorização. O servidor precisa confirmar identidade, relação com o recurso, limites e regras de negócio antes de executar.

Como evitar uma cobrança duplicada por ferramenta?

Use chave de idempotência criada no servidor, registre o resultado e devolva o mesmo estado quando a operação for repetida. Para dinheiro ou mensagem externa, separe proposta de confirmação e execução.

Todo modelo da Roteia aceita tools?

Não. O catálogo declara a capacidade por modelo. A Roteia rejeita uma chamada com tools quando o modelo escolhido não informa suporte, mas a execução e a segurança das funções continuam sob responsabilidade da sua aplicação.

Onde confirmar

Plataforma de terceiro muda de tela e de limite sem avisar. Confira na fonte oficial antes de tomar decisão baseada nesta página.

Quer testar com preço em Real antes de decidir?

Criar conta