Aller au contenu
CoMLRL
Multi-LLM RL

Interaction multi-tours

Traduit automatiquement avec translategemma:4b Original en anglais

De nombreux problèmes complexes nécessitent plus d’un tour pour être résolus. Les agents LLM interagissent avec l’environnement pour obtenir des commentaires utiles auprès d’autres modèles ou outils du système.

Interaction multi-tours MAGRPO#

L’interaction multi-tours MAGRPO construit un arbre rollout dont les branches représentent différentes réponses conjointes (TreeRPO).

Arbre conjoint rollout Branche des observations et actions conjointes se divisent en rollouts indépendants.

Chaque episode commence par une tâche échantillonnée à partir de l’ensemble de données, ce qui fournit les observations initiales \( \mathbf{o}_0=\{o_{1, 0}, \cdots, o_{n, 0}\} \) et les historiques \( \mathbf{h}_0=\{h_{1, 0}, \cdots, h_{n, 0}\} \) pour tous les agents. À chaque tour, les agents génèrent un groupe de réponses conjointes \( \mathbf{a}^{\mathcal{G}}_t\gets\boldsymbol{\pi}^{\mathcal{G}}(\cdot|\mathbf{h}_t) \) à partir de leur historique d’observation-action actuel \( \mathbf{h}_t \). Chaque réponse démarre une observation distincte rollout. Les agents reçoivent des récompenses conjointes \( r^{(g)}_{t} \) pour chaque réponse, en fonction de l’historique cumulé et de l’action conjointe actuelle \( \mathbf{a}^{(g)}_{t} \in \mathbf{a}^{\mathcal{G}}_{t} \). Chaque rollout évolue ensuite indépendamment, produisant de nouvelles observations conjointes \( \mathbf{o}^{\mathcal{G}}_{t+1} \) à mesure que l’environnement change et se ramifie davantage rollouts au prochain tour \( t+1 \). Ce processus continue jusqu’à la fin \( H \).

Mode conjoint#

MAGRPO prend en charge deux modes pour générer des réponses conjointes à chaque tour:

  • Aligné (joint_mode="aligned") : Les réponses avec le même index de génération sont combinées entre les agents. Chaque agent échantillonne les réponses \( G \) (la valeur fixe num_generations) à chaque nœud. Avec \( T \) tours et sans terminaison précoce, l’arbre a \( G^T \) feuilles.
Réponses conjointes alignées Les réponses avec des indices de génération correspondants sont combinées entre les agents.
  • Croisé (joint_mode="cross"): Le produit cartésien des réponses échantillonnées des agents produit des actions conjointes \( G^N \) par nœud. Sans terminaison précoce, l’arbre a \( G^{N \cdot T} \) des feuilles. Les réponses sont réutilisées dans les combinaisons, de sorte que les échantillons conjoints ne sont pas indépendants. Cela augmente le nombre d’évaluations de récompenses et la taille de rollout sans garantir des estimations de valeur plus précises.
Réponses croisées conjointes Le produit cartésien forme des réponses conjointes dans chaque rollout.

Seules les réponses de la même rollout peuvent être combinées car rollouts évoluent indépendamment. La mise en œuvre actuelle de MAGRPO accumule les retours non dépréciés : discount ne modifie pas sa récursion arborescente. MAREINFORCE décrit l’agrégation des retours et la normalisation de l’avantage.

Apprentissage multi-tours de MAAC/IAC#

L’arbre MAGRPO/rollout génère de nombreux échantillons par episode. Dans le contexte multi-tours, MAAC/IAC génèrent un seul échantillon par agent par tour, et episode continue sur plusieurs tours jusqu’à la terminaison. MAAC/IAC utilisent des cibles de différence temporelle d’un pas, avec discount appliqué à la prochaine valeur de rollout et sans bootstrapping après le dernier ou tour terminé prématurément. L’implémentation actuelle collecte la valeur episode complète avant de stocker ses échantillons. Les mises à jour de la politique se produisent lorsque rollout_buffer_size est atteint, et tout tampon restant est vidé à la fin de epoch. Les politiques ne sont pas mises à jour entre les tours du même episode.

Trajectoire Actor-critic Une réponse conjointe par tour fait progresser le episode de gauche à droite.

La formation multi-tours avec IAC/MAAC nécessite que num_generations soit réglé sur 1.

Transition de l’environnement#

Les mécanismes de rétroaction externes contrôlent comment les observations de l’environnement sont incorporées dans les invites pour les tours suivants. Ces mécanismes sont généralement mis en œuvre dans les environnements en aval de CoMLRL.

Transition de l'environnement Au tour t, les réponses des agents entrent dans la transition externe, qui renvoie l'observation propre de chaque agent pour le tour t+1.

Rétroaction externe personnalisée#

Les utilisateurs peuvent implémenter une rétroaction externe personnalisée en définissant une fonction avec l’interface suivante :

Retour externe Paramètres
  • prompt : Invite ou description initiale de la tâche (obligatoire)
  • agent_completions : Liste ou tuple de complétions de la tour précédente, une par agent (obligatoire)
  • num_agents: Nombre d’agents dans le système (obligatoire)
  • prompt_history_per_agent: Liste contenant une liste des invites précédentes pour chaque agent (facultatif)
  • response_history_per_agent: Liste contenant une liste des réponses précédentes pour chaque agent (facultatif)

La fonction doit retourner une liste ou un tuple d’invites pour le prochain tour, une pour chaque agent. Le trainer ne transmet que les arguments ci-dessus, sans arguments supplémentaires. Les paramètres spécifiques au mode peuvent être configurés via une fermeture ou functools.partial.

Par défaut, chaque invite retournée devient le nouveau champ prompt et est transmise au formatteur correspondant de l’agent. Si external_prompt_passthrough=True, les invites retournées sont utilisées directement sans réformatage. Dans MAGRPO, la transition externe est appelée pour chaque branche rollout avec l’historique de cette branche.

L’exemple suivant construit des invites pour le prochain tour:

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

Exemples de modes#

Un environnement pour la génération de code inclut trois modes de transition externe:

  • external.mode=expert_edits: Une transition externe LLM (par défaut: DeepSeek-Coder) propose des modifications de code. Les invites de suivi incluent des suggestions de modifications et le contexte des tours précédents. Avec les clés API requises, les utilisateurs peuvent sélectionner un expert différent (par exemple, Claude, GPT) via expert_model.

  • external.mode=level_feedback : Les vérifications statiques de AST et l’exécution dynamique du code fournissent un diagnostic. Par défaut, le sandbox inclut uniquement le premier test. Le paramètre sandbox_slice sélectionne tous les tests (0, None, ou ‘all’) ou un nombre spécifique de tests (les valeurs négatives sont prises en charge).

  • external.mode=plain : Ce mode d’amélioration automatique inclut uniquement les invites et les réponses des tours précédents ainsi qu’une instruction de révision.