Q&A-Produkte wie ChatGPT und Kimi verwenden Agenten-Dialoge (die Möglichkeit, verschiedene Werkzeuge zur Interaktion mit dem Benutzer aufzurufen), z. B. haben die Werkzeuge von Kimi LLM-Dialoge, Link-Dialoge, Datei-Dialoge und Netzwerk-Dialoge. ChatGPT, Wenxin Yiyin und Xunfei Starfire wurden zum Beispiel um textgenerierte Diagramme, das Schreiben von Code, mathematische Berechnungen usw. erweitert.
Der derzeit vorherrschende Rahmen für die Erreichung der Dialogfähigkeit von Agenten ist ReAct (vorgeschlagen von der Princeton University und Google im Jahr 2022). ReAct [1] ist ein Cued-Word-Ansatz, der Denken und Handeln miteinander verbindet. Seine historische Entwicklung wird im Folgenden dargestellt:
Die 3 Methoden in der obigen Tabelle sind:
Nur aus Gründen:Verwenden Sie Chain-of-Thought für Multi-Schritt-Denken, fügen Sie die Aufforderung "Let's think Schritt für Schritt" vor der Eingabe der Frage in der Eingabeaufforderung, um Multi-Schritt-Denken zu führen, geben Sie nicht die Antwort direkt, aber der Nachteil ist offensichtlich: Reason Nur geschlossene Tür nur denken, nicht zu tun, wird nicht gehen, um die Außenwelt zu sehen, um die Welt zu verstehen, bevor das Denken, so wird es Halluzinationen zu produzieren, die Änderung der Dynastien nicht wissen;
Act-Only:Beobachtung durch einstufige ActionObservation, Nachteil: Wenn ich es sofort tue, ohne darüber nachzudenken, ist die Antwort, die ich am Ende erhalte, möglicherweise nicht garantiert die gleiche wie die, die ich haben möchte;
ReAct:Eine Mischung aus Denken und Handeln, d. h. Nachdenken vor dem Handeln, Rückmeldung über die Ergebnisse des Handelns und dann Überlegung, was als nächstes zu tun ist, dann Handeln und Wiederholung des Prozesses immer und immer wieder in dem Wissen, dass die endgültige Antwort gefunden ist.
Erweiterung: Es gibt auch eine Selbstreflexion aus dem Jahr 2023 (Reflexion) des Rahmens, trat die Reflexion, wie unten gezeigt, nicht in die Tiefe hier. Darüber hinaus können interessierte Freunde an der großen Taobao Technologie öffentliche Zahl von "Agent Forschung - 19 Arten von Agent Rahmen Vergleich", dieses Stück, um ein Papier zu senden ist wirklich, je mehr Sie spielen, desto mehr Blumen aussehen.
Die im ReAct-Papier erwähnten Beispiele veranschaulichen die obige Logik sowie die Vor- und Nachteile besser:
Die Aufforderung von ReAct lautet:
"""
Erläuterung der Eingabevariablen für Agent Prompt:
- tools: Beschreibung des Werkzeugsatzes, in der Form "{tool.name}: {tool.description}".
- toool_names: Liste der Werkzeugnamen
- Verlauf: der Verlauf des Dialogs zwischen dem Benutzer und dem Agenten (beachten Sie, dass die mehrfachen ReAct-Runden mitten in einem Agenten-Chat nicht zum Dialogverlauf gezählt werden)
- Eingabe: Benutzerfragen
- agent_scratchpad: Zwischengeschaltete Handlungs- und Beobachtungsprozesse.
würde als "\nBeobachtung: {Beobachtung}\nGedanke:{Aktion}" formatiert werden.
Dann geben Sie agent_scratchpad ein (Gedankendatensatz des Agenten)
"""
agent_prompt = """
Beantworten Sie die folgenden Fragen so gut wie möglich. Wenn es in Ordnung ist, können Sie einige Werkzeuge entsprechend einsetzen. Sie haben Zugang zu den folgenden Werkzeugen.{tools}
Verwenden Sie das folgende Format.
Frage: die Eingangsfrage, die Sie beantworten müssen1
Gedanke: Man sollte sich immer überlegen, was man tut und welche Hilfsmittel man benutzt.
Aktion: die zu ergreifende Aktion, sollte eine der folgenden sein: {toool_names}
Aktionseingabe: die Eingabe für die Aktion
Beobachtung: das Ergebnis der Handlung
... (dieser Gedanke/Handlung/Handlungseingabe/Beobachtung kann null oder mehr Mal wiederholt werden)
Ich kenne jetzt die endgültige Antwort
Endgültige Antwort: die endgültige Antwort auf die ursprüngliche Eingabefrage
Beginnen Sie!Geschichte: {Geschichte}
Frage: {Eingabe}
Gedanke: {agent_scratchpad}""""
Das Flussdiagramm der ReAct-Anwendung ist unten abgebildet:
Es gibt ein gutes Beispiel im Internet, das hier zur Veranschaulichung herangezogen wird [2]:
Nehmen wir an, wir haben:
Fragen der BenutzerWie hoch ist der Durchschnittspreis für Rosen auf dem heutigen Markt? Wie soll ich sie bepreisen, wenn ich sie für 151 TP3T verkaufe?"
Werkzeuge:: {'bing web search': ein Tool zum Durchsuchen des Webs nach Open-Source-Informationen mit Hilfe der Bing-Suche; 'llm-math': ein Tool zum Rechnen mit großen Modellen und Python}
Dann lautet der Input für die erste Dialogrunde:
Beantworten Sie die folgenden Fragen so gut wie möglich. Wenn es in Ordnung ist, können Sie einige Werkzeuge entsprechend einsetzen. Sie haben Zugang zu den folgenden Werkzeugen.
bing-web-search: Bing Search, ein quelloffenes Werkzeug zur Websuche
llm-math: Werkzeuge für die Mathematik mit großen Modellen und Python
Verwenden Sie das folgende Format.
Frage: die Eingangsfrage, die Sie beantworten müssen1
Gedanke: Man sollte sich immer überlegen, was man tut und welche Hilfsmittel man benutzt.
Aktion: die auszuführende Aktion, sollte eine von [bing-web-search, llm-math] sein
Aktionseingabe: die Eingabe für die Aktion
Beobachtung: das Ergebnis der Handlung
... (dieser Gedanke/Handlung/Handlungseingabe/Beobachtung kann null oder mehr Mal wiederholt werden)
Ich kenne jetzt die endgültige Antwort
Endgültige Antwort: die endgültige Antwort auf die ursprüngliche Eingabefrage
Beginnen Sie!
Geschichte.
Frage: Wie hoch ist der Durchschnittspreis für Rosen auf dem aktuellen Markt? Wie sollte ich die Rosen bepreisen, wenn ich sie mit einem Aufschlag von 15% verkaufe?
Gedacht.
Holen Sie sich die Ausgabe und analysieren Sie sie, um Gedanken, Handlungen und Handlungseingaben zu erhalten:
Gedanke: Ich sollte die Suchfunktion nutzen, um Antworten zu finden, damit ich die benötigten Informationen schnell finden kann.
Aktion: bing-web-search
Aktion Input: Durchschnittspreis für Rosen
Rufen Sie die bing-Websuche auf, geben Sie "Durchschnittspreis für Rosen" ein und erhalten Sie den Inhalt Beobachtung: "Laut Internet kostet ein Rosenstrauß in den Vereinigten Staaten 80,16 $." Geben Sie anschließend den oben genannten Inhalt ein, ordnen Sie ihn und stellen Sie ihn auf die Website. Danach geben Sie den obigen Inhalt in die ReAct-Vorlage ein und starten die zweite Runde der Dialogeingabe:
Beantworten Sie die folgenden Fragen so gut wie möglich. Wenn es in Ordnung ist, können Sie einige Werkzeuge entsprechend einsetzen. Sie haben Zugang zu den folgenden Werkzeugen.
bing-web-search: Bing Search, ein quelloffenes Werkzeug zur Websuche
llm-math: Werkzeuge für die Mathematik mit großen Modellen und Python
Verwenden Sie das folgende Format.
Frage: die Eingangsfrage, die Sie beantworten müssen1
Gedanke: Man sollte sich immer überlegen, was man tut und welche Hilfsmittel man benutzt.
Aktion: die auszuführende Aktion, sollte eine von [bing-web-search, llm-math] sein
Aktionseingabe: die Eingabe für die Aktion
Beobachtung: das Ergebnis der Handlung
... (dieser Gedanke/Handlung/Handlungseingabe/Beobachtung kann null oder mehr Mal wiederholt werden)
Ich kenne jetzt die endgültige Antwort
Endgültige Antwort: die endgültige Antwort auf die ursprüngliche Eingabefrage
Beginnen Sie!
Geschichte.
Frage: Wie hoch ist der Durchschnittspreis für Rosen auf dem aktuellen Markt? Wie sollte ich die Rosen bepreisen, wenn ich sie mit einem Aufschlag von 15% verkaufe?
Gedanke: Ich sollte die Suchfunktion nutzen, um Antworten zu finden, damit ich die benötigten Informationen schnell finden kann.
Aktion: bing-web-search
Aktion Input: Durchschnittspreis für Rosen
Beobachtung: Online-Quellen zufolge kostet ein Rosenstrauß in den USA 80,16 Dollar.
Gedacht.
Holen Sie sich die Ausgabe und analysieren Sie sie, um Gedanken, Handlungen und Handlungseingaben zu erhalten:
Gedanke: Ich brauche die Mathematik, um herauszufinden, was ein Aufschlag von 15% auf diesen Betrag bedeuten würde.
Aktion: llm-math
Aktion Eingang: 80.16*1.15
Rufen Sie das Tool llm-math auf, geben Sie "80.16*1.15" ein und erhalten Sie den Inhalt Observation: "92.184". Danach geben Sie den obigen Inhalt in die ReAct-Vorlage für die Eingabeaufforderung ein und öffnen die dritte Runde der Dialogeingabe:
Beantworten Sie die folgenden Fragen so gut wie möglich. Wenn es in Ordnung ist, können Sie einige Werkzeuge entsprechend einsetzen. Sie haben Zugang zu den folgenden Werkzeugen.
bing-web-search: Bing Search, ein quelloffenes Werkzeug zur Websuche
llm-math: Werkzeuge für die Mathematik mit großen Modellen und Python
Verwenden Sie das folgende Format.
Frage: die Eingangsfrage, die Sie beantworten müssen1
Gedanke: Man sollte sich immer überlegen, was man tut und welche Hilfsmittel man benutzt.
Aktion: die auszuführende Aktion, sollte eine von [bing-web-search, llm-math] sein
Aktionseingabe: die Eingabe für die Aktion
Beobachtung: das Ergebnis der Handlung
... (dieser Gedanke/Handlung/Handlungseingabe/Beobachtung kann null oder mehr Mal wiederholt werden)
Ich kenne jetzt die endgültige Antwort
Endgültige Antwort: die endgültige Antwort auf die ursprüngliche Eingabefrage
Beginnen Sie!
Geschichte.
Frage: Wie hoch ist der Durchschnittspreis für Rosen auf dem aktuellen Markt? Wie sollte ich die Rosen bepreisen, wenn ich sie mit einem Aufschlag von 15% verkaufe?
Gedanke: Ich sollte die Suchfunktion nutzen, um Antworten zu finden, damit ich die benötigten Informationen schnell finden kann.
Aktion: bing-web-search
Aktion Input: Durchschnittspreis für Rosen
Beobachtung: Online-Quellen zufolge kostet ein Rosenstrauß in den USA 80,16 Dollar.
Gedanke: Ich brauche Daten, um zu berechnen, wie hoch der Preis mit einem Aufschlag von 15 Euro wäre.
Aktion: llm-math
Aktion Eingang: 80.16*1.15
Beobachtung: 92.184
Gedacht.
Holen Sie sich die Ausgabe und analysieren Sie sie, um Gedanken, Handlungen und Handlungseingaben zu erhalten:
Gedanke: Ich kenne die endgültige Antwort.
Endgültige Antwort: Wenn Sie 15% zum Verkauf hinzufügen möchten, sollte der Preis bei 92,184 $ liegen.
Langchain hat den ReAct-Aufruf [3] implementiert, für den Sie ReAct Agent, AgentExecutor und Tools erstellen müssen. Durch den ReAct Agent können wir das realisieren, was wir zuvor erwähnt haben, eine Verbindung zu verschiedenen Tools herstellen und verschiedene Tools entsprechend den Bedürfnissen des Benutzers und den Überlegungen von LLM aufrufen, um die Leistung von Q&A zu verbessern. Wenn Sie den ReAct-basierten Agenten-Chat selbst umschreiben, müssen Sie besonders auf einige Randbedingungen achten, wie z. B. dass die Auswahl des Werkzeugs nicht existiert, der Werkzeugaufruf fehlschlägt, der Werkzeugaufruf in einer toten Schleife festhängt usw., da diese letztendlich die Effektivität der Interaktion beeinträchtigen. Ich persönlich habe einige Erkenntnisse gewonnen, als ich die Wirkung von ReAct Agent Chat in der Praxis getestet habe:
- Wählen Sie LLMs, die einen Abgleich der Dialogfähigkeit von Agenten durchgeführt haben, und vorzugsweise kann ReAct Prompt an LLMs angepasst werden;
- Eine klare Beschreibung guter Werkzeugeinführungen verringert die Unschärfe der Beschreibungen zwischen den Werkzeugen und verhindert, dass das falsche Werkzeug verwendet wird;
- Hüten Sie sich vor mehrfachen Runden des Denkens, Handelns und Beobachtens, die zu einem zu großen Input-Kontext führen, und viele LLMs werden schlecht darin, lange kontextuelle Inputs zu verstehen.
- Wenn es nur eine einzige Runde von Think-Act-Beobachtung, dann eine Reihe von Prozess nach unten, müssen Sie durch 2 mal LLM und 1 mal Tool-Aufruf zu gehen, wird es die Reaktionszeit zu beeinträchtigen, wenn Sie den Prozess dieser ReAct vereinfachen wollen, können Sie direkt die Absichtserkennung + Tool-Aufruf, durch das Werkzeug, um direkt das endgültige Ergebnis, müssen nicht zurück zu den LLM-Feed zu tun, eine Zusammenfassung Antwort, der Nachteil ist, dass es nicht so perfekt.
LangChain bietet eine Reihe von Starterkits an, die in [4] zu finden sind.
Durch die Vorderseite können wir feststellen, dass Action und Action Input der Name des Werkzeugs und die Eingabe des Werkzeugs sind, wenn wir einen Dialog mit der temporären Upload-Datei haben wollen, können wir einfach die Werkzeuge direkt hinzufügen? In der Tat ist das nicht so gut, denn Action Input ist die Eingabe des Tools, die auf dem Parsen der Abfrage durch den LLM basiert, während die Funktion "Dialog mit der temporären hochgeladenen Datei" den Speicherort oder den Inhalt der Datei benötigt. Aus diesem Grund können Sie meiner Zeichnung unten folgen und "Dialog mit der temporären hochgeladenen Datei" nur in die Funktion "Action Input" einfügen. Aus diesem Grund können Sie die Funktion "Dialog mit temporär hochgeladenen Dateien" von der Funktion "Dialog mit temporär hochgeladenen Dateien" trennen, wie ich in der Abbildung unten gezeichnet habe.
Der spezifische Front-End- und Back-End-Kooperationsprozess sieht wie folgt aus:
Nachdem der Benutzer eine Datei hochgeladen hat, erstellt das Front-End zunächst eine temporäre Wissensbasis und lädt dann die Datei in diese Wissensbasis hoch, wobei die Anzahl der Dialogrunden für die Datei auf 0 initialisiert und der Variablenname dieser temporären Wissensbasis aufgezeichnet wird;
2, jede nachfolgende Runde des Dialogs, die Wissensbasis Name in Agent Chat übergeben wird, nach dem oben genannten Fluss gehen, nach jeder Runde des Dialogs, sind mit der Anzahl der Runden des Dialogs unter dem Dokument aktualisiert;
3、Wenn die Anzahl der Dokumentendialogrunden die Anzahl der Dokumentenaufbewahrungsrunden übersteigt oder der Benutzer den Kontext manuell löscht, dann löscht das Front-End die temporäre Wissensbasis und löscht den Variablennamen der temporären Wissensbasis.
bibliographie
[1] ReAct: Synergising Reasoning and Acting in Language Models, offizielle Präsentation: https://react-lm.github.io/
[2] LangChain-Trockenübung (1): Wie genau steuert AgentExecutor Modelle und Werkzeuge zur Erfüllung von Aufgaben? - Huang Jia's Artikel - 知乎https://zhuanlan.zhihu.com/p/661244337
[3] ReAct, Langchain Dokumentation: https://python.langchain.com/docs/modules/agents/agent_types/react/
[4] Agent Toolkit, Langchain-Dokumentation: https://python.langchain.com/docs/integrations/toolkits/
[5] "LLM+Search Rewrite" 10 Papers auf einen Blick - Essays von Obsessed with Searching and Pushing - Wissen: https://zhuanlan.zhihu.com/p/672357196
[6] MultiQueryRetriever, Langchain Dokumentation: https://python.langchain.com/docs/modules/data_connection/retrievers/MultiQueryRetriever/
[7] HypotheticalDocumentEmbedder, Langchain Dokumentation: https://github.com/langchain-ai/langchain/blob/master/cookbook/hypothetical_document_ einbettungen.ipynb
[8] Big Model Application Development, Must-See RAG Advanced Tips - Artikel von Rainfly - Wissen: https://zhuanlan.zhihu.com/p/680232507