Wie füge ich einem Agenten und seinen Tools in LangChain Speicher hinzu?

Wie Fuge Ich Einem Agenten Und Seinen Tools In Langchain Speicher Hinzu



LangChain bietet alle erforderlichen Tools zum Erstellen der Agenten, um den Prozess der Informationsextraktion für den Benutzer zu steuern. Diese Tools sind für den Aufbau des Agenten erforderlich, da er die Aufgaben mit verschiedenen Tools verwaltet. Agenten manipulieren diese Tools auch, um die Schritte abzuarbeiten und alle Aktivitäten umzusetzen. Es weiß, welches Werkzeug für die jeweilige Aufgabe benötigt wird und wann es dieser spezifischen Aufgabe zugewiesen werden muss.

Kurzer Überblick

In diesem Beitrag wird Folgendes demonstriert:

Wie füge ich einem Agenten und seinen Tools in LangChain Speicher hinzu?

Durch das Hinzufügen von Speicher zu den Agenten und Tools können diese besser arbeiten und den Chat-Verlauf des Modells nutzen. Mithilfe des Arbeitsspeichers kann der Agent effizient entscheiden, welches Tool wann bereitgestellt werden soll. Vorzugsweise verwenden Sie „ Nur-Lese-Speicher ” sowohl für Agenten als auch für Tools, sodass sie es nicht ändern können. Um den Prozess des Hinzufügens von Speicher zu Agenten und Tools in LangChain zu erlernen, führen Sie die aufgeführten Schritte aus:







Schritt 1: Frameworks installieren

Installieren Sie zunächst die langchain-experimentell Modul, um seine Abhängigkeiten zum Erstellen von Sprachmodellen und Tools für den Agenten abzurufen. LangChain Experimental ist das Modul, das die Abhängigkeiten zum Erstellen von Modellen abruft, die hauptsächlich für Experimente und Tests verwendet werden:



pip langchain installieren - Experimental-



Bekommen das Google-Suchergebnisse Module mit den OpenAI-Abhängigkeiten, um die relevantesten Antworten aus dem Internet zu erhalten:





pip openai google installieren - suchen - Ergebnisse

Schritt 2: Umgebungen einrichten

Um das Modell zu erstellen, das Antworten aus dem Internet erhält, müssen die Umgebungen mithilfe von eingerichtet werden OpenAI Und SerpAPi Schlüssel:



importieren Du
importieren getpass

Du. etwa [ „OPENAI_API_KEY“ ] = getpass. getpass ( „OpenAI-API-Schlüssel:“ )
Du. etwa [ „SERPAPI_API_KEY“ ] = getpass. getpass ( „Serpapi-API-Schlüssel:“ )

Schritt 3: Bibliotheken importieren

Importieren Sie nach dem Einrichten der Umgebungen die Bibliotheken, um die Tools für den Agenten und den zusätzlichen Speicher für die Integration zu erstellen. Der folgende Code verwendet die Agenten, Speicher, LLMs, Ketten, Eingabeaufforderungen und Dienstprogramme, um die erforderlichen Bibliotheken abzurufen:

von langchain. Agenten importieren ZeroShotAgent , Werkzeug , AgentExecutor
von langchain. Erinnerung importieren ConversationBufferMemory , ReadOnlySharedMemory
von langchain. lms importieren OpenAI
#Hol dir die Bibliothek für Aufbau der Kette mit LangChain
von langchain. Ketten importieren LLMChain
von langchain. Aufforderungen importieren PromptTemplate
#Hol dir die Bibliothek für die Informationen aus dem Internet beziehen
von langchain. Dienstprogramme importieren SerpAPIWrapper

Schritt 4: ReadOnlyMemory hinzufügen

Konfigurieren Sie die Vorlage, damit der Agent mit der Ausführung von Aufgaben beginnen kann, sobald der Benutzer die Eingabe vornimmt. Danach fügen Sie die hinzu „ConversationBufferMemory()“ um den Chatverlauf des Modells zu speichern und zu initialisieren 'Nur-Lese-Speicher' für die Agenten und ihre Tools:

Vorlage = „“ „Dies ist ein Gespräch zwischen einem Menschen und einem Bot:

{Chatverlauf}
#Legen Sie die Struktur fest, um die präzise und einfache Zusammenfassung zu extrahieren
Fassen Sie den Chat für {input} zusammen:
'
„“

prompt = PromptTemplate ( Eingabevariablen = [ 'Eingang' , 'Chatverlauf' ] , Vorlage = Vorlage )
Erinnerung = ConversationBufferMemory ( Speicherschlüssel = 'Chatverlauf' )
Nur-Lese-Speicher = ReadOnlySharedMemory ( Erinnerung = Erinnerung )
#Zusammenfassungskette zur Integration aller Komponenten für die Zusammenfassung des Gesprächs abrufen
summary_chain = LLMChain (
llm = OpenAI ( ) ,
prompt = prompt ,
ausführlich = WAHR ,
Erinnerung = Nur-Lese-Speicher ,
)

Schritt 5: Tools einrichten

Richten Sie nun Tools wie Suche und Zusammenfassung ein, um die Antwort zusammen mit der Zusammenfassung des Chats aus dem Internet zu erhalten:

suchen = SerpAPIWrapper ( )
Werkzeuge = [
Werkzeug (
Name = 'Suchen' ,
Funktion = suchen. laufen ,
Beschreibung = „richtige Antworten auf die gezielten Anfragen zu den jüngsten Ereignissen“ ,
) ,
Werkzeug (
Name = 'Zusammenfassung' ,
Funktion = summary_chain. laufen ,
Beschreibung = „Es ist hilfreich, den Chat zusammenzufassen. Die Eingabe in dieses Tool sollte eine Zeichenfolge sein, die angibt, wer diese Zusammenfassung lesen wird.“ ,
) ,
]

Schritt 6: Erstellen des Agenten

Konfigurieren Sie den Agenten, sobald die Tools bereit sind, die erforderlichen Aufgaben auszuführen und die Antworten aus dem Internet zu extrahieren. Der ' Präfix Die Variable wird ausgeführt, bevor die Agenten den Tools eine Aufgabe zuweisen, und die Variable „ Suffix ” wird ausgeführt, nachdem die Tools die Antwort extrahiert haben:

Präfix = „“ „Führen Sie ein Gespräch mit einem Menschen und beantworten Sie die folgenden Fragen so gut wie möglich, indem Sie auf die folgenden Tools zugreifen:“ „“
Suffix = „“ 'Beginnen!'
#Struktur für Der Agent kann mit der Verwendung der Tools beginnen, während er den Speicher nutzt
{ Chatverlauf }
Frage : { Eingang }
{ agent_scratchpad } „“ '

prompt = ZeroShotAgent.create_prompt(
#Konfigurieren Sie Eingabeaufforderungsvorlagen, um den Kontext der Frage zu verstehen
Werkzeuge,
Präfix=Präfix,
Suffix=Suffix,
input_variables=['
Eingang ',' Chatverlauf ',' agent_scratchpad '],
)

Methode 1: Verwendung von ReadOnlyMemory

Sobald der Agent so eingestellt ist, dass er die Tools ausführt, ist das Modell mit ReadOnlyMemory das bevorzugt Die Methode zum Erstellen und Ausführen der Ketten zum Abrufen von Antworten ist wie folgt:

Schritt 1: Aufbau der Kette

Der erste Schritt bei dieser Methode besteht darin, die Kette und den Executor für zu erstellen „ZeroShotAgent()“ mit seinen Argumenten. Der „LLMChain()“ wird verwendet, um die Verbindung zwischen allen Chats im Sprachmodell mithilfe der Argumente llm und prompt aufzubauen. Der Agent verwendet llm_chain, tools und verbose als Argument und erstellt agent_chain, um beide Agenten und seine Tools mit dem Speicher auszuführen:

llm_chain = LLMChain ( llm = OpenAI ( Temperatur = 0 ) , prompt = prompt )
Agent = ZeroShotAgent ( llm_chain = llm_chain , Werkzeuge = Werkzeuge , ausführlich = WAHR )
agent_chain = AgentExecutor. from_agent_and_tools (
Agent = Agent , Werkzeuge = Werkzeuge , ausführlich = WAHR , Erinnerung = Erinnerung
)

Schritt 2: Testen der Kette

Ruf den agent_chain Verwenden der run()-Methode, um die Frage aus dem Internet zu stellen:

agent_chain. laufen ( Eingang = „Was ist LangChain?“ )

Der Agent hat die Antwort mithilfe der Suchtools aus dem Internet extrahiert:

Der Benutzer kann die unklare Folgefrage stellen, um den mit dem Agenten verbundenen Speicher zu testen:

agent_chain. laufen ( Eingang = „Wer hat es entwickelt?“ )

Der Agent hat den vorherigen Chat genutzt, um den Kontext der Fragen zu verstehen, und hat die Antworten abgerufen, wie im folgenden Screenshot dargestellt:

Der Agent verwendet das Tool (summary_chain), um eine Zusammenfassung aller zuvor aus dem Speicher des Agenten extrahierten Antworten zu extrahieren:

agent_chain. laufen (
Eingang = „Danke! Fassen Sie das Gespräch für mein 5-jähriges Kind zusammen.“
)

Ausgabe
Die Zusammenfassung der zuvor gestellten Fragen wurde für einen 5-Jährigen im folgenden Screenshot angezeigt:

Schritt 3: Testen des Speichers

Drucken Sie den Pufferspeicher aus, um die darin gespeicherten Chats zu extrahieren, indem Sie den folgenden Code verwenden:

drucken ( agent_chain. Erinnerung . Puffer )

Im folgenden Snippet werden die Chats in der richtigen Reihenfolge ohne jegliche Änderung angezeigt:

Methode 2: Den gleichen Speicher für Agent und Tools verwenden

Die zweite Methode, die von der Plattform nicht empfohlen wird, ist die Verwendung des Pufferspeichers sowohl für Agenten als auch für Tools. Die Tools können die im Speicher gespeicherten Chats ändern, was bei großen Konversationen zu falschen Ausgaben führen kann:

Schritt 1: Aufbau der Kette

Verwendung des vollständigen Codes aus der Vorlage zum Erstellen der Tools und Ketten für die Agenten mit einer kleinen Änderung, da der ReadOnlyMemory dieses Mal nicht hinzugefügt wird:

Vorlage = „“ „Dies ist ein Gespräch zwischen einem Menschen und einem Bot:

{Chatverlauf}

Schreiben Sie eine Zusammenfassung der Konversation für {input}:
'
„“
#Bauen Sie die Struktur des Chats auf Schnittstelle Verwenden der Eingabeaufforderungsvorlage durch Hinzufügen des Speichers mit der Kette
prompt = PromptTemplate ( Eingabevariablen = [ 'Eingang' , 'Chatverlauf' ] , Vorlage = Vorlage )
Erinnerung = ConversationBufferMemory ( Speicherschlüssel = 'Chatverlauf' )
summary_chain = LLMChain (
llm = OpenAI ( ) ,
prompt = prompt ,
ausführlich = WAHR ,
Erinnerung = Erinnerung ,
)
#baue die Werkzeuge ( Suche und Zusammenfassung ) für Konfigurieren der Agenten
suchen = SerpAPIWrapper ( )
Werkzeuge = [
Werkzeug (
Name = 'Suchen' ,
Funktion = suchen. laufen ,
Beschreibung = „richtige Antworten auf die gezielten Anfragen zu den jüngsten Ereignissen“ ,
) ,
Werkzeug (
Name = 'Zusammenfassung' ,
Funktion = summary_chain. laufen ,
Beschreibung = „Hilfreich, um die Zusammenfassung des Chats zu erhalten, und benötigen die Eingabe einer Zeichenfolge in dieses Tool, die angibt, wer diese Zusammenfassung lesen wird.“ ,
) ,
]
#erkläre die Schritte für Der Agent soll die Tools zum Extrahieren von Informationen verwenden für der Chat
Präfix = „“ „Führen Sie ein Gespräch mit einem Menschen und beantworten Sie die Fragen bestmöglich, indem Sie auf die folgenden Tools zugreifen:“ „“
Suffix = „“ 'Beginnen!'
#Struktur für Der Agent kann mit der Verwendung der Tools beginnen, während er den Speicher nutzt
{ Chatverlauf }
Frage : { Eingang }
{ agent_scratchpad } „“ '

prompt = ZeroShotAgent.create_prompt(
#Konfigurieren Sie Eingabeaufforderungsvorlagen, um den Kontext der Frage zu verstehen
Werkzeuge,
Präfix=Präfix,
Suffix=Suffix,
input_variables=['
Eingang ',' Chatverlauf ',' agent_scratchpad '],
)
#Integrieren Sie alle Komponenten beim Erstellen des Agent-Executors
llm_chain = LLMChain(llm=OpenAI(temperature=0), prompt=prompt)
agent = ZeroShotAgent(llm_chain=llm_chain, tools=tools, verbose=True)
agent_chain = AgentExecutor.from_agent_and_tools(
agent=agent, tools=tools, verbose=True, memory=memory
)

Schritt 2: Testen der Kette

Führen Sie den folgenden Code aus:

agent_chain. laufen ( Eingang = „Was ist LangChain?“ )

Die Antwort wird erfolgreich angezeigt und im Speicher abgelegt:

Stellen Sie die Folgefrage, ohne viel vom Kontext preiszugeben:

agent_chain. laufen ( Eingang = „Wer hat es entwickelt?“ )

Der Agent nutzt das Gedächtnis, um die Frage zu verstehen, indem er sie umwandelt, und gibt dann die Antwort aus:

Rufen Sie die Zusammenfassung des Chats mithilfe des mit dem Agenten verbundenen Speichers ab:

agent_chain. laufen (
Eingang = „Danke! Fassen Sie das Gespräch für mein 5-jähriges Kind zusammen.“
)

Ausgabe
Die Zusammenfassung wurde erfolgreich extrahiert und bis jetzt scheint alles beim Alten zu sein, aber die Änderung kommt im nächsten Schritt:

Schritt 3: Testen des Speichers

Extrahieren der Chat-Nachrichten aus dem Speicher mit dem folgenden Code:

drucken ( agent_chain. Erinnerung . Puffer )

Das Tool hat den Verlauf geändert, indem es eine weitere Frage hinzugefügt hat, die ursprünglich nicht gestellt wurde. Dies geschieht, wenn das Modell die Frage mithilfe von a versteht selbst fragen Frage. Das Tool geht fälschlicherweise davon aus, dass die Anfrage vom Benutzer gestellt wurde, und behandelt sie als separate Anfrage. Es fügt also auch diese zusätzliche Frage zum Speicher hinzu, die dann verwendet wird, um den Kontext des Gesprächs zu ermitteln:

Das ist alles für den Moment.

Abschluss

Um einem Agenten und seinen Tools in LangChain Speicher hinzuzufügen, installieren Sie die Module, um ihre Abhängigkeiten abzurufen und Bibliotheken daraus zu importieren. Erstellen Sie anschließend den Konversationsspeicher, das Sprachmodell, die Tools und den Agenten, um den Speicher hinzuzufügen. Der empfohlene Methode Um den Speicher hinzuzufügen, wird ReadOnlyMemory zum Agenten und seinen Tools zum Speichern des Chat-Verlaufs verwendet. Der Benutzer kann auch die verwenden Gesprächsgedächtnis sowohl für Agenten als auch für Tools. Aber sie verstehen es verwirrt manchmal und ändern sich die Chats im Speicher.