Ir al contenido
CoMLRL
Aprendizaje por refuerzo multi-LLM RL

Interacción en múltiples turnos

Traducido automáticamente con translategemma:4b Original en inglés

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).

Árbol conjunto rollout Observaciones y acciones conjuntas se ramifican en rollouts independientes.

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 fijo num_generations) en cada nodo. Con \( T \) turnos y sin terminación temprana, el árbol tiene \( G^T \) hojas.
Respuestas conjuntas alineadas Las respuestas con índices de generación coincidentes se combinan entre los agentes.
  • 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.
Respuestas cruzadas El producto cartesiano forma respuestas conjuntas dentro de rollout.

Solo las respuestas del mismo rollout pueden combinarse porque rollouts evolucionan de forma independiente. La implementación actual de MAGRPO acumula retornos sin descuento: discount no 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.

Trayectoria Actor-critic Una respuesta conjunta por turno avanza episode de izquierda a derecha.

El entrenamiento multi-turno con IAC/MAAC requiere que num_generations esté 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.

Transición del entorno En el turno t, las respuestas de los agentes entran en la transición externa, que devuelve la propia observación del agente para el turno t+1.

Retroalimentación externa personalizada#

Los usuarios pueden implementar retroalimentación externa personalizada definiendo una función con la siguiente interfaz:

Retroalimentación externa Parámetros
  • 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_prompts

Ejemplos 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 de expert_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ámetro sandbox_slice selecciona 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.