Muchos problemas complejos requieren más de un turno para resolver. Los agentes LLM interactúan con el entorno para obtener comentarios útiles de otros modelos o herramientas en el sistema.
Respuesta conjunta MAGRPO#
La respuesta conjunta MAGRPO construye un árbol rollout cuyas ramas representan diferentes respuestas conjuntas (TreeRPO).
Cada episode comienza con una tarea muestreada del conjunto de datos, que proporciona las observaciones iniciales \( \mathbf{o}_0=\{o_{1, 0}, \cdots, o_{n, 0}\} \) e historias \( \mathbf{h}_0=\{h_{1, 0}, \cdots, h_{n, 0}\} \) para todos los agentes. En cada turno, los agentes generan un grupo de respuestas conjuntas \( \mathbf{a}^{\mathcal{G}}_t\gets\boldsymbol{\pi}^{\mathcal{G}}(\cdot|\mathbf{h}_t) \) a partir de su historial de observación-acción actual \( \mathbf{h}_t \). Cada respuesta inicia una rama distinta rollout. Los agentes reciben recompensas conjuntas \( r^{(g)}_{t} \) para cada respuesta, en función del historial acumulado y la acción conjunta actual \( \mathbf{a}^{(g)}_{t} \in \mathbf{a}^{\mathcal{G}}_{t} \). Cada rollout evoluciona de forma independiente, produciendo nuevas observaciones conjuntas \( \mathbf{o}^{\mathcal{G}}_{t+1} \) a medida que cambia el entorno y se ramifica en nuevas ramas rollouts en el siguiente turno \( t+1 \). Este proceso continúa hasta el turno terminal \( H \).
Modo Conjunto#
MAGRPO soporta dos modos para generar respuestas conjuntas en cada turno:
- Alineado (
joint_mode="aligned"): Las respuestas con el mismo índice de generación se combinan en los agentes. Cada agente muestrea \( G \) respuestas (el valor fijonum_generations) en cada nodo. Con \( T \) turnos y sin terminación temprana, el árbol tiene \( G^T \) hojas.
- Cruz (
joint_mode="cross"): El producto cartesiano de las respuestas muestreadas de los agentes produce acciones conjuntas \( G^N \) por nodo. Sin terminación temprana, el árbol tiene \( G^{N \cdot T} \) hojas. Las respuestas se reutilizan en las combinaciones, por lo que las muestras conjuntas no son independientes. Esto aumenta el número de evaluaciones de recompensa y el tamaño de rollout sin garantizar estimaciones de valor más precisas.
Solo las respuestas del mismo rollout pueden combinarse porque rollouts evolucionan de forma independiente. La implementación actual de MAGRPO acumula retornos sin descuento:
discountno modifica su recursión en árbol. MAREINFORCE describe la agregación de retornos y la normalización de la ventaja.
Respuesta conjunta MAAC/IAC#
El árbol MAGRPO rollout genera numerosos ejemplos por episode. En el entorno de múltiples turnos, MAAC/IAC generan solo un ejemplo por agente por turno, y episode continúa a través de los turnos hasta la terminación.
MAAC/IAC utilizan objetivos de diferencia temporal de un paso, con discount aplicado al siguiente valor de rollout y sin bootstrapping después del turno final o terminado anticipadamente. La implementación actual recopila el episode completo antes de almacenar sus ejemplos. Las actualizaciones de la política ocurren cuando se alcanza rollout_buffer_size, y cualquier buffer restante se vacía al final de epoch. Las políticas no se actualizan entre los turnos del mismo episode.
El entrenamiento multi-turno con IAC/MAAC requiere que
num_generationsesté configurado en 1.
Transición del entorno#
Los mecanismos de retroalimentación externos controlan cómo se incorporan las observaciones del entorno a las indicaciones para los turnos posteriores. Estos mecanismos generalmente se implementan en los entornos posteriores de CoMLRL.
Retroalimentación externa personalizada#
Los usuarios pueden implementar retroalimentación externa personalizada definiendo una función con la siguiente interfaz:
prompt: Indicación o descripción original de la tarea (obligatorio)agent_completions: Lista o tupla de completaciones del turno anterior, una por agente (obligatorio)num_agents: Número de agentes en el sistema (obligatorio)prompt_history_per_agent: Lista que contiene una lista de los prompts anteriores para cada agente (opcional)response_history_per_agent: Lista que contiene una lista de las respuestas anteriores para cada agente (opcional)
La función debe devolver una lista o tupla de prompts para la siguiente ronda, uno para cada agente.
trainer solo pasa los argumentos anteriores, sin argumentos adicionales. Los parámetros específicos del modo se pueden configurar a través de una función o functools.partial.
Por defecto, cada prompt devuelto se convierte en el nuevo campo prompt y se pasa a través del formateador correspondiente del agente.
Si external_prompt_passthrough=True, los prompts devueltos se utilizan directamente sin reformatar.
En MAGRPO, la transición externa se llama para cada rama de rollout con los historiales de esa rama.
El siguiente ejemplo construye prompts para la siguiente ronda:
from typing import List, Optional
def custom_external(
prompt: str,
agent_completions: List[str],
num_agents: int,
prompt_history_per_agent: Optional[List[List[str]]] = None,
response_history_per_agent: Optional[List[List[str]]] = None,
) -> List[str]:
# Custom logic to format next-turn prompts
# Access environment feedback, tool outputs, etc.
next_turn_prompts = []
for i in range(num_agents):
# Format prompt for agent i based on history and feedback
next_prompt = f"{prompt}\nPrevious attempt: {agent_completions[i]}\nPlease revise."
next_turn_prompts.append(next_prompt)
return next_turn_promptsEjemplos de modos#
Un entorno para la generación de código incluye tres modos de transición externa de ejemplo:
external.mode=expert_edits: Una transición externa LLM (predeterminado: DeepSeek-Coder) propone ediciones de código. Los prompts de seguimiento incluyen sugerencias de edición y contexto de rondas anteriores. Con las claves API requeridas, los usuarios pueden seleccionar un experto diferente (por ejemplo, Claude, GPT) a través deexpert_model.
external.mode=level_feedback: Las comprobaciones estáticas de AST y la ejecución dinámica de código proporcionan un diagnóstico. Por defecto, el sandbox incluye solo la primera prueba. El parámetrosandbox_sliceselecciona todas las pruebas (0, None, o ‘all’) o un número específico de pruebas (se admiten valores negativos).
external.mode=plain: Este modo de auto-mejora incluye solo las indicaciones y respuestas de los turnos anteriores y una instrucción de revisión.