Cheatsheet ART (Agent Reinforcement Trainer)
ART (Agent Reinforcement Trainer) pela OpenPipe é um framework de código aberto para treinar agentes baseados em LLM com aprendizado por reforço, primariamente com GRPO. Sua ideia definidora é uma arquitetura dividida: um cliente leve executa rollouts do seu agente em seu próprio código através de um endpoint compatível com OpenAI, enquanto um servidor/backend lida com inferência (vLLM) e treinamento (GRPO potenciado por Unsloth), opcionalmente em uma máquina GPU separada. Isso o torna bem adequado para agentes multi-turno e que usam ferramentas que precisam de treinamento “on-the-job” contra uma recompensa.
O aprendizado por reforço pode ser instável e exigir muita computação. Comece pequeno, registre tudo, e valide uma função de recompensa em alguns rollouts antes de escalar.
Instalação
| Passo | Comando |
|---|
| Instalar | pip install openpipe-art |
| Com extras (backend) | pip install "openpipe-art[backend]" |
| uv | uv add openpipe-art |
| Requisitos | Uma GPU CUDA para o backend (treinamento/inferência) |
Conceitos Principais
| Termo | Significado |
|---|
| Model | Um identificador de modelo treinável (art.TrainableModel) registrado em um backend |
| Backend | Onde inferência + treinamento são executados (GPU local ou remoto) |
| Rollout | Um episódio de agente que produz uma trajetória e uma recompensa |
| Trajectory | As mensagens/chamadas-de-ferramentas/escolhas que ART pondera e aprende |
| GRPO | Group Relative Policy Optimization — o algoritmo RL padrão |
| Reward | Um escalar que seu código atribui a uma trajetória (maior = melhor) |
Definindo um Model
import art
model = art.TrainableModel(
name="agent-001",
project="my-agent",
base_model="Qwen/Qwen2.5-7B-Instruct",
)
backend = art.LocalBackend() # or a remote backend
await model.register(backend)
| Objeto | Propósito |
|---|
art.TrainableModel(...) | A política que você está treinando |
art.LocalBackend() | Executa inferência + treinamento na GPU local |
model.register(backend) | Liga um modelo a um backend |
model.openai_client() | Cliente compatível com OpenAI para rollouts |
Escrevendo um Rollout
import art, weave
@weave.op
async def rollout(model: art.Model, scenario) -> art.Trajectory:
client = model.openai_client()
traj = art.Trajectory(messages_and_choices=[], reward=0.0)
messages = [{"role": "user", "content": scenario.prompt}]
completion = await client.chat.completions.create(
model=model.name, messages=messages,
)
choice = completion.choices[0]
traj.messages_and_choices.append(choice)
traj.reward = score(choice.message.content, scenario) # your reward fn
return traj
Loop de Treinamento
for step in range(NUM_STEPS):
groups = await art.gather_trajectory_groups(
(art.TrajectoryGroup(rollout(model, s) for _ in range(GROUP_SIZE))
for s in scenarios)
)
await model.train(groups, config=art.TrainConfig(learning_rate=1e-5))
| Chamada | Descrição |
|---|
art.TrajectoryGroup(...) | Um grupo de rollouts comparados uns contra os outros (GRPO) |
art.gather_trajectory_groups(...) | Executa rollouts concorrentemente e coleta grupos |
model.train(groups, config=...) | Uma atualização GRPO dos grupos coletados |
art.TrainConfig(...) | Taxa de aprendizado e hiperparâmetros de treinamento |
model.get_step() | Passo de treinamento atual (para checkpoint/resume) |
Dicas de Design de Recompensa
| Diretriz | Por quê |
|---|
| Mantenha recompensas limitadas | Estabiliza estimativas de vantagem do GRPO |
| Recompense o resultado, não a redação | Evita reward hacking na redação |
| Adicione pequeno shaping para sucesso de ferramenta | Ajuda na atribuição de crédito multi-passo |
| Use RULER para pontuação relativa | Helper do ART para classificar trajetórias em um grupo quando não há métrica limpa |
Observabilidade
| Ferramenta | Integração |
|---|
| Weights & Biases | Registro nativo de curvas de recompensa/perda |
| Weave | Decora rollouts com @weave.op para captura de trace |
| LangfuseTracing | Suportado para inspeção de trajetória |
ART vs Outros Trainers de RL
| Aspecto | ART | OpenRLHF | verl |
|---|
| Foco | Agentes multi-passo | RLHF escalável | RL de alto rendimento |
| Arquitetura | Cliente/servidor dividido | Ray + vLLM | Ray + vLLM |
| Backend | vLLM + Unsloth | vLLM | vLLM |
| Melhor para | Agentes treinados em seu próprio código | Pipelines RLHF em larga escala | Pesquisa de alto rendimento |
Recursos