Home / Inteligência Artificial / Guia Prático para Fine-Tuning por Reforço no Amazon Bedrock com APIs Compatíveis OpenAI

Guia Prático para Fine-Tuning por Reforço no Amazon Bedrock com APIs Compatíveis OpenAI

Em dezembro de 2025, a Amazon anunciou a disponibilidade do Reinforcement Fine-Tuning (RFT) no Amazon Bedrock, inicialmente para modelos Nova, ampliando em fevereiro de 2026 para modelos Open weight como OpenAI GPT OSS 20B e Qwen 3 32B. Essa técnica representa uma evolução na personalização de grandes modelos de linguagem (LLMs), permitindo que eles aprendam a partir de um ciclo iterativo de feedback, em vez de depender exclusivamente de grandes datasets rotulados.

\n\n

Como Funciona o Fine-Tuning por Reforço (RFT)

\n

O RFT difere do fine-tuning supervisionado tradicional ao permitir que o modelo aprenda com múltiplas respostas geradas, avaliadas por uma função de recompensa que atribui notas conforme a qualidade das respostas. Esse processo se assemelha ao treinamento de um jogador de xadrez que aprende com suas jogadas, recebendo feedback sobre quais estratégias levam à vitória.

\n

Os componentes-chave do RFT incluem:

\n

    \n

  • Modelo ator (policy): o modelo base que será ajustado (ex: Amazon Nova, Llama, Qwen).
  • \n

  • Estado (state): o contexto da interação, incluindo prompt, histórico de conversa e metadados.
  • \n

  • Ação (action): a resposta gerada pelo modelo ao prompt.
  • \n

  • Função de recompensa: avalia a qualidade da resposta com base em critérios específicos, fornecendo um escore numérico que guia o aprendizado.
  • \n

\n

Uma vantagem significativa do RFT é o aprendizado online, onde o modelo explora e melhora continuamente a partir das respostas geradas durante o treinamento, sem necessidade de pré-coleta e rotulagem massiva de dados.

\n\n

Fluxo de Trabalho Completo no Amazon Bedrock

\n

O RFT no Amazon Bedrock automatiza todo o pipeline de personalização, permitindo que equipes foquem na solução do problema e não na infraestrutura. O processo inclui:

\n

    \n

  1. Configurar a autenticação usando a API key do Bedrock.
  2. \n

  3. Fazer upload dos dados de treinamento no formato JSONL via Files API.
  4. \n

  5. Implementar a função de recompensa como uma função AWS Lambda para avaliação das respostas.
  6. \n

  7. Iniciar o job de fine-tuning utilizando o motor GRPO, que gerencia geração, avaliação e atualização do modelo.
  8. \n

  9. Monitorar o progresso do treinamento via API e dashboards do Amazon Bedrock.
  10. \n

  11. Executar inferência sob demanda no modelo ajustado, sem necessidade de provisionamento de endpoint.
  12. \n

\n

Durante todo o processo, os dados permanecem seguros dentro do ambiente AWS e não são usados para treinar modelos padrão do Bedrock.

\n\n

Pré-requisitos para Começar

\n

    \n

  • Conta AWS com acesso ao Amazon Bedrock em região suportada.
  • \n

  • Chave API do Bedrock (preferencialmente de curta duração para segurança).
  • \n

  • Permissões IAM adequadas para execução de Lambda e fine-tuning no Bedrock.
  • \n

  • Ambiente Python com as bibliotecas openai, boto3 e aws-bedrock-token-generator instaladas.
  • \n

\n\n

Passo a Passo Técnico

\n\n

1. Configurar o Cliente OpenAI

\n

Use o SDK OpenAI padrão apontando para o endpoint Mantle do Bedrock, autenticando com a API key gerada pela biblioteca aws-bedrock-token-generator:

\n

from openai import OpenAI\nfrom aws_bedrock_token_generator import provide_token\n\nAWS_REGION = "us-west-2"\nMANTLE_ENDPOINT = f"https://bedrock-mantle.{AWS_REGION}.api.aws"\n\nclient = OpenAI(\n    base_url=f"{MANTLE_ENDPOINT}/v1",\n    api_key=provide_token(region=AWS_REGION),\n)

\n\n

2. Preparar e Enviar Dados de Treinamento

\n

Os dados devem estar no formato JSONL, com cada linha contendo um campo messages (lista de mensagens com papéis e conteúdos) e opcionalmente reference_answer para a função de recompensa. Exemplo para dataset GSM8K:

\n

{\n  "messages": [\n    {"role": "user", "content": "Problema matemático formatado com instruções para raciocínio e resposta final."}\n  ],\n  "reference_answer": "72"\n}

\n

Use a função helper disponível no repositório GitHub para converter dados GSM8K para esse formato.

\n

Faça upload via Files API:

\n

with open("rft_train_data.jsonl", "rb") as f:\n    file_response = client.files.create(file=f, purpose="fine-tune")\ntraining_file_id = file_response.id\nprint(f"Training file uploaded: {training_file_id}")

\n\n

3. Implementar a Função Lambda de Recompensa

\n

A função Lambda recebe as respostas geradas e retorna uma pontuação (0 ou 1) comparando a resposta com o gabarito. Exemplo simplificado:

\n

def lambda_handler(event, context):\n    trajectories = event if isinstance(event, list) else event.get("trajectories", [])\n    scores = []\n    for trajectory in trajectories:\n        response = next((msg.get("content", "") for msg in reversed(trajectory.get("messages", [])) if msg.get("role") == "assistant"), "")\n        ground_truth = extract_ground_truth(trajectory.get("reference_answer", {}))\n        score = 1.0 if response_matches_ground_truth(response, ground_truth) else 0.0\n        scores.append({"aggregate_reward_score": score})\n    return scores

\n

Configure a função com timeout de 5 minutos e memória de 512 MB. Para tarefas subjetivas, o Bedrock também suporta uso de modelos como juízes.

\n\n

4. Criar o Job de Fine-Tuning

\n

Com uma única chamada API, inicie o treinamento:

\n

job_response = client.fine_tuning.jobs.create(\n    model="openai.gpt-oss-20b",\n    training_file=training_file_id,\n    extra_body={\n        "method": {\n            "type": "reinforcement",\n            "reinforcement": {\n                "grader": {\n                    "type": "lambda",\n                    "lambda": {"function": lambda_arn}\n                },\n                "hyperparameters": {\n                    "n_epochs": 1,\n                    "batch_size": 4,\n                    "learning_rate_multiplier": 1.0\n                }\n            }\n        }\n    }\n)\njob_id = job_response.id

\n

Parâmetros importantes:

  • n_epochs: número de passagens completas sobre os dados (recomenda-se começar com 1).
  • batch_size: quantidade de prompts por passo (maior traz maior estabilidade).
  • learning_rate_multiplier: multiplicador da taxa de aprendizado (valor menor que 1.0 para estabilidade).

\n\n

5. Monitorar o Treinamento

\n

Use a API para listar eventos do job e acompanhar métricas como média de recompensas, perda, entropia e tamanho das respostas. Alguns indicadores importantes:

\n

    \n

  • critic_rewards_mean: média da pontuação, deve subir ao longo do treinamento.
  • \n

  • actor_entropy: indica diversidade das respostas, não deve colapsar para zero.
  • \n

  • actor_grad_norm: magnitude das atualizações, picos podem indicar instabilidade.
  • \n

  • response_length_mean: tamanho médio das respostas, monitorar para evitar que o modelo “trapaceie” aumentando a resposta para obter mais recompensa.
  • \n

\n\n

Links Úteis para Implementação

\n

\n\n

Este guia oferece um roteiro prático para quem deseja explorar o fine-tuning por reforço em modelos de linguagem com o Amazon Bedrock, utilizando APIs compatíveis com OpenAI e aproveitando a infraestrutura escalável e segura da AWS.

Marcado:

Deixe um Comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *