Hoe kan ik geheugen toevoegen aan zowel een agent als zijn tools in LangChain?

Hoe Kan Ik Geheugen Toevoegen Aan Zowel Een Agent Als Zijn Tools In Langchain



LangChain biedt alle benodigde tools voor het bouwen van agenten om het proces van het extraheren van informatie voor de gebruiker te controleren. Deze tools zijn nodig voor het bouwen van de agent, omdat ze de taken beheren met behulp van verschillende tools. Agenten manipuleren deze tools ook om de stappen te doorlopen en alle activiteiten uit te voeren. Het weet welk gereedschap nodig is voor de taak en wanneer het aan die specifieke taak moet worden toegewezen.

Snel overzicht

Dit bericht zal het volgende aantonen:

Hoe kan ik geheugen toevoegen aan zowel een agent als zijn tools in LangChain?

Door geheugen aan de agenten en tools toe te voegen, kunnen ze beter werken met de mogelijkheid om de chatgeschiedenis van het model te gebruiken. Met geheugen kan de agent efficiënt beslissen welke tool hij wanneer wil inzetten. Bij voorkeur wordt gebruik gemaakt van de “ Alleen-lezen geheugen ' voor zowel agenten als tools, zodat ze het niet kunnen wijzigen. Om het proces van het toevoegen van geheugen aan zowel agenten als tools in LangChain te leren, doorloopt u de vermelde stappen:







Stap 1: Frameworks installeren

Installeer eerst de langketen-experimenteel module om de afhankelijkheden op te halen voor het bouwen van taalmodellen en hulpmiddelen voor de agent. LangChain experimenteel is de module die de afhankelijkheden ophaalt voor het bouwen van modellen die meestal worden gebruikt voor experimenten en tests:



pip installeer langchain - experimenteel



Pak de google-zoekresultaten modules met de OpenAI-afhankelijkheden om de meest relevante antwoorden van internet te krijgen:





pip installeer openai google - zoekopdracht - resultaten

Stap 2: Omgevingen instellen

Om het model te bouwen dat antwoorden van internet krijgt, is het nodig om de omgevingen in te richten met behulp van de OpenAI En SerpAPi sleutels:



importeren Jij
importeren Krijg een pas

Jij. ongeveer [ 'OPENAI_API_KEY' ] = Krijg een pas. Krijg een pas ( 'OpenAI API-sleutel:' )
Jij. ongeveer [ 'SERPAPI_API_KEY' ] = Krijg een pas. Krijg een pas ( 'Serpapi API-sleutel:' )

Stap 3: Bibliotheken importeren

Nadat u de omgevingen hebt ingesteld, importeert u de bibliotheken om de tools voor de agent te bouwen en het extra geheugen dat u daarmee kunt integreren. De volgende code gebruikt de agenten, het geheugen, llms, ketens, aanwijzingen en hulpprogramma's om de vereiste bibliotheken op te halen:

van langketen. agenten importeren ZeroShotAgent , Hulpmiddel , AgentUitvoerder
van langketen. geheugen importeren ConversatieBufferGeheugen , ReadOnlySharedMemory
van langketen. llms importeren OpenAI
#haal de bibliotheek voor het bouwen van de keten met behulp van LangChain
van langketen. kettingen importeren LLMChain
van langketen. aanwijzingen importeren Promptsjabloon
#haal de bibliotheek voor de informatie van internet halen
van langketen. nutsvoorzieningen importeren SerpAPIWrapper

Stap 4: ReadOnlyMemory toevoegen

Configureer de sjabloon zodat de agent aan de slag gaat met het uitvoeren van taken zodra de gebruiker invoer geeft. Voeg daarna de “ConversatieBufferGeheugen()” om de chatgeschiedenis van het model op te slaan en de “Alleen-lezen geheugen” voor de agenten en hun tools:

sjabloon = '' 'Dit is een gesprek tussen een mens en een bot:

{chatgeschiedenis}
#set de structuur voor het extraheren van de precieze en gemakkelijke samenvatting
Vat de chat voor {input} samen:
'
''

snel = Promptsjabloon ( invoervariabelen = [ 'invoer' , 'chatgeschiedenis' ] , sjabloon = sjabloon )
geheugen = ConversatieBufferGeheugen ( geheugen_sleutel = 'chatgeschiedenis' )
alleen-lezen geheugen = ReadOnlySharedMemory ( geheugen = geheugen )
#samenvattingsketen om alle componenten te integreren voor de samenvatting van het gesprek opvragen
samenvatting_keten = LLMChain (
llm = OpenAI ( ) ,
snel = snel ,
uitgebreid = WAAR ,
geheugen = alleen-lezen geheugen ,
)

Stap 5: Tools instellen

Stel nu tools in zoals zoeken en samenvatting om het antwoord van internet te krijgen, samen met de samenvatting van de chat:

zoekopdracht = SerpAPIWrapper ( )
hulpmiddelen = [
Hulpmiddel (
naam = 'Zoekopdracht' ,
func = zoekopdracht. loop ,
beschrijving = 'juiste antwoorden op de gerichte vragen over de recente gebeurtenissen' ,
) ,
Hulpmiddel (
naam = 'Samenvatting' ,
func = samenvatting_keten. loop ,
beschrijving = 'handig om de chat samen te vatten en de invoer voor deze tool moet een tekenreeks zijn die aangeeft wie deze samenvatting zal lezen' ,
) ,
]

Stap 6: De agent bouwen

Configureer de agent zodra de tools klaar zijn om de vereiste taken uit te voeren en de antwoorden van internet te halen. De ' voorvoegsel ”variabele wordt uitgevoerd voordat de agenten een taak aan de tools toewijzen en de “ achtervoegsel ” wordt uitgevoerd nadat de tools het antwoord hebben geëxtraheerd:

voorvoegsel = '' 'Voer een gesprek met een mens en beantwoord de volgende vragen zo goed mogelijk door gebruik te maken van de volgende hulpmiddelen:' ''
achtervoegsel = '' 'Beginnen!'
#structuur voor de agent om de tools te gaan gebruiken terwijl hij het geheugen gebruikt
{ chatgeschiedenis }
Vraag : { invoer }
{ agent_kladblok } '' '

prompt = ZeroShotAgent.create_prompt(
#configureer promptsjablonen om de context van de vraag te begrijpen
hulpmiddelen,
voorvoegsel=voorvoegsel,
achtervoegsel=achtervoegsel,
input_variables=['
invoer ', ' chatgeschiedenis ', ' agent_kladblok '],
)

Methode 1: ReadOnlyMemory gebruiken

Zodra de agent is ingesteld om de tools uit te voeren, is het model met ReadOnlyMemory het de voorkeur manier om de ketens op te bouwen en uit te voeren om antwoorden op te halen, en het proces is als volgt:

Stap 1: Bouw de keten

De eerste stap in deze methode is het bouwen van de keten en de uitvoerder voor het “ZeroShotAgent()” met zijn argumenten. De “LLMCein()” wordt gebruikt om de verbinding tussen alle chats in het taalmodel op te bouwen met behulp van de llm- en prompt-argumenten. De agent gebruikt de llm_chain, tools en verbose als argument en bouwt agent_chain om zowel agenten als zijn tools uit te voeren met het geheugen:

llm_chain = LLMChain ( llm = OpenAI ( temperatuur = 0 ) , snel = snel )
tussenpersoon = ZeroShotAgent ( llm_chain = llm_chain , hulpmiddelen = hulpmiddelen , uitgebreid = WAAR )
agent_keten = AgentUitvoerder. van_agent_en_tools (
tussenpersoon = tussenpersoon , hulpmiddelen = hulpmiddelen , uitgebreid = WAAR , geheugen = geheugen
)

Stap 2: De ketting testen

Bel de agent_keten de methode run() gebruiken om de vraag vanaf internet te stellen:

agent_keten. loop ( invoer = 'Wat is LangChain' )

De agent heeft het antwoord van internet gehaald met behulp van de zoekhulpmiddelen:

De gebruiker kan de onduidelijke vervolgvraag stellen om het geheugen dat aan de agent is gekoppeld te testen:

agent_keten. loop ( invoer = 'Wie heeft het ontwikkeld?' )

De agent heeft de vorige chat gebruikt om de context van de vragen te begrijpen en de antwoorden opgehaald zoals weergegeven in de volgende schermafbeelding:

De agent gebruikt de tool (summary_chain) om een ​​samenvatting te extraheren van alle antwoorden die eerder uit het geheugen van de agent zijn gehaald:

agent_keten. loop (
invoer = 'Bedankt! Vat het gesprek samen, voor mijn 5-jarige'
)

Uitvoer
De samenvatting van de eerder gestelde vragen is voor een 5-jarige weergegeven in de volgende schermafbeelding:

Stap 3: Het geheugen testen

Druk het buffergeheugen af ​​om de daarin opgeslagen chats te extraheren met behulp van de volgende code:

afdrukken ( agent_keten. geheugen . buffer )

De chats in de juiste volgorde, zonder enige wijziging, zijn weergegeven in het volgende fragment:

Methode 2: Hetzelfde geheugen gebruiken voor zowel agent als tools

De tweede methode die niet door het platform wordt aanbevolen, is het gebruik van het buffergeheugen voor zowel agenten als tools. De tools kunnen de chats wijzigen die in het geheugen zijn opgeslagen, wat bij grote gesprekken valse resultaten kan opleveren:

Stap 1: Bouw de keten

Gebruik de volledige code uit de sjabloon om de tools en ketens voor de agenten te bouwen met een kleine wijziging, aangezien ReadOnlyMemory deze keer niet is toegevoegd:

sjabloon = '' 'Dit is een gesprek tussen een mens en een bot:

{chatgeschiedenis}

Schrijf een samenvatting van het gesprek voor {input}:
'
''
#bouw de structuur van de chat koppel met behulp van de promptsjabloon door het geheugen met de ketting toe te voegen
snel = Promptsjabloon ( invoervariabelen = [ 'invoer' , 'chatgeschiedenis' ] , sjabloon = sjabloon )
geheugen = ConversatieBufferGeheugen ( geheugen_sleutel = 'chatgeschiedenis' )
samenvatting_keten = LLMChain (
llm = OpenAI ( ) ,
snel = snel ,
uitgebreid = WAAR ,
geheugen = geheugen ,
)
#bouw de gereedschappen ( zoeken en samenvatten ) voor het configureren van de agenten
zoekopdracht = SerpAPIWrapper ( )
hulpmiddelen = [
Hulpmiddel (
naam = 'Zoekopdracht' ,
func = zoekopdracht. loop ,
beschrijving = 'juiste antwoorden op de gerichte vragen over de recente gebeurtenissen' ,
) ,
Hulpmiddel (
naam = 'Samenvatting' ,
func = samenvatting_keten. loop ,
beschrijving = 'handig om de samenvatting van de chat te krijgen en de stringinvoer voor deze tool nodig te hebben die aangeeft wie deze samenvatting zal lezen' ,
) ,
]
#leg de stappen uit voor de agent om de tools te gebruiken om informatie te extraheren voor het gesprek
voorvoegsel = '' 'Voer een gesprek met een mens en beantwoord de vragen op de best mogelijke manier door toegang te krijgen tot de volgende tools:' ''
achtervoegsel = '' 'Beginnen!'
#structuur voor de agent om de tools te gaan gebruiken terwijl hij het geheugen gebruikt
{ chatgeschiedenis }
Vraag : { invoer }
{ agent_kladblok } '' '

prompt = ZeroShotAgent.create_prompt(
#configureer promptsjablonen om de context van de vraag te begrijpen
hulpmiddelen,
voorvoegsel=voorvoegsel,
achtervoegsel=achtervoegsel,
input_variables=['
invoer ', ' chatgeschiedenis ', ' agent_kladblok '],
)
#integrate alle componenten tijdens het bouwen van de agent-uitvoerder
llm_chain = LLMChain(llm=OpenAI(temperatuur=0), prompt=prompt)
agent = ZeroShotAgent(llm_chain=llm_chain, tools=tools, uitgebreid=True)
agent_chain = AgentExecutor.from_agent_and_tools(
agent=agent, tools=tools, uitgebreid=Waar, geheugen=geheugen
)

Stap 2: Testen van de ketting

Voer de volgende code uit:

agent_keten. loop ( invoer = 'Wat is LangChain' )

Het antwoord wordt succesvol weergegeven en in het geheugen opgeslagen:

Stel de vervolgvraag zonder veel van de context te geven:

agent_keten. loop ( invoer = 'Wie heeft het ontwikkeld?' )

De agent gebruikt het geheugen om de vraag te begrijpen door deze te transformeren en drukt vervolgens het antwoord af:

Haal de samenvatting van de chat op met behulp van het geheugen dat aan de agent is gekoppeld:

agent_keten. loop (
invoer = 'Bedankt! Vat het gesprek samen, voor mijn 5-jarige'
)

Uitvoer
De samenvatting is met succes geëxtraheerd en tot nu toe lijkt alles hetzelfde te zijn, maar de verandering komt in de volgende stap:

Stap 3: Het geheugen testen

De chatberichten uit het geheugen halen met behulp van de volgende code:

afdrukken ( agent_keten. geheugen . buffer )

De tool heeft de geschiedenis aangepast door een nieuwe vraag toe te voegen die oorspronkelijk niet was gesteld. Dit gebeurt als het model de vraag begrijpt met behulp van a zelf vragen vraag. De tool denkt ten onrechte dat de vraag door de gebruiker wordt gesteld en behandelt deze als een afzonderlijke vraag. Het voegt dus ook die extra vraag toe aan het geheugen, die vervolgens wordt gebruikt om de context van het gesprek te achterhalen:

Dat is het voor nu.

Conclusie

Om geheugen toe te voegen aan zowel een agent als zijn tools in LangChain, installeert u de modules om hun afhankelijkheden op te halen en importeert u er bibliotheken van. Bouw daarna het gespreksgeheugen, het taalmodel, de hulpmiddelen en de agent om het geheugen toe te voegen. De aanbevolen methode om het geheugen toe te voegen, gebruikt u ReadOnlyMemory voor de agent en de bijbehorende tools om de chatgeschiedenis op te slaan. De gebruiker kan ook gebruik maken van de conversatie geheugen voor zowel agenten als tools. Maar ze krijgen verward soms en verander de chats in het geheugen.