Acelerando Chamadas de Ferramentas em Agentes de IA com Personalização de Modelos Sem Servidor no Amazon SageMaker

O Desafio da Chamada de Ferramentas em Agentes de IA

A capacidade de um agente de IA chamar as ferramentas corretas no momento adequado é o que o torna útil em produção. Sem isso, um agente não consegue consultar bancos de dados, disparar fluxos de trabalho, recuperar dados em tempo real ou agir em nome do usuário. Porém, modelos base frequentemente alucinam sobre quais ferramentas usar, passam parâmetros incorretos e tentam executar ações quando deveriam pedir esclarecimentos. Essas falhas prejudicam a confiança do usuário e impedem a implantação em produção.

A personalização de modelos sem servidor no Amazon SageMaker AI oferece uma solução. Usando Aprendizado de Reforço com Recompensas Verificáveis (RLVR, na sigla em inglês para Reinforcement Learning with Verifiable Rewards), o modelo gera suas próprias respostas candidatas, recebe um sinal indicando a qualidade, e atualiza seu comportamento para favorecer o que funciona. O processo é gerenciado totalmente pelo SageMaker AI, sem necessidade de gerenciar infraestrutura.

Como Funciona o RLVR para Chamada de Ferramentas

A chamada de ferramentas tem um objetivo naturalmente verificável: o modelo chamou a função correta com os parâmetros corretos? Essa característica a torna um caso de uso perfeito para RLVR.

O desafio com aprendizado de reforço autogestionado é a complexidade operacional. Procurement de GPUs, orquestração de memória entre fases de rollout e treinamento, infraestrutura de recompensa e checkpoint acumulam rapidamente. A sensibilidade a hiperparâmetros adiciona outra camada de complexidade. O SageMaker AI assume esse trabalho, permitindo que você se concentre no modelo, nos dados e na função de recompensa.

O SageMaker AI suporta famílias de modelos que incluem Amazon Nova, GPT-OSS, Llama, Qwen e DeepSeek, com técnicas como Supervised Fine-Tuning (SFT), Direct Preference Optimization (DPO), RLVR e Reinforcement Learning from AI Feedback (RLAIF). As métricas de treinamento e validação são rastreadas por integração com MLflow.

Por Que RLVR é Melhor que SFT para Chamada de Ferramentas

Supervised Fine-Tuning (SFT) requer exemplos rotulados de cada comportamento que você quer que o modelo aprenda. Para chamada de ferramentas, isso significa exemplos de chamar uma ferramenta, pedir esclarecimentos e recusar. Mas chamada de ferramentas também exige que o modelo decida entre esses comportamentos, e SFT frequentemente não consegue generalizar essa tomada de decisão além dos padrões específicos nos dados de treinamento.

RLVR funciona de forma diferente. Para cada prompt, o modelo gera múltiplas respostas candidatas (neste exemplo, oito). Uma função de recompensa verifica quais estão corretas. O modelo então atualiza sua política para favorecer o que funcionou, usando Group Relative Policy Optimization (GRPO). GRPO compara a pontuação de recompensa de cada candidato contra a pontuação média do grupo e reforça respostas que pontuam acima da média. Com o tempo, o modelo aprende o formato de uma chamada de ferramenta e quando chamar em comparação com quando pedir.

Preparação de Dados para Treinamento

Um dataset de chamada de ferramentas precisa ensinar mais do que invocações corretas de API. Agentes em produção enfrentam três situações distintas:

  • O usuário fornece informação suficiente e o modelo deve chamar uma ferramenta
  • A solicitação do usuário está faltando parâmetros obrigatórios e o modelo deve pedir esclarecimentos
  • A solicitação é prejudicial ou fora do escopo e o modelo deve recusar

Foram gerados 1.500 exemplos de treinamento sintéticos a partir de esquemas de ferramentas (previsão de clima, busca de voos, tradução, conversão de moeda, estatísticas) usando Kiro, um IDE com IA, para produzir prompts com variação realista em fraseado e especificidade entre os três comportamentos.

O formato segue um padrão JSONL simples, onde cada linha contém um prompt (instrução do sistema e solicitação do usuário) e uma verdade fundamental (ground truth) no campo reward_model que a função de recompensa usa para avaliar.

Exemplos dos Três Comportamentos

Executar quando o usuário fornece tudo o que a ferramenta precisa:

{
  "prompt": [
    {"role": "system", "content": "You are a helpful assistant. When using tools, respond with: [...]"},
    {"role": "user", "content": "Get weather for San Francisco"}
  ],
  "reward_model": {
    "ground_truth": "[{\"name\": \"get_weather_forecast\", \"arguments\": {\"city\": \"San Francisco\"}}]"
  }
}

Esclarecer quando um parâmetro obrigatório está faltando:

{
  "prompt": [
    {"role": "system", "content": "You are a helpful assistant. When using tools, respond with: [...]"},
    {"role": "user", "content": "Get the weather"}
  ],
  "reward_model": {
    "ground_truth": "To provide you with the weather information, could you please specify the location?"
  }
}

Executar com múltiplos parâmetros:

{
  "prompt": [
    {"role": "system", "content": "You are a helpful assistant. When using tools, respond with: [...]"},
    {"role": "user", "content": "Convert 50 EUR to USD"}
  ],
  "reward_model": {
    "ground_truth": "[{\"name\": \"currency_convert\", \"arguments\": {\"amount\": 50, \"from\": \"EUR\", \"to\": \"USD\"}}]"
  }
}

Note a diferença entre “Get weather for San Francisco” (chamada de ferramenta) e “Get the weather” (pedido de esclarecimento). Essa é a distinção que GRPO aprende bem. Para cada prompt, o modelo gera oito candidatos, a função de recompensa os pontua, e as pontuações são calculadas na média do grupo. Candidatos acima da média são reforçados, e com o tempo o modelo aprende quando chamar e quando pedir.

Definindo a Função de Recompensa

A função de recompensa define o que significa “correto” para o seu caso de uso. É escrita como uma função Python que recebe a resposta do modelo e a verdade fundamental dos dados de treinamento, retornando uma pontuação numérica.

A função extrai chamadas de ferramentas da resposta do modelo, as analisa como JSON e as compara contra a verdade fundamental. A lógica de pontuação completa lida com extração de resposta, análise flexível para formatos alternativos durante o treinamento inicial e casos extremos em torno de incompatibilidades de tipo JSON.

Aqui está a lógica de pontuação central:

# After extracting and parsing tool calls from model response and ground truth:
# Compare tool names
pred_names = {tool.get('name', '') for tool in pred_tools}
gt_names = {tool.get('name', '') for tool in gt_tools}
if pred_names == gt_names:
    # Right function(s) - check if arguments also match
    perfect_match = True
    for pred_tool in pred_tools:
        for gt_tool in gt_tools:
            if pred_tool.get('name') == gt_tool.get('name'):
                if pred_tool.get('arguments') != gt_tool.get('arguments'):
                    perfect_match = False
    score = 1.0 if perfect_match else 0.5
elif pred_names & gt_names:
    # Partial overlap in function names
    score = 0.5
else:
    # Wrong function entirely
    score = 0.0

Os três níveis (1.0, 0.5 e 0.0) dão a GRPO um sinal de aprendizado mais rico. Se vários dos oito candidatos acertam a função mas perdem um parâmetro, a pontuação 0.5 os distingue de respostas completamente erradas. Isso ajuda o modelo a reconhecer que está no caminho certo. Para casos de esclarecimento e recusa onde a verdade fundamental é linguagem natural (sem tags TOOLCALL), a função de recompensa verifica se o modelo também evitou chamar uma ferramenta. Uma chamada de API desnecessária quando o modelo deveria ter feito uma pergunta ganha 0.0.

Configuração de Treinamento e Resultados

Na página de configuração de personalização, você aponta para seu dataset de treinamento e função de recompensa, depois define seus hiperparâmetros. Neste exemplo, foram usados tamanho de lote 128, taxa de aprendizado de 5e-6, 3 épocas e 8 rollouts por prompt. A configuração de rollouts é o mecanismo central de GRPO. Para cada prompt de treinamento, o modelo gera oito respostas diferentes, a função de recompensa pontua cada uma, e respostas que pontuam acima da média do grupo são reforçadas. Métricas de treinamento e validação são registradas no MLflow.

Em um exemplo prático, o treinamento levou aproximadamente 40 minutos. A métrica de Estatísticas de Recompensa de Treinamento (a mais importante) mostra que a recompensa média entre os rollouts começou em torno de 0.28 e subiu para 0.65–0.68 em 30 etapas, mais que dobrando. Os ganhos mais acentuados acontecem nos primeiros 10 passos conforme o modelo aprende o formato básico de chamada de ferramenta e a estrutura de decisão. Depois estabiliza após a etapa 20 conforme converge.

Imagem original — fonte: Aws

Os outros gráficos confirmam treinamento saudável. Policy Entropy diminui, significando que o modelo está ficando mais confiante em vez de adivinhar. Gradient Norm se estabiliza, significando que atualizações estão ficando menores e mais refinadas. Mean Advantage Estimate converge para zero, indicando que a política do modelo está estabilizando e a qualidade média de resposta está se alinhando com a linha de base de recompensa.

Avaliação em Dados Não Vistos

Após o treinamento ser concluído, você pode ver os modelos criados. É possível escolher continuar a personalização para iterar mais ajustando hiperparâmetros ou treinando com uma técnica diferente. Você também pode avaliar para comparar seu modelo personalizado contra o modelo base.

A avaliação acontece em um conjunto de teste separado de 300 exemplos que foram excluídos do treinamento. O dataset de avaliação cobre os mesmos três comportamentos mas inclui ferramentas, fraseados e cenários que o modelo nunca viu. Testa search_restaurants, get_stock_price e calculate_standard_deviation, nenhum deles apareceu durante o treinamento. Inclui também casos de recusa para solicitações prejudiciais como gerar conteúdo violento ou criar malware, testando se o modelo generaliza comportamento seguro para ameaças novas.

A avaliação executa métricas NLP padrão juntamente com sua função de recompensa personalizada contra o conjunto mantido em separado:

  • Tool Call Reward é sua métrica personalizada e a medida mais direta do que você treinou. Saltou de 0.35 para 0.55, uma melhoria de 57%. Em termos práticos, isso significa que o modelo fine-tuned toma a decisão correta de chamada de ferramenta significativamente mais frequentemente. Chama a função correta com os parâmetros corretos quando deve, pede esclarecimento quando informação está faltando e recusa quando apropriado.
  • F1 Score, Rouge1 e RougeL melhoraram 14–19 pontos percentuais, refletindo melhor geração de nomes de função corretos, chaves de parâmetros e valores em todo o contexto.
  • Exact Match dobrou de 11% para 21%. Essa métrica requer correspondência de saída caractere-por-caractere, então até pequenas diferenças de formatação contam como erro. Os 21% de correspondência exata ao lado de 64.6% F1 sugerem que o modelo frequentemente acerta a semântica mesmo quando a formatação da superfície difere ligeiramente.

Todos os resultados estão em dados mantidos em separado com ferramentas e cenários que o modelo não viu durante o treinamento. As melhorias se transferem para ferramentas novas, significando que o modelo aprendeu padrões gerais de chamada de ferramenta em vez de memorizar o conjunto de treinamento.

Exemplos de Respostas do Modelo Fine-Tuned

Execução de ferramenta:

Prompt: "What's the stock price of AMZN?"

Resposta do modelo: [{"name": "get_stock_price", "arguments": {"ticker": "AMZN"}}]

Esclarecimento:

Prompt: "Find me a restaurant nearby"

Resposta do modelo: "I'd be happy to help you find a restaurant! Could you please provide the cuisine type or location you're interested in?"

Quase acerto:

Prompt: "What's the standard deviation of 10, 20, 30, 40, 50?"

Resposta do modelo: [{"name": "calculate_standard_deviation", "arguments": {"numbers": "10, 20, 30, 40, 50"}}]

No caso de quase acerto, o modelo selecionou a ferramenta correta mas passou os números como string em vez de array. Isso recebe uma pontuação de recompensa de 0.5 (função correta, formato de parâmetro errado) e representa o tipo de erro que você teria como alvo em próxima iteração através de dados de treinamento adicional ou refinamento da função de recompensa.

Implantação do Modelo Fine-Tuned

Com avaliação confirmando melhoria, você pode implantar o modelo fine-tuned diretamente da página de detalhes do modelo. Escolha Implantar e selecione seu alvo de implantação: seja um endpoint do SageMaker AI ou Amazon Bedrock. Você também pode baixar os pesos do modelo de Amazon S3 para implantação autogestionada.

Próximos Passos para Melhorias

Para aumentar a precisão, você pode expandir seus dados de treinamento com ferramentas adicionais, casos extremos e conversas multi-turn para cobrir mais dos cenários que seus agentes encontram em produção. Você também pode refinar sua função de recompensa para penalizar modos de falha específicos, como o problema string-vs-array mostrado anteriormente, ou adicionar crédito parcial para outros padrões de quase acerto.

Se você estiver executando fluxos de trabalho com agentes, seus logs de produção são uma fonte de dados de treinamento de alta qualidade que pode tornar o modelo ainda mais eficaz para seu caso de uso específico.

Além de chamada de ferramentas, RLVR se aplica a outras tarefas de raciocínio onde a correção é verificável, como planejamento multi-etapa, extração de dados estruturados ou geração de código.

Acessando a Funcionalidade

Embora este artigo caminhe através do fluxo de trabalho de interface do usuário, um SDK para acesso programático também está disponível. Para mais informações, consulte a documentação de personalização de modelo SageMaker AI.

Para começar, experimente personalização de modelo de IA sem servidor no Amazon SageMaker AI com seus próprios casos de uso.

Fonte

Accelerate agentic tool calling with serverless model customization in Amazon SageMaker AI (https://aws.amazon.com/blogs/machine-learning/accelerate-agentic-tool-calling-with-serverless-model-customization-in-amazon-sagemaker-ai/)

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *