Cheatsheet ART (Agent Reinforcement Trainer)
ART (Agent Reinforcement Trainer) di OpenPipe è un framework open-source per l’addestramento di agenti basati su LLM con apprendimento per rinforzo, principalmente GRPO. L’idea distintiva è un’architettura split: un client leggero esegue i rollout del tuo agente nel tuo codice attraverso un endpoint compatibile con OpenAI, mentre un server/backend gestisce l’inferenza (vLLM) e l’addestramento (GRPO potenziato da Unsloth), opzionalmente su una macchina GPU separata. Questo la rende ben adatta ad agenti multi-turn che utilizzano strumenti e hanno bisogno di addestramento “on-the-job” rispetto a un reward.
L’apprendimento per rinforzo può essere instabile e affamato di calcolo. Inizia in piccolo, registra tutto, e convalida una funzione di reward su una manciata di rollout prima di scalare.
Installation
| Passaggio | Comando |
|---|
| Installa | pip install openpipe-art |
| Con extras (backend) | pip install "openpipe-art[backend]" |
| uv | uv add openpipe-art |
| Requisiti | Una GPU CUDA per il backend (addestramento/inferenza) |
Concetti fondamentali
| Termine | Significato |
|---|
| Model | Un handle di modello addestrabile (art.TrainableModel) registrato con un backend |
| Backend | Dove eseguono l’inferenza + addestramento (GPU locale o remota) |
| Rollout | Un episodio di agente che produce una traiettoria e un reward |
| Trajectory | I messaggi/tool-call/scelte che ART valuta e impara |
| GRPO | Group Relative Policy Optimization — l’algoritmo RL predefinito |
| Reward | Uno scalare che il tuo codice assegna a una traiettoria (più alto = migliore) |
Definizione di un modello
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)
| Oggetto | Scopo |
|---|
art.TrainableModel(...) | La policy che stai addestrando |
art.LocalBackend() | Esegui inferenza + addestramento sulla GPU locale |
model.register(backend) | Associa un modello a un backend |
model.openai_client() | Client compatibile con OpenAI per i rollout |
Scrittura di un 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 di addestramento
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))
| Chiamata | Descrizione |
|---|
art.TrajectoryGroup(...) | Un gruppo di rollout confrontati tra loro (GRPO) |
art.gather_trajectory_groups(...) | Esegui i rollout concorrentemente e raccogli i gruppi |
model.train(groups, config=...) | Un aggiornamento GRPO dai gruppi raccolti |
art.TrainConfig(...) | Learning rate e iperparametri di addestramento |
model.get_step() | Passaggio di addestramento attuale (per checkpoint/resume) |
Suggerimenti per la progettazione dei reward
| Linea guida | Perché |
|---|
| Mantieni i reward limitati | Stabilizza le stime dei vantaggi GRPO |
| Premia l’esito, non la formulazione | Evita l’hacking dei reward sulla formulazione |
| Aggiungi piccolo shaping per il successo dello strumento | Aiuta l’assegnazione di credito multi-step |
| Usa RULER per la valutazione relativa | L’helper di ART per classificare le traiettorie in un gruppo quando non esiste una metrica pulita |
Osservabilità
| Strumento | Integrazione |
|---|
| Weights & Biases | Registrazione nativa delle curve di reward/loss |
| Weave | Decora i rollout con @weave.op per l’acquisizione di tracce |
| LangfuseTracing | Supportato per l’ispezione delle traiettorie |
ART vs altri trainer RL
| Aspetto | ART | OpenRLHF | verl |
|---|
| Focus | Agenti multi-step | RLHF scalabile | RL ad alto throughput |
| Architettura | Split client/server | Ray + vLLM | Ray + vLLM |
| Backend | vLLM + Unsloth | vLLM | vLLM |
| Migliore per | Agenti addestrati nel tuo codice | Pipeline RLHF su larga scala | Throughput di ricerca |
Risorse