Guía de Referencia de ART (Agent Reinforcement Trainer)
ART (Agent Reinforcement Trainer) de OpenPipe es un marco de código abierto para entrenar agentes basados en LLM con aprendizaje por refuerzo, principalmente GRPO. Su idea definitoria es una arquitectura dividida: un cliente ligero ejecuta los rollouts de tu agente en tu propio código a través de un endpoint compatible con OpenAI, mientras que un servidor/backend maneja inferencia (vLLM) y entrenamiento (GRPO impulsado por Unsloth), opcionalmente en una máquina GPU separada. Esto la hace bien adaptada para agentes multi-turno que usan herramientas y necesitan entrenamiento “en el trabajo” contra una recompensa.
El aprendizaje por refuerzo puede ser inestable y consume muchos recursos. Comienza pequeño, registra todo y valida una función de recompensa en unos pocos rollouts antes de escalar.
Instalación
| Paso | Comando |
|---|
| Instalar | pip install openpipe-art |
| Con extras (backend) | pip install "openpipe-art[backend]" |
| uv | uv add openpipe-art |
| Requisitos | Una GPU CUDA para el backend (entrenamiento/inferencia) |
Conceptos Centrales
| Término | Significado |
|---|
| Modelo | Un identificador de modelo entrenable (art.TrainableModel) registrado con un backend |
| Backend | Donde se ejecutan inferencia + entrenamiento (GPU local o remota) |
| Rollout | Un episodio de agente que produce una trayectoria y una recompensa |
| Trayectoria | Los mensajes/llamadas-de-herramientas/opciones que ART puntúa y aprende |
| GRPO | Group Relative Policy Optimization — el algoritmo RL predeterminado |
| Recompensa | Un escalar que tu código asigna a una trayectoria (mayor = mejor) |
Definiendo un Modelo
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(...) | La política que estás entrenando |
art.LocalBackend() | Ejecutar inferencia + entrenamiento en la GPU local |
model.register(backend) | Vincular un modelo a un backend |
model.openai_client() | Cliente compatible con OpenAI para rollouts |
Escribiendo 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
Bucle de Entrenamiento
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))
| Llamada | Descripción |
|---|
art.TrajectoryGroup(...) | Un grupo de rollouts comparados entre sí (GRPO) |
art.gather_trajectory_groups(...) | Ejecutar rollouts concurrentemente y recopilar grupos |
model.train(groups, config=...) | Una actualización GRPO a partir de los grupos recopilados |
art.TrainConfig(...) | Tasa de aprendizaje e hiperparámetros de entrenamiento |
model.get_step() | Paso de entrenamiento actual (para puntos de control/reanudación) |
Consejos de Diseño de Recompensas
| Directriz | Por qué |
|---|
| Mantener recompensas acotadas | Estabiliza las estimaciones de ventaja de GRPO |
| Recompensar el resultado, no la redacción | Evita optimización de recompensas en la fraseología |
| Añadir pequeñas recompensas de shaping para éxito de herramienta | Ayuda a asignación de crédito multi-paso |
| Usar RULER para puntuación relativa | Ayuda de ART para clasificar trayectorias en un grupo cuando no existe métrica clara |
Observabilidad
| Herramienta | Integración |
|---|
| Weights & Biases | Registro nativo de curvas de recompensa/pérdida |
| Weave | Decorar rollouts con @weave.op para captura de traza |
| LangfuseTracing | Soportado para inspección de trayectoria |
ART vs Otros Entrenadores de RL
| Aspecto | ART | OpenRLHF | verl |
|---|
| Enfoque | Agentes multi-paso | RLHF escalable | RL de alto rendimiento |
| Arquitectura | Cliente/servidor dividido | Ray + vLLM | Ray + vLLM |
| Backend | vLLM + Unsloth | vLLM | vLLM |
| Mejor para | Agentes entrenados en tu propio código | Grandes pipelines RLHF | Rendimiento de investigación |
Recursos