Hvordan legge til minne til både en agent og dens verktøy i LangChain?

Hvordan Legge Til Minne Til Bade En Agent Og Dens Verktoy I Langchain



LangChain gir alle nødvendige verktøy for å bygge agentene for å kontrollere prosessen med å trekke ut informasjonen for brukeren. Disse verktøyene er nødvendige for å bygge agenten ettersom de administrerer oppgavene ved hjelp av forskjellige verktøy. Agenter manipulerer også disse verktøyene for å jobbe gjennom trinnene og implementere alle aktivitetene. Den vet hvilket verktøy som kreves for jobben og når det skal tilordnes den spesifikke oppgaven.

Rask oversikt

Dette innlegget vil demonstrere følgende:

Hvordan legge til minne til både en agent og dens verktøy i LangChain?

Ved å legge til minne til agentene og verktøyene kan de jobbe bedre med muligheten til å bruke chat-historikken til modellen. Med minne kan agenten effektivt bestemme hvilket verktøy som skal distribueres og når. Det foretrekkes å bruke ' Kun Les minne ' for både agenter og verktøy, slik at de ikke kan endre det. For å lære prosessen med å legge til minne til både agenter og verktøy i LangChain, gå gjennom de oppførte trinnene:







Trinn 1: Installere Frameworks

Først av alt, installer langkjede-eksperimentell modul for å få dens avhengigheter for å bygge språkmodeller og verktøy for agenten. LangChain experimental er modulen som får avhengighetene for å bygge modeller som for det meste brukes til eksperimenter og tester:



pip installer langkjede - eksperimentell



Hent google-søk-resultater moduler med OpenAI-avhengighetene for å få de mest relevante svarene fra internett:





pip installer openai google - Søk - resultater

Trinn 2: Sette opp miljøer

For å bygge modellen som får svar fra internett, kreves det å sette opp miljøene ved hjelp av OpenAI og SerpAPi nøkler:



import du
import få pass

du. omtrent [ 'OPENAI_API_KEY' ] = få pass. få pass ( 'OpenAI API Key:' )
du. omtrent [ 'SERPAPI_API_KEY' ] = få pass. få pass ( 'Serpapi API-nøkkel:' )

Trinn 3: Importere biblioteker

Etter å ha satt opp miljøene, importerer du bibliotekene for å bygge verktøyene for agenten og det ekstra minnet som skal integreres med dem. Følgende kode bruker agenter, minne, llms, kjeder, ledetekster og verktøy for å få de nødvendige bibliotekene:

fra langchain. agenter import ZeroShotAgent , Verktøy , AgentExecutor
fra langchain. hukommelse import ConversationBufferMemory , ReadOnlySharedMemory
fra langchain. llms import OpenAI
#hent biblioteket til bygge kjeden ved hjelp av LangChain
fra langchain. kjeder import LLMChain
fra langchain. spør import PromptTemplate
#hent biblioteket til hente informasjon fra internett
fra langchain. verktøy import SerpAPIWrapper

Trinn 4: Legge til ReadOnlyMemory

Konfigurer malen for agenten for å komme i gang med å utføre oppgaver så snart brukeren gir innspill. Etter det legger du til 'ConversationBufferMemory()' for å lagre chat-loggen til modellen og initialisere 'Kun Les minne' for agentene og dets verktøy:

mal = '' 'Dette er en samtale mellom et menneske og en bot:

{chat_historie}
#sett strukturen for å trekke ut den presise og enkle oppsummeringen
Oppsummer chatten for {input}:
'
''

ledetekst = PromptTemplate ( input_variables = [ 'inngang' , 'chat_historie' ] , mal = mal )
hukommelse = ConversationBufferMemory ( minnenøkkel = 'chat_historie' )
kun Les minne = ReadOnlySharedMemory ( hukommelse = hukommelse )
#sammendragskjede for å integrere alle komponentene til få oppsummeringen av samtalen
summary_chain = LLMChain (
llm = OpenAI ( ) ,
ledetekst = ledetekst ,
ordrik = ekte ,
hukommelse = kun Les minne ,
)

Trinn 5: Sette opp verktøy

Sett nå opp verktøy som søk og sammendrag for å få svaret fra internett sammen med sammendraget av chatten:

Søk = SerpAPIWrapper ( )
verktøy = [
Verktøy (
Navn = 'Søk' ,
func = Søk. løpe ,
beskrivelse = 'riktige svar på de målrettede forespørslene om de siste hendelsene' ,
) ,
Verktøy (
Navn = 'Sammendrag' ,
func = summary_chain. løpe ,
beskrivelse = 'nyttig å oppsummere chatten og input til dette verktøyet bør være en streng som representerer hvem som skal lese dette sammendraget' ,
) ,
]

Trinn 6: Bygg agenten

Konfigurer agenten så snart verktøyene er klare til å utføre de nødvendige oppgavene og trekke ut svarene fra internett. « prefiks variabelen utføres før agentene tildeler noen oppgave til verktøyene og suffiks ' utføres etter at verktøyene har hentet ut svaret:

prefiks = '' 'Ha en samtale med et menneske, svar på følgende spørsmål så godt du kan ved å bruke følgende verktøy:' ''
suffiks = '' 'Begynne!'
#struktur til agenten for å begynne å bruke verktøyene mens du bruker minnet
{ chat_historie }
Spørsmål : { input }
{ agent_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configure ledetekstmaler for å forstå konteksten til spørsmålet
verktøy,
prefiks=prefiks,
suffiks = suffiks,
input_variables=['
input ', ' chat_historie ', ' agent_scratchpad '],
)

Metode 1: Bruke ReadOnlyMemory

Når agenten er satt til å utføre verktøyene, er modellen med ReadOnlyMemory foretrukket måte å bygge og utføre kjedene for å hente svar, og prosessen er som følger:

Trinn 1: Bygg kjeden

Det første trinnet i denne metoden er å bygge kjeden og utføreren for 'ZeroShotAgent()' med sine argumenter. De 'LLMCain()' brukes til å bygge forbindelsen mellom alle chattene i språkmodellen ved å bruke llm og ledetekst-argumentene. Agenten bruker llm_chain, tools og verbose som argument og bygger agent_chain for å kjøre både agenter og verktøyene med minnet:

llm_chain = LLMChain ( llm = OpenAI ( temperatur = 0 ) , ledetekst = ledetekst )
middel = ZeroShotAgent ( llm_chain = llm_chain , verktøy = verktøy , ordrik = ekte )
agent_chain = AgentExecutor. fra_agent_og_verktøy (
middel = middel , verktøy = verktøy , ordrik = ekte , hukommelse = hukommelse
)

Trinn 2: Testing av kjeden

Ring agent_chain ved å bruke run()-metoden for å stille spørsmålet fra internett:

agent_chain. løpe ( input = 'Hva er LangChain' )

Agenten har hentet ut svaret fra internett ved å bruke søkeverktøyene:

Brukeren kan stille det uklare oppfølgingsspørsmålet for å teste minnet som er knyttet til agenten:

agent_chain. løpe ( input = 'Hvem utviklet det?' )

Agenten har brukt den forrige chatten for å forstå konteksten til spørsmålene og hentet svarene som vist i følgende skjermbilde:

Agenten bruker verktøyet (summary_chain) for å trekke ut et sammendrag av alle svarene som er hentet ut tidligere ved å bruke agentens minne:

agent_chain. løpe (
input = 'Takk! Oppsummer samtalen, for min 5 åring'
)

Produksjon
Sammendraget av de tidligere stilte spørsmålene er vist for en 5-åring i følgende skjermbilde:

Trinn 3: Testing av minnet

Skriv ut bufferminnet for å trekke ut chattene som er lagret i det ved å bruke følgende kode:

skrive ut ( agent_chain. hukommelse . buffer )

Chattene i riktig rekkefølge uten endringer har blitt vist i følgende utdrag:

Metode 2: Bruke samme minne for både agent og verktøy

Den andre metoden som ikke anbefales av plattformen er å bruke bufferminnet for både agenter og verktøy. Verktøyene kan endre chattene som er lagret i minnet, som kan returnere falske utdata i store samtaler:

Trinn 1: Bygg kjeden

Bruk av den komplette koden fra malen for å bygge verktøyene og kjedene for agentene med en liten endring da ReadOnlyMemory ikke legges til denne gangen:

mal = '' 'Dette er en samtale mellom et menneske og en bot:

{chat_historie}

Skriv et sammendrag av samtalen for {input}:
'
''
#bygg strukturen til chatten grensesnitt bruke ledetekstmalen ved å legge til minnet med kjeden
ledetekst = PromptTemplate ( input_variables = [ 'inngang' , 'chat_historie' ] , mal = mal )
hukommelse = ConversationBufferMemory ( minnenøkkel = 'chat_historie' )
summary_chain = LLMChain (
llm = OpenAI ( ) ,
ledetekst = ledetekst ,
ordrik = ekte ,
hukommelse = hukommelse ,
)
#bygg verktøyene ( søk og oppsummering ) til konfigurere agentene
Søk = SerpAPIWrapper ( )
verktøy = [
Verktøy (
Navn = 'Søk' ,
func = Søk. løpe ,
beskrivelse = 'riktige svar på de målrettede forespørslene om de siste hendelsene' ,
) ,
Verktøy (
Navn = 'Sammendrag' ,
func = summary_chain. løpe ,
beskrivelse = 'nyttig å få sammendraget av chatten og trenger strenginndata til dette verktøyet som representerer hvem som skal lese dette sammendraget' ,
) ,
]
#forklar trinnene til agenten til å bruke verktøyene til å trekke ut informasjon til chatten
prefiks = '' 'Ha en samtale med et menneske, svar på spørsmålene på best mulig måte ved å få tilgang til følgende verktøy:' ''
suffiks = '' 'Begynne!'
#struktur til agenten for å begynne å bruke verktøyene mens du bruker minnet
{ chat_historie }
Spørsmål : { input }
{ agent_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configure ledetekstmaler for å forstå konteksten til spørsmålet
verktøy,
prefiks=prefiks,
suffiks = suffiks,
input_variables=['
input ', ' chat_historie ', ' agent_scratchpad '],
)
#integrer alle komponentene mens du bygger opp agentutføreren
llm_chain = LLMChain(llm=OpenAI(temperatur=0), prompt=ledetekst)
agent = ZeroShotAgent(llm_chain=llm_chain, tools=tools, verbose=True)
agent_chain = AgentExecutor.from_agent_and_tools(
agent=agent, verktøy=verktøy, verbose=True, minne=minne
)

Trinn 2: Testing av kjeden

Kjør følgende kode:

agent_chain. løpe ( input = 'Hva er LangChain' )

Svaret vises og lagres i minnet:

Still oppfølgingsspørsmålet uten å gi mye av konteksten:

agent_chain. løpe ( input = 'Hvem utviklet det?' )

Agenten bruker minnet til å forstå spørsmålet ved å transformere det og skriver deretter ut svaret:

Få sammendraget av chatten ved å bruke minnet knyttet til agenten:

agent_chain. løpe (
input = 'Takk! Oppsummer samtalen, for min 5 åring'
)

Produksjon
Sammendraget har blitt hentet ut, og til nå ser alt ut til å være det samme, men endringen kommer i neste trinn:

Trinn 3: Testing av minnet

Trekk ut chat-meldingene fra minnet ved å bruke følgende kode:

skrive ut ( agent_chain. hukommelse . buffer )

Verktøyet har endret historikken ved å legge til et annet spørsmål som ikke ble stilt opprinnelig. Dette skjer når modellen forstår spørsmålet ved å bruke en selv spørre spørsmål. Verktøyet tror feilaktig at det er spurt av brukeren og behandler det som en egen spørring. Så det legger til det tilleggsspørsmålet til minnet også som deretter brukes til å få konteksten til samtalen:

Det er alt for nå.

Konklusjon

For å legge til minne til både en agent og dens verktøy i LangChain, installer modulene for å få deres avhengigheter og importere biblioteker fra dem. Etter det bygger du samtaleminnet, språkmodellen, verktøyene og agenten for å legge til minnet. De anbefalt metode for å legge til minnet bruker du ReadOnlyMemory til agenten og dens verktøy for å lagre chatteloggen. Brukeren kan også bruke samtaleminne for både agenter og verktøy. Men, de får forvirret noen ganger og endre chattene i minnet.