Große Sprachmodelle (LLMs) und ihre erweiterten Varianten, erweiterte Sprachmodelle (ALMs), sind zum Rückgrat moderner KI-Systeme geworden. Durch die Kombination leistungsstarker Sprachgenerierung mit externen Techniken zum Abrufen von Wissen wie Retrieval-Augmented Generation (RAG) ermöglichen sie fortgeschrittenes Denken, Beantworten von Fragen und Automatisierung von Aufgaben in verschiedenen Bereichen. Trotz ihrer bemerkenswerten Funktionen stehen diese Modelle jedoch häufig vor Herausforderungen wie einer uneinheitlichen Robustheit der Systeme, einer hohen Token-Nutzung, langsamen Antwortzeiten und Ineffizienzen aufgrund sich wiederholender Eingabeaufforderungen und redundanter Kontext bei der Bewältigung komplexer Aufgaben. Solche Beschränkungen erhöhen die Betriebskosten und beeinträchtigen die Skalierbarkeit und die Leistung.
Um diese Probleme zu lösen, bietet das ReWOO-Framework einen neuartigen Ansatz, der sich auf die Entkopplung des logischen Denkens von der externen Wissensbeschaffung konzentriert. Anstatt dass ein einzelnes LLM versucht, zu argumentieren, zu handeln und in einer verschachtelten Weise zu beobachten, unterteilt ReWOO diese Bedenken in verschiedene Module, die jeweils potenziell von einem LLM angetrieben werden, aber eine bestimmte Rolle spielen. Durch die Modularisierung des Prozesses in verschiedene Planungs-, Beweiserfassungs- und Synthesephasen verbessert ReWOO die Token-Effizienz und -Genauigkeit. Außerdem erleichtert es das Debugging des Systems und ermöglicht optimiertere und effektivere KI-Workflows.
Der Workflow von ReWOO dreht sich um drei Schlüsselkomponenten: schrittweise Schlussfolgerungen, Toolaufrufe und Zusammenfassung. Diese Komponenten werden in einer modularen Struktur implementiert, die aus drei Teilen besteht: dem Planer, dem Mitarbeiter und dem Solver.
Der Planer gliedert die Hauptaufgabe in eine Abfolge von gezielten Teilfragen auf und erstellt so einen klaren Blueprint. Anstatt das LLM zu bitten, eine komplexe Frage auf einmal zu beantworten, was zu einer überwältigenden Token-Nutzung und verworrenen Antworten führen kann, erstellt der Planer einen Blueprint oder eine Roadmap. Diese schrittweise Aufschlüsselung leitet den Workflow und hält den Argumentationsprozess strukturiert.
Der Mitarbeiter ruft externe Tools wie Suchmaschinen oder Datenbanken auf, um relevante Informationen und Nachweise abzurufen, die zur Beantwortung der Teilfragen benötigt werden. Er nutzt das LLM, um klare, präzise Antworten zu formulieren, die allein auf diesen abgerufenen Informationen basieren. Diese externe Beobachtungsphase wird vom Argumentationsprozess getrennt, um unnötige Wiederholungen von Prompts zu vermeiden und den Tokenverbrauch zu reduzieren.
Der Solver fasst alle gesammelten Erkenntnisse zusammen, um eine neue, gut strukturierte endgültige Antwort zu generieren. Diese modulare Trennung trägt dazu bei, eine effiziente, genaue und skalierbare Argumentation mit großen Sprachmodellen zu gewährleisten.
Frameworks wie LangChain und LangGraph bieten leistungsstarke Tools zur Implementierung der ReWOO-Architektur, indem Sie Modelle von OpenAI, IBM Granite oder spezialisierte Tools wie Serper und Tavily für die Suche verwenden.
In diesem Tutorial erkunden Sie, wie Sie einen ReWOO-Agenten erstellen, der die Aufgabe der Inhaltszusammenfassung ausführt. Dieser Agent kann:
Diese Architektur ist hilfreich für:
In diesem Schritt-für-Schritt-Tutorial werden die neuesten KI-Technologien genutzt, darunter:
Dieses Tutorial führt Sie durch die Einrichtung Ihrer lokalen Entwicklungsumgebung für die Ausführung einer ReWOO-ähnlichen Argumentationspipeline mit Jupyter Notebook. Sie verwenden das Sprachmodell IBM Granite und Serper.dev für die Live-Suche im Web.
Anmerkung: Es ist keine GPU erforderlich, aber die Ausführung kann auf CPU-basierten Systemen langsamer sein. Dieser Schritt öffnet eine Notebook-Umgebung, in die Sie den Code aus diesem Tutorial kopieren können. Dieses Tutorial ist auch auf GitHub verfügbar.
Diese Bibliotheken werden benötigt, um die ReWOO-Pipeline auszuführen und mit externen Tools zu interagieren:
transformers: Lädt das große Sprachmodell von IBM Granite und führt es aus.
torch: ein Deep-Learning-Framework, das für die effiziente Ausführung des Modells erforderlich ist.
Beschleunigen: Optimiert die Modellleistung über die gesamte Hardware hinweg (optional).
Aufforderungen: Sendet HTTP POST-Anfragen an externe APIs(wie Serper).
In diesem Schritt importieren Sie die erforderlichen Python-Bibliotheken, die für den Aufbau der Kernkomponenten der ReWOO-Pipeline erforderlich sind.
Transformers.AutoTokenizer: Lädt den Tokenizer, der Text in Token konvertiert, die mit dem Sprachmodell kompatibel sind.
transformers.AutoModelForCausalLM: Lädt das vortrainierte Sprachmodell IBM Granite zum Generieren von Antworten.
Transformers.pipeline: Bietet eine High-Level-Schnittstelle zum schnellen Erstellen einer Textgenerierungspipeline mithilfe des Tokenizers und des Modells.
In diesem Schritt laden wir das IBM Granite Sprachmodell und initialisieren eine Textgenerierungspipeline mithilfe der transformers-Bibliothek von Hugging Face. Erkunden Sie hier das Granite 3.2 2B Instruct-Modell auf Hugging Face.
model_id = "ibm-granite/granite-3.2-2b-instruct": Gibt den Namen des IBM Granite-Modellkontrollpunkts an, der auf Hugging Face gehostet wird. Dieses Modell ist für Aufgaben optimiert, bei denen Anweisungen befolgt werden.
AutoTokenizer.from_pretrained(model_id): Lädt den Tokenizer, der mit dem angegebenen Modell verknüpft ist. Er ist dafür verantwortlich, Eingabetext in Token umzuwandeln und Ausgabe-Token wieder in Text zu dekodieren.
AutoModelForCausalLM.from_pretrained(model_id): Lädt das Sprachmodell (Granite 3.2 2B instruct) für Textgenerierungsaufgaben wie die Beantwortung von Fragen oder die Zusammenfassung.
pipeline("text-generation", model=model, tokenizer=tokenizer): Erstellt eine High-Level-Pipeline zur Textgenerierung, die das Modell und den Tokenizer kombiniert, sodass es einfach ist, Antworten von Prompts zu generieren.
In diesem Schritt definieren wir eine Funktion, die als Mitarbeiter in der ReWOO-Architektur fungiert. Dieser Mitarbeiter verwendet ein Web-Suchtool, Serper.dev, um relevante, aktuelle Informationen aus dem Internet abzurufen, um die Argumentation und die Generierung von Antworten zu unterstützen. Serper.dev ist eine schnelle und schlanke API, die Google-Suchergebnisse in einem strukturierten Format bereitstellt und sich damit ideal für die Echtzeitabfrage von Informationen in KI-Workflows eignet.
Diese Einrichtung ermöglicht es dem ReWOO-System, die reale Welt zu „beobachten“, indem es externe Wissensquellen abfragt, bevor das LLM endgültige Entscheidungen trifft.
So können Sie Serper in der ReWOO-Pipeline verwenden:
SERPER_API_KEY = "<YOUR_API_KEY>" # Ersetzen Sie dies durch Ihren tatsächlichen Schlüssel
Hinweis: Laden Sie Ihren API-Schlüssel niemals in öffentliche Repositorys hoch. Für Produktions- oder Teamumgebungen verwenden Sie .env-Dateien oder Umgebungsvariablen, um die Sicherheit zu gewährleisten.
def query_serper(question, num_results=3): Definiert eine Funktion, die eine Suchfrage aufnimmt und relevante Snippets aus den Top-Ergebnissen zurückgibt.
Payload = {"q": question, "num": num_results} : Bereitet die Abfrage-Payload mit dem Suchbegriff und der Anzahl der Ergebnisse vor, die zurückgegeben werden sollen.
response = requests.post(...): Sendet eine POST-Anfrage mit Ihrer Abfrage und Ihren Headern an die Serper-API.
response.raise_for_status(): Löst einen Fehler aus, wenn die API-Antwort ungültig ist oder fehlschlägt.
snippets = [...]: Extrahiert Snippet-Text aus den organischen Suchergebnissen.
return "\n".join(snippets): Verknüpft die Snippets und gibt sie als einzelne Zeichenfolgen zurück, die als Kontext für das Sprachmodell dienen.
Hinweis: Diese Funktion bildet das Rückgrat des Schritts „Beobachtung“ von ReWOO, in dem externe Beweise für die weitere Schlussfolgerung gesammelt werden. Stellen Sie beim Testen sicher, dass Ihr API-Schlüssel gültig und nicht ratenbegrenzt ist.
In diesem Schritt definieren wir die expert()-Funktion, die als Solver in der ReWOO-Architektur dient. Der Solver fasst die abgerufenen externen Beweise zusammen und generiert unter Verwendung des Sprachmodells eine endgültige Antwort.
def expert(question: str) -> str: Die Funktion expert() nimmt eine Frage (String) und gibt eine Antwort (String) zurück, die vom Granite-Modell generiert wurde. Es funktioniert, indem es das Internet mit Serper.dev durchsucht, relevante Informationen sammelt und diese nutzt, um eine klare, vollständige Antwort zu generieren.
context = query_serper(question): Verwendet das Serper-Websuchtool, um relevante Informationen abzurufen (Mitarbeiter).
Prompt = f"""...""": Erstellt eine Aufforderung, die das Modell anweist, zu antworten, indem es nur den abgerufenen Kontext verwendet.
generator(...): Ruft das Granite-Modell auf, um eine Antwort basierend auf der Eingabeaufforderung zu generieren.
for _ in range(5): Mit dieser Schleife kann das Modell bis zu 5 Mal eine Antwort in Blöcken generieren. Sie hilft, wenn die Antwort lang ist und nicht auf einmal beantwortet werden kann.
generated_text += new_text: Hängt jeden neuen Textblock an, um die vollständige Antwort zu bilden.
Wenn new_text.endswith(...): Wenn die Antwort vollständig erscheint (endet mit einem Punkt, einem Fragezeichen oder einem Ausrufezeichen) und genügend Wörter enthält (mehr als 50), wird die Schleife gestoppt.
return generated_text.strip(): Gibt die endgültige, bereinigte Antwort zurück.
Hinweis: Das Prompt-Format ist wichtig, denn es stellt sicher, dass das Modell nicht „halluziniert“ oder vom Thema abweicht. Es muss sich an das halten, was im Kontext enthalten ist. Wir begrenzen jeden Generationsblock auf 120 Token, um die Ausgabe zu steuern und die Ressourcennutzung effizient zu verwalten, während gleichzeitig eine übermäßige Tokennutzung verhindert wird.
def Planner(task: streng): Dies definiert eine Funktion namens planner, die ein einzelnes Argument Task akzeptiert (eine Zeichenfolge, die die beschreibt, die ausgeführt werden soll).
topic = task.replace("Summarize", "").replace("the novella", "").strip(): Extrahieren Sie das Hauptthema (z. B. den Titel oder das Thema) aus der Aufgabe. Es bereinigt die Eingabe, indem es gängige Promptphrasen wie „Summarize“ und „the novella“ entfernt und anschließend führende und abschließende Leerzeichen abschneidet, um das Kernthema zu isolieren.
return [ ... ]: Gibt eine Liste spezifischer Fragen zurück, die das Mitarbeiter-Modul leiten.
Hinweis: Sie können diese Liste je nach Tiefe und Art des Eingabethemas mit spezifischeren Unterfragen erweitern.
In diesem Schritt definieren wir die Funktion final_summarizer, die als Solver in der ReWOO-Pipeline fungiert. Diese Funktion nimmt die vom Mitarbeiter bereitgestellten Teilantworten (Nachweise) und generiert mithilfe des Sprachmodells eine neu verfasste, kohärente Zusammenfassung.
def final_summarizer(Aufgabe: str, sub_answers: dict) -> str: Definiert die Funktion, die die ursprüngliche Aufgabe und die Unterantworten empfängt, und gibt eine kurze Zusammenfassung zurück.
insights = "\n".join(sub_answers.values()): Kombiniert alle Antworten zu einer einzigen Zeichenfolge, die durch Newlines getrennt ist, um in den Prompt aufgenommen zu werden.
base_prompt = f"""...""": Erstellt das Basis-Prompt, das das Modell anweist, die bereitgestellten Erkenntnisse zusammenzufassen. Es leitet das Modell dazu an, eine neue Zusammenfassung zu erstellen, die nur auf Teilantworten basiert.
max_total_tokens = 400: Legt eine Obergrenze für die generierte Tokenanzahl fest, um übermäßig lange Ausgaben zu vermeiden.
max_loops = 5: Ermöglicht bis zu 5 Iterationen der Generierung, um die Zusammenfassung schrittweise zu erstellen.
for in range(maxloops): Schleifen zum Generieren von Textblöcken unter Verwendung des Sprachmodells.
response = generator(..., max_new_tokens=100, ...): Verwendet den Generator (Pipeline-Objekt), um bis zu 100 neue Token in jeder Schleife zu generieren. Der Stichprobenmodus (do_sample=True) erlaubt Variation und Kreativität bei der Antwort.
if summary.endswith(...) or total_tokens_used >= max_total_tokens: Beendet die Schleife, wenn die Zusammenfassung mit der richtigen Interpunktion schließt oder die Token-Obergrenze erreicht.
return summary.strip(): Gibt die endgültige, optimierte Zusammenfassung ohne nachgestellte Leerzeichen zurück.
In diesem Schritt definieren wir die Solver-Funktion, die die letzte Stufe in der ReWOO-Pipeline darstellt. Sie steuert den gesamten Prozess, indem sie den Planer verwendet, den Experten (Mitarbeiter) aufruft und mit dem final_summarizer (Solver) eine Zusammenfassung erstellt. Die ReWOO-Architektur ermöglicht mehrstufige Argumentation, indem die Hauptaufgabe mithilfe eines Planers in Teilfragen unterteilt wird. Jede Teilfrage wird unabhängig von einem Expertenmodul beantwortet, und die abschließende Zusammenfassung fasst alle Antworten zu einer kohärenten Antwort zusammen. Durch diesen modularen Ansatz kann das System komplexe Aufgaben effektiver bewältigen.
def solver(task: streng): Definiert die Haupt-Controller-Funktion für die Ausführung des vollständigen ReWOO-Workflows.
subquestions = planner(task): Verwendet den Planer, um die Eingabeaufgabe in fokussierte Teilfragen zu unterteilen.
ans = expert(q): Ruft für jede Teilfrage die expert-Funktion auf, um webbasierte Beweise abzurufen und eine relevante Antwort zu generieren. Jede vom Planer erstellte Teilfrage wird als Tooleingabe an den Experten weitergeleitet. Das Expertenmodul verarbeitet die Eingabe mithilfe eines Sprachmodells. Dies kann als Ausführung eines Tools für eine bestimmte Teilaufgabe betrachtet werden.
answers[q] = ans: Speichert jede Antwort, die durch die entsprechende Frage verschlüsselt ist, für eine spätere Zusammenfassung.
final_summary = final_summarizer(task, answers): Gibt alle gesammelten Antworten in den final_summarizer ein, um eine saubere, kohärente Zusammenfassung zu erstellen.
print(final_summary) and return final_summary: Zeigt die abgeschlossene Zusammenfassung für die ursprüngliche Aufgabe an und gibt sie zurück.
Hinweis: Die von der Funktion solver() benötigte Gesamtzeit kann je nach System variieren, da sich die CPU-Geschwindigkeit, der verfügbare RAM und die Effizienz des Modells auf verschiedenen Hardware-Setups unterscheiden. Da der Code eine sich wiederholende Generierungsstrategie mit einem Sprachmodell verwendet, können Systeme mit geringerer Rechenleistung oder geringem Hauptspeicher deutlich länger brauchen. Netzbasierte Abfragen und große Prompts können ebenfalls zu Verzögerungen beitragen. Um die Leistung zu verbessern, sollten Sie max_loops reduzieren, indem Sie ein kleineres oder quantisiertes Modell verwenden, die Tokenizer- und Generatorpipeline optimieren oder den Code in einer GPU-fähigen Umgebung wie Google Colab oder Kaggle Notebooks ausführen.
In diesem letzten Schritt führen wir die vollständige ReWOO-Pipeline aus, indem wir die Solver-Funktion mit einer bestimmten Aufgabe aufrufen.
solver(„Novelle The Metamorphosis zusammenfassen“): Löst den gesamten ReWOO-Prozess aus; Planung, das Abrufen von Beweisen und das Erstellen einer Zusammenfassung für die Eingabeaufgabe: Zusammenfassen des Datensatzes The Metamorphosis.
Dieser Schritt gibt die endgültige Zusammenfassung aus und zeigt, wie die Komponenten zusammenarbeiten, um einen echten Anwendungsfall von Anfang bis Ende zu bearbeiten.
Hinweis: Um die Leistung und Zuverlässigkeit der ReWOO-Pipeline zu verbessern, ist es wichtig, Bewertungsmetriken wie Zusammenfassungsqualität, Kohärenz und Generierungslatenz zu verbessern. Mithilfe dieser Metriken kann beurteilt werden, wie gut das System bei verschiedenen Aufgaben und Hardwarekonfigurationen funktioniert. Die Architektur kann durch die Integration intelligenter Algorithmen erweitert werden, um große Fragen in kleinere zu unterteilen und die nützlichsten Antworten zu sortieren. Diese Verbesserungen würden eine genauere und effizientere Schlussfolgerung ermöglichen, die Generierungszeit verkürzen und die Gesamtqualität der endgültigen Ausgaben verbessern.
Entwickeln, implementieren und verwalten Sie leistungsstarke KI-Assistenten und -Agenten, die Workflows und Prozesse mit generativer KI automatisieren.
Gestalten Sie die Zukunft Ihres Unternehmens mit KI-Lösungen, denen Sie vertrauen können.
Die KI-Services von IBM Consulting unterstützen Sie dabei, die Art und Weise, wie Unternehmen mit KI arbeiten, neu zu denken.