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).
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 fixenum_generations) à chaque nœud. Avec \( T \) tours et sans terminaison précoce, l’arbre a \( G^T \) feuilles.
- 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.
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 :
discountne 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.
La formation multi-tours avec IAC/MAAC nécessite que
num_generationssoit 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.
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 :
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_promptsExemples 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) viaexpert_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ètresandbox_slicesé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.