Zum Inhalt springen
CoMLRL
Multi-LLM RL

Mehrstufige Interaktion

Automatisch übersetzt mit translategemma:4b Englisches Original

Viele komplexe Probleme erfordern mehr als eine Runde, um sie zu lösen. LLM-Agenten interagieren mit der Umgebung, um nützliches Feedback von anderen Modellen oder Werkzeugen im System zu erhalten.

Mehrstufige MAGRPO#

Mehrstufige MAGRPO erstellt einen rollout-Baum, dessen Zweige unterschiedliche gemeinsame Antworten (TreeRPO) darstellen.

Gemeinsames rollout-Baum Gemeinsame Beobachtungen und Aktionen verzweigen sich in unabhängige rollouts.

Jeder episode beginnt mit einer Aufgabe, die aus dem Datensatz entnommen wird, und liefert die anfänglichen Beobachtungen \( \mathbf{o}_0=\{o_{1, 0}, \cdots, o_{n, 0}\} \) und die Vorgeschichte \( \mathbf{h}_0=\{h_{1, 0}, \cdots, h_{n, 0}\} \) für alle Agenten. In jeder Stufe generieren die Agenten eine Gruppe von gemeinsamen Antworten \( \mathbf{a}^{\mathcal{G}}_t\gets\boldsymbol{\pi}^{\mathcal{G}}(\cdot|\mathbf{h}_t) \) basierend auf ihrer aktuellen Beobachtungs-Aktions-Vorgeschichte \( \mathbf{h}_t \). Jede Antwort leitet eine distincte rollout ein. Die Agenten erhalten gemeinsame Belohnungen \( r^{(g)}_{t} \) für jede Antwort, basierend auf der akkumulierten Vorgeschichte und der aktuellen gemeinsamen Aktion \( \mathbf{a}^{(g)}_{t} \in \mathbf{a}^{\mathcal{G}}_{t} \). Jede rollout entwickelt sich unabhängig, wodurch neue gemeinsame Beobachtungen \( \mathbf{o}^{\mathcal{G}}_{t+1} \) entstehen, wenn sich die Umgebung ändert, und weitere rollouts-Verzweigungen entstehen in der nächsten Stufe \( t+1 \). Dieser Prozess setzt sich fort, bis die Endstufen \( H \) erreicht sind.

Gemeinsamer Modus#

MAGRPO unterstützt zwei Modi zur Erstellung von gemeinsamen Antworten in jeder Stufe:

  • Ausgerichteter (joint_mode="aligned"): Antworten mit dem gleichen Generierungsindex werden über die Agenten kombiniert. Jeder Agent entnimmt \( G \) Antworten (den festen num_generations-Wert) an jedem Knoten. Mit \( T \) Stufen und ohne vorzeitige Beendigung hat der Baum \( G^T \) Blätter.
Ausgerichtete gemeinsame Antworten Antworten mit übereinstimmenden Generierungsindizes werden über Agenten kombiniert.
  • Kreuzweise (joint_mode="cross"): Das kartesische Produkt der Antworten der Agenten ergibt \( G^N \) gemeinsame Aktionen pro Knoten. Ohne vorzeitige Beendigung hat der Baum \( G^{N \cdot T} \) Blätter. Antworten werden wiederverwendet, sodass die gemeinsamen Stichproben nicht unabhängig sind. Dies erhöht die Anzahl der Belohnungsbewertungen und die rollout-Größe, ohne genauere Wertschätzungen zu garantieren.
Kreuz-gemeinsame Antworten Das kartesische Produkt bildet gemeinsame Antworten innerhalb jedes rollout.

Nur Antworten aus der gleichen rollout können kombiniert werden, da rollouts unabhängig voneinander entwickelt werden. Die aktuelle MAGRPO-Implementierung berechnet ungezüglich die kumulierten Renditen: discount ändert seine Baumrekursion nicht. MAREINFORCE beschreibt die Aggregation von Renditen und die Normalisierung des Vorteils.

Mehrstufige MAAC/IAC#

Der MAGRPO-rollout-Baum generiert zahlreiche Samples pro episode. Im Mehrstufigen-Szenario generieren MAAC/IAC nur ein Sample pro Agent pro Runde, und episode setzt sich über mehrere Runden fort, bis zum Abbruch. MAAC/IAC verwenden ein-stufige temporal-difference-Ziele, wobei discount auf den nächsten rollout-Wert angewendet wird und nach der letzten oder frühzeitig beendeten Runde keine Bootstrapping-Operation durchgeführt wird. Die aktuelle Implementierung sammelt den vollständigen episode, bevor Samples gepuffert werden. Policy-Updates erfolgen, wenn rollout_buffer_size erreicht wird, und der verbleibende Puffer wird am Ende von epoch geleert. Policies werden nicht zwischen den Runden desselben episode aktualisiert.

Actor-critic-Trajektorie Eine gemeinsame Antwort pro Runde fördert den episode von links nach rechts.

Mehrstufiges Training mit IAC/MAAC erfordert, dass num_generations auf 1 gesetzt wird.

Umgebungstransition#

Externe Feedback-Mechanismen steuern, wie Umgebungsergebnisse in Prompts für nachfolgende Runden integriert werden. Diese Mechanismen werden normalerweise in den nachgelagerten Umgebungen von CoMLRL implementiert.

Umgebungsübergang In Runde t gelangen die Antworten der Agenten in den externen Übergang, der für jeden Agenten die eigene Beobachtung für Runde t+1 zurückgibt.

Benutzerdefinierte externe Feedback#

Benutzer können benutzerdefiniertes externes Feedback implementieren, indem sie eine Funktion mit der folgenden Schnittstelle definieren:

Externes Feedback Parameter
  • prompt: Ursprüngliche Aufgabenaufforderung oder Problembeschreibung (erforderlich)
  • agent_completions: Liste oder Tupel von Vervollständigungen aus der vorherigen Runde, jeweils für einen Agenten (erforderlich)
  • num_agents: Anzahl der Agenten im System (erforderlich)
  • prompt_history_per_agent: Liste, die eine Liste der vorherigen Prompts pro Agent enthält (optional)
  • response_history_per_agent: Liste, die eine Liste der vorherigen Antworten pro Agent enthält (optional)

Die Funktion muss eine Liste oder ein Tupel von Prompts für den nächsten Durchgang zurückgeben, jeweils für einen Agenten. trainer übergibt nur die oben genannten Argumente, ohne zusätzliche Schlüsselwortargumente. Modus-spezifische Parameter können über eine Closure oder functools.partial konfiguriert werden.

Standardmäßig wird jeder zurückgegebene Prompt dem neuen prompt-Feld zugewiesen und durch den entsprechenden Agenten-Formatter geleitet. Wenn external_prompt_passthrough=True, werden die zurückgegebenen Prompts direkt verwendet, ohne neu formatiert zu werden. In MAGRPO wird die externe Transition für jeden rollout-Zweig mit den entsprechenden Vorgeschichten aufgerufen.

Das folgende Beispiel erstellt Prompts für den nächsten Durchgang:

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

Beispiel-Modi#

Eine Umgebung für Code-Generierung enthält drei Beispiel-externe Transition-Modi:

  • external.mode=expert_edits: Ein externer LLM (Standard: DeepSeek-Coder) schlägt Code-Änderungen vor. Folge-Prompts enthalten Edit-Vorschläge und Kontext aus vorherigen Durchgängen. Mit den erforderlichen API-Schlüsseln können Benutzer einen anderen Experten (z. B. Claude, GPT) über expert_model auswählen.

  • external.mode=level_feedback: Statische AST-Prüfungen und dynamische Codeausführung ermöglichen eine Diagnose. Standardmäßig enthält der Sandbox nur den ersten Test. Der sandbox_slice-Parameter wählt alle Tests (0, None oder ‘alle’) oder eine bestimmte Anzahl von Tests (negative Werte werden unterstützt).

  • external.mode=plain: Dieser Selbstverbesserungsmodus umfasst nur die Prompts und Antworten aus vorherigen Gesprächsrunden und eine Revisionsanweisung.