Wie Man Die Ultimative Ki Automatisierung Mit Multi Agenten Kollaboration Aufbaut Wie Man Die Ultimative Ki Automatisierung Mit Multi Agenten Kollaboration Aufbaut

Wie man die ultimative KI-Automatisierung mit Multi-Agenten-Kollaboration aufbaut

Es ist erst ein Jahr her, seit die erste Version von GPT Researcher veröffentlicht wurde, aber die Methoden zum Erstellen, Testen und Bereitstellen von KI-Agenten haben sich bereits erheblich weiterentwickelt. Das ist einfach die Natur und Geschwindigkeit des aktuellen KI-Fortschritts. Was als einfache Zero-Shot oder Few-Shot-Prompting begann, hat sich schnell zu Agenten-FunktionsaufrufenRAG und schließlich zu agentischen Workflows (auch bekannt als „Flow-Engineering„) entwickelt.

Andrew Ng hat kürzlich geäußert, „Ich denke, dass KI-Agenten-Workflows in diesem Jahr einen massiven KI-Fortschritt vorantreiben werden – vielleicht sogar mehr als die nächste Generation von Foundation-Modellen. Dies ist ein wichtiger Trend, und ich fordere alle, die in der KI-Branche arbeiten, auf, ihn zu beachten.“

In diesem Artikel erfahren Sie, warum Multi-Agenten-Workflows derzeit der beste Standard sind und wie Sie den optimalen autonomen Forschungs-Multi-Agenten-Assistenten mithilfe von LangGraph erstellen.

 

Wenn Sie dieses Tutorial überspringen möchten, können Sie sich die finale Code-Implementierung von GPT Researcher x LangGraph hier ansehen.

Vorstellung von LangGraph

LangGraph ist eine Erweiterung von LangChain, die darauf abzielt, Agenten- und Multi-Agenten-Flows zu erstellen. Es fügt die Fähigkeit hinzu, zyklische Flows zu erstellen und kommt mit einem eingebauten Speicher – beides wichtige Attribute für die Erstellung von Agenten.

LangGraph bietet Entwicklern ein hohes Maß an Kontrollierbarkeit und ist wichtig für die Erstellung benutzerdefinierter Agenten und Flows. Fast alle Agenten in der Produktion sind an den spezifischen Anwendungsfall angepasst, den sie zu lösen versuchen. LangGraph gibt Ihnen die Flexibilität, beliebige benutzerdefinierte Agenten zu erstellen, während es gleichzeitig eine intuitive Entwicklererfahrung bietet.

Genug mit dem Smalltalk, lassen Sie uns mit dem Bauen beginnen!

Erstellen des ultimativen autonomen Forschungs-Agenten

Durch die Nutzung von LangGraph kann der Forschungsprozess in der Tiefe und Qualität erheblich verbessert werden, indem mehrere Agenten mit spezialisierten Fähigkeiten eingesetzt werden. Wenn sich jeder Agent nur auf eine bestimmte Fähigkeit konzentriert und spezialisiert, ermöglicht dies eine bessere Trennung von Verantwortlichkeiten, Anpassungsfähigkeit und weitere Entwicklung im großen Maßstab, wenn das Projekt wächst.

Inspiriert von der kürzlichen STORM-Veröffentlichung, zeigt dieses Beispiel, wie ein Team von KI-Agenten zusammenarbeiten kann, um eine Forschung zu einem gegebenen Thema durchzuführen, von der Planung bis zur Veröffentlichung. Dieses Beispiel wird auch den führenden autonomen Forschungs-Agenten GPT Researcher nutzen.

Das Forschungs-Agenten-Team

Das Forschungsteam besteht aus sieben LLM-Agenten:

  • Chefredakteur – Überwacht den Forschungsprozess und verwaltet das Team. Dies ist der „Master“-Agent, der die anderen Agenten mithilfe von LangGraph koordiniert. Dieser Agent fungiert als Haupt-LangGraph-Schnittstelle.
  • GPT Researcher – Ein spezialisierter autonomer Agent, der eine eingehende Forschung zu einem gegebenen Thema durchführt.
  • Redakteur – Verantwortlich für die Planung der Forschungsstruktur und -umfang.
  • Gutachter – Überprüft die Richtigkeit der Forschungsergebnisse anhand einer Reihe von Kriterien.
  • Revisor – Überarbeitet die Forschungsergebnisse auf der Grundlage des Feedbacks des Gutachters.
  • Autor – Verantwortlich für die Zusammenstellung und das Schreiben des endgültigen Berichts.
  • Herausgeber – Verantwortlich für die Veröffentlichung des endgültigen Berichts in verschiedenen Formaten.

Architektur

Wie unten zu sehen, basiert der Automatisierungsprozess auf den folgenden Phasen: Planung der Forschung, Datenerhebung und -analyse, Überprüfung und Überarbeitung, Schreiben des Berichts und schließlich Veröffentlichung:

Auto Draft

Genauer gesagt läuft der Prozess wie folgt ab:

  • Browser (gpt-researcher)
  • Redakteur – Plant die Berichtsstruktur und den -umfang auf der Grundlage der ersten Recherche. Der Redakteur ist auch dafür verantwortlich, die parallelen Forschungsaufgaben auf der Grundlage der geplanten Struktur auszulösen.
  • Für jedes Strukturelement (parallel):
  • Forscher (gpt-researcher)Python-Paket unter der Haube für eine optimierte, eingehende und faktengestützte Forschungsmitteilung.
  • Gutachter – Überprüft die Richtigkeit des Entwurfs anhand einer Reihe von Richtlinien und gibt dem Revisor Feedback (sofern vorhanden).
  • Revisor – Überarbeitet den Entwurf, bis er zufriedenstellend ist, auf der Grundlage des Feedbacks des Gutachters.
  • Autor – Erstellt und schreibt den endgültigen Bericht, einschließlich einer Einleitung, eines Fazits und eines Referenzabschnitts aus den gegebenen Forschungsergebnissen.
  • Herausgeber – Veröffentlicht den endgültigen Bericht in mehreren Formaten wie PDF, Docx, Markdown usw.

Wir werden uns nicht auf den gesamten Code konzentrieren, da es viel davon gibt, sondern uns hauptsächlich auf die interessanten Teile konzentrieren, die ich für wertvoll halte, sie zu teilen.

Definieren des Graphenzustands

Eine meiner Lieblingsfunktionen von LangGraph ist die Zustandsverwaltung. Zustände in LangGraph werden über einen strukturierten Ansatz erleichtert, bei dem Entwickler einen GraphState definieren, der den gesamten Zustand der Anwendung umfasst. Jeder Knoten im Graphen kann diesen Zustand modifizieren, was dynamische Antworten auf der Grundlage des sich entwickelnden Kontexts der Interaktion ermöglicht.

Wie bei jedem technischen Design ist es entscheidend, das Datenmodell während der gesamten Anwendung zu berücksichtigen. In diesem Fall werden wir einen ResearchState wie folgt definieren:

class ResearchState(TypedDict):
    task: dict
    initial_research: str
    sections: List[str]
    research_data: List[dict]
    # Report layout
    title: str
    headers: dict
    date: str
    table_of_contents: str
    introduction: str
    conclusion: str
    sources: List[str]
    report: str

Wie oben zu sehen, ist der Zustand in zwei Hauptbereiche unterteilt: die Forschungsaufgabe und den Inhalt der Berichtsstruktur. Wenn die Daten durch den Graphen der Agenten zirkulieren, generiert jeder Agent im Laufe der Zeit neue Daten auf der Grundlage des bestehenden Zustands und aktualisiert ihn für die weitere Verarbeitung durch andere Agenten weiter unten im Graphen.

Wir können dann den Graphen mit dem folgenden Code initialisieren:

from langgraph.graph import StateGraph
workflow = StateGraph(ResearchState)

Initialisierung des Graphen mit LangGraph

Wie oben erwähnt, besteht einer der großen Vorteile der Entwicklung mit mehreren Agenten darin, dass jeder Agent über spezialisierte und umgrenzte Fähigkeiten verfügt. Lassen Sie uns als Beispiel den Forschungs-Agenten mithilfe des GPT Researcher Python-Pakets betrachten:

from gpt_researcher import GPTResearcher
class ResearchAgent:
    def __init__(self):
        pass
    async def research(self, query: str):
        # Initialize the researcher
        researcher = GPTResearcher(parent_query=parent_query, query=query, report_type=research_report, config_path=None)
        # Conduct research on the given query
        await researcher.conduct_research()
        # Write the report
        report = await researcher.write_report()
        return report

Wie Sie oben sehen können, haben wir eine Instanz des Forschungs-Agenten erstellt. Nehmen wir an, wir haben dasselbe für jeden Agenten des Teams getan. Nachdem wir alle Agenten erstellt haben, können wir den Graphen mit LangGraph wie folgt initialisieren:

def init_research_team(self):
    # Initialize agents
    editor_agent = EditorAgent(self.task)
    research_agent = ResearchAgent()
    writer_agent = WriterAgent()
    publisher_agent = PublisherAgent(self.output_dir)
    # Define a Langchain StateGraph with the ResearchState
    workflow = StateGraph(ResearchState)
    # Add nodes for each agent
    workflow.add_node("browser", research_agent.run_initial_research)
    workflow.add_node("planner", editor_agent.plan_research)
    workflow.add_node("researcher", editor_agent.run_parallel_research)
    workflow.add_node("writer", writer_agent.run)
    workflow.add_node("publisher", publisher_agent.run)
    workflow.add_edge('browser', 'planner')
    workflow.add_edge('planner', 'researcher')
    workflow.add_edge('researcher', 'writer')
    workflow.add_edge('writer', 'publisher')
    # set up start and end nodes
    workflow.set_entry_point("browser")
    workflow.add_edge('publisher', END)
    return workflow

Wie Sie oben sehen können, ist die Erstellung des LangGraph-Graphen

sehr einfach und besteht aus drei Hauptfunktionen: add_nodeadd_edge und set_entry_point. Mit diesen Hauptfunktionen können Sie zunächst Knoten zum Graphen hinzufügen, die Kanten verbinden und schließlich den Startknoten festlegen.

Fokus-Check: Wenn Sie dem Code und der Architektur gefolgt sind, werden Sie feststellen, dass die Agenten für den Gutachter und den Revisor in der obigen Initialisierung fehlen. Lassen Sie uns tiefer darauf eingehen!

Ein Graph innerhalb eines Graphen zur Unterstützung von statusbehafteter Parallelisierung

Dies war der aufregendste Teil meiner Erfahrung mit LangGraph! Eine aufregende Funktion dieses autonomen Assistenten ist die parallele Ausführung von Forschungsaufgaben, die anschließend von einem Gutachter überprüft und von einem Revisor überarbeitet werden, basierend auf einem Satz von vordefinierten Richtlinien.

Die Fähigkeit, parallele Arbeit in einem Prozess zu nutzen, ist entscheidend für die Optimierung der Geschwindigkeit. Aber wie löst man parallele Agentenarbeit aus, wenn alle Agenten auf denselben Zustand zugreifen? Dies kann zu Wettlaufbedingungen und Inkonsistenzen in den endgültigen Daten führen. Um dies zu lösen, können Sie einen Untergraph erstellen, der von der Haupt-LangGraph-Instanz ausgelöst wird. Dieser Untergraph hält seinen eigenen Zustand für jede parallele Ausführung, was das oben genannte Problem löst.

Lassen Sie uns zunächst den Zustand des Untergraphen definieren. Da dieser Untergraph Entwürfe überprüft und überarbeitet, werden wir den Zustand mit Entwurfsinformationen definieren:

class DraftState(TypedDict):
    task: dict
    topic: str
    draft: dict
    review: str
    revision\_notes: str

Wie Sie in der Entwurfszustandsdefinition sehen können, kümmern wir uns hauptsächlich um das Thema, das diskutiert wird, sowie um die Anmerkungen des Gutachters und des Revisors, da sie sich gegenseitig mitteilen, um den Entwurf der Forschungsmitteilung zu einem bestimmten Thema abzuschließen.

Um eine zyklische Bedingung zu schaffen, nutzen wir die letzte wichtige Funktion von LangGraph, nämlich bedingte Kanten.

async def run\_parallel\_research(self, research\_state: dict):
    workflow = StateGraph(DraftState)
    workflow.add\_node("researcher", research\_agent.run\_depth\_research)
    workflow.add\_node("reviewer", reviewer\_agent.run)
    workflow.add\_node("reviser", reviser\_agent.run)
    # set up edges researcher->reviewer->reviser->reviewer...
    workflow.set\_entry\_point("researcher")
    workflow.add\_edge('researcher', 'reviewer')
    workflow.add\_edge('reviser', 'reviewer')
    workflow.add\_conditional\_edges('reviewer',
                                       (lambda draft: "accept" if draft['review'] is None else "revise"),
                                       {"accept": END, "revise": "reviser"})

Mit der Funktion für bedingte Kanten wird der Graph den Knoten „reviser“ auswählen, wenn es Anmerkungen des Gutachters gibt, oder der Zyklus wird mit dem endgültigen Entwurf enden. Wenn Sie sich den Hauptgraphen ansehen, den wir erstellt haben, sehen Sie, dass diese parallele Arbeit unter einem Knoten mit der Bezeichnung „researcher“ erfolgt, der vom Chefredakteur-Agenten ausgelöst wird.

Ausführen des Forschungsassistenten

Nachdem wir die Agenten, Zustände und Graphen fertiggestellt haben, ist es an der Zeit, unseren Forschungsassistenten auszuführen! Um die Anpassung zu erleichtern, läuft der Assistent mit einer gegebenen Aufgabendatei im JSON-Format:

{
  "query": "Is AI in a hype cycle?",
  "max\_sections": 3,
  "publish\_formats": {
    "markdown": true,
    "pdf": true,
    "docx": true
  },
  "follow\_guidelines": false,
  "model": "gpt-4-turbo",
  "guidelines": [
    "The report MUST be written in APA format",
    "Each sub section MUST include supporting sources using hyperlinks. If none exist, erase the sub section or rewrite it to be a part of the previous section",
    "The report MUST be written in spanish"
  ]
}

Die Aufgabenobjektdefinition ist ziemlich selbsterklärend, aber beachten Sie, dass „follow_guidelines“, wenn auf „false“ gesetzt, den Schritt der Überarbeitung und die definierten Richtlinien ignoriert. Außerdem definiert das Feld „max_sections“ die Anzahl der Unterüberschriften, die erforscht werden sollen. Eine geringere Anzahl führt zu einem kürzeren Bericht.

Die Ausführung des Assistenten führt zu einem endgültigen Forschungsbericht in Formaten wie Markdown, PDF und Docx.

Um die Beispielanwendung herunterzuladen und auszuführen, besuchen Sie die GPT Researcher x LangGraph Open-Source-Seite.

Was kommt als Nächstes?

In Zukunft gibt es einige aufregende Dinge, über die man nachdenken kann. Der Mensch in der Schleife ist entscheidend für optimierte KI-Erlebnisse. Wenn ein Mensch dem Assistenten hilft, den Forschungsplan, die Themen und die Struktur zu überprüfen, kann die Gesamtqualität und das Erlebnis verbessert werden. Im Allgemeinen ist es wichtig, sich auf die menschliche Interaktion während des KI-Flusses zu verlassen, um Korrektheit, Kontrolle und deterministische Ergebnisse sicherzustellen. LangGraph unterstützt dies bereits standardmäßig, wie hier zu sehen ist.

Darüber hinaus ist die Unterstützung von Forschungen zu sowohl Webinhalten als auch lokalen Daten entscheidend für viele Arten von geschäftlichen und persönlichen Anwendungsfällen.

Schließlich können weitere Anstrengungen unternommen werden, um die Qualität der abgerufenen Quellen zu verbessern und sicherzustellen, dass der endgültige Bericht in der optimalen Erzählstruktur erstellt wird.

Ein Schritt nach vorn in LangGraph und der Zusammenarbeit von Multi-Agenten insgesamt wäre, wenn Assistenten Graphen dynamisch auf der Grundlage gegebener Aufgaben planen und erstellen könnten. Diese Vision würde es Assistenten ermöglichen, nur eine Teilmenge von Agenten für eine bestimmte Aufgabe auszuwählen und ihre Strategie auf der Grundlage der in diesem Artikel vorgestellten Graphengrundlagen zu planen. Dies würde eine völlig neue Welt der Möglichkeiten eröffnen. Angesichts des Tempos der Innovationen im Bereich der KI wird es nicht lange dauern, bis eine neue, disruptive Version von GPT Researcher auf den Markt kommt. Ich freue mich auf das, was die Zukunft bringt!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert