Hvordan tilføjer man hukommelse til både en agent og dens værktøjer i LangChain?

Hvordan Tilfojer Man Hukommelse Til Bade En Agent Og Dens Vaerktojer I Langchain



LangChain leverer alle de nødvendige værktøjer til at bygge agenterne til at kontrollere processen med at udtrække informationen til brugeren. Disse værktøjer er nødvendige for at bygge agenten, da de håndterer opgaverne ved hjælp af forskellige værktøjer. Agenter manipulerer også disse værktøjer til at arbejde gennem trinene og implementere alle aktiviteterne. Den ved, hvilket værktøj der kræves til jobbet, og hvornår det skal tildeles den specifikke opgave.

Hurtig disposition

Dette indlæg vil demonstrere følgende:

Hvordan tilføjer man hukommelse til både en agent og dens værktøjer i LangChain?

Tilføjelse af hukommelse til agenterne og værktøjerne gør dem i stand til at arbejde bedre med muligheden for at bruge modellens chathistorik. Med hukommelse kan agenten effektivt beslutte, hvilket værktøj der skal implementeres og hvornår. Det foretrækkes at bruge ' Læs kun hukommelse ” for både agenter og værktøjer, så de ikke vil være i stand til at ændre det. For at lære processen med at tilføje hukommelse til både agenter og værktøjer i LangChain, skal du gennemgå de anførte trin:







Trin 1: Installation af Frameworks

Først og fremmest skal du installere langkæde-eksperimentel modul for at få dets afhængigheder til at bygge sprogmodeller og værktøjer til agenten. LangChain experimental er modulet, der får afhængighederne til at bygge modeller, der mest bruges til eksperimenter og tests:



pip installer langkæde - eksperimentel



Hent google-søgeresultater moduler med OpenAI-afhængighederne for at få de mest relevante svar fra internettet:





pip installer openai google - Søg - resultater

Trin 2: Opsætning af miljøer

For at bygge den model, der får svar fra internettet, er det nødvendigt at opsætte miljøerne ved hjælp af OpenAI og SerpAPi nøgler:



importere du
importere getpass

du. rundt regnet [ 'OPENAI_API_KEY' ] = getpass. getpass ( 'OpenAI API-nøgle:' )
du. rundt regnet [ 'SERPAPI_API_KEY' ] = getpass. getpass ( 'Serpapi API-nøgle:' )

Trin 3: Import af biblioteker

Efter opsætning af miljøerne skal du importere bibliotekerne for at bygge værktøjerne til agenten og den ekstra hukommelse til at integrere med dem. Følgende kode bruger agenter, hukommelse, llms, kæder, prompter og hjælpeprogrammer til at hente de nødvendige biblioteker:

fra langchain. agenter importere ZeroShotAgent , Værktøj , AgentExecutor
fra langchain. hukommelse importere ConversationBufferMemory , ReadOnlySharedMemory
fra langchain. llms importere OpenAI
#hent biblioteket til opbygning af kæden ved hjælp af LangChain
fra langchain. kæder importere LLMChain
fra langchain. prompter importere PromptTemplate
#hent biblioteket til at hente oplysningerne fra internettet
fra langchain. forsyningsselskaber importere SerpAPIWrapper

Trin 4: Tilføjelse af ReadOnlyMemory

Konfigurer skabelonen til agenten for at komme i gang med at udføre opgaver, så snart brugeren giver input. Derefter tilføjes 'ConversationBufferMemory()' for at gemme modellens chathistorik og initialisere 'Læs kun hukommelse' for agenterne og dets værktøjer:

skabelon = '' 'Dette er en samtale mellem et menneske og en bot:

{chat_historie}
#indstil strukturen for at udtrække den præcise og lette oversigt
Opsummer chatten for {input}:
'
''

hurtig = PromptTemplate ( input_variables = [ 'input' , 'chat_historie' ] , skabelon = skabelon )
hukommelse = ConversationBufferMemory ( memory_key = 'chat_historie' )
Læs kun hukommelse = ReadOnlySharedMemory ( hukommelse = hukommelse )
#sammendragskæde for at integrere alle komponenterne til få opsummeringen af ​​samtalen
summary_chain = LLMChain (
llm = OpenAI ( ) ,
hurtig = hurtig ,
ordrig = Rigtigt ,
hukommelse = Læs kun hukommelse ,
)

Trin 5: Opsætning af værktøjer

Opsæt nu værktøjer som søgning og oversigt for at få svaret fra internettet sammen med oversigten af ​​chatten:

Søg = SerpAPIWrapper ( )
værktøjer = [
Værktøj (
navn = 'Søg' ,
func = Søg. løb ,
beskrivelse = 'korrekte svar på de målrettede forespørgsler om de seneste begivenheder' ,
) ,
Værktøj (
navn = 'Resumé' ,
func = summary_chain. løb ,
beskrivelse = 'nyttigt at opsummere chatten, og input til dette værktøj bør være en streng, der repræsenterer, hvem der vil læse denne oversigt' ,
) ,
]

Trin 6: Opbygning af agenten

Konfigurer agenten, så snart værktøjerne er klar til at udføre de nødvendige opgaver og udtrække svarene fra internettet. Det ' præfiks variabel udføres, før agenterne tildeler en opgave til værktøjerne og suffiks ' udføres efter værktøjerne har udtrukket svaret:

præfiks = '' 'Få en samtale med et menneske, og besvar følgende spørgsmål bedst muligt ved at få adgang til følgende værktøjer:' ''
suffiks = '' 'Begynde!'
#struktur til agenten til at begynde at bruge værktøjerne, mens du bruger hukommelsen
{ chat_historie }
Spørgsmål : { input }
{ agent_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configure promptskabeloner for at forstå konteksten af ​​spørgsmålet
værktøjer,
præfiks=præfiks,
suffiks = suffiks,
input_variables=['
input ', ' chat_historie ', ' agent_scratchpad '],
)

Metode 1: Brug af ReadOnlyMemory

Når agenten er indstillet til at udføre værktøjerne, er modellen med ReadOnlyMemory foretrækkes måde at bygge og udføre kæderne for at hente svar, og processen er som følger:

Trin 1: Opbygning af kæden

Det første trin i denne metode er at bygge kæden og udføreren til 'ZeroShotAgent()' med sine argumenter. Det 'LLMCain()' bruges til at bygge forbindelsen mellem alle chats i sprogmodellen ved hjælp af llm og prompt-argumenterne. Agenten bruger llm_chain, tools og verbose som sit argument og bygger agent_chain til at udføre både agenter og dets værktøjer med hukommelsen:

llm_kæde = LLMChain ( llm = OpenAI ( temperatur = 0 ) , hurtig = hurtig )
agent = ZeroShotAgent ( llm_kæde = llm_kæde , værktøjer = værktøjer , ordrig = Rigtigt )
agent_chain = AgentExecutor. fra_agent_og_værktøjer (
agent = agent , værktøjer = værktøjer , ordrig = Rigtigt , hukommelse = hukommelse
)

Trin 2: Test af kæden

Ring til agent_chain ved at bruge run()-metoden til at stille spørgsmålet fra internettet:

agent_chain. løb ( input = 'Hvad er LangChain' )

Agenten har hentet svaret fra internettet ved hjælp af søgeværktøjerne:

Brugeren kan stille det uklare opfølgende spørgsmål for at teste den hukommelse, der er knyttet til agenten:

agent_chain. løb ( input = 'Hvem udviklede det?' )

Agenten har brugt den forrige chat til at forstå konteksten af ​​spørgsmålene og hentede svarene som vist på følgende skærmbillede:

Agenten bruger værktøjet (summary_chain) til at udtrække en oversigt over alle de svar, der tidligere er udtrukket ved hjælp af agentens hukommelse:

agent_chain. løb (
input = 'Tak! Opsummer samtalen, for min 5-årige'
)

Produktion
Resuméet af de tidligere stillede spørgsmål er blevet vist for en 5-årig i følgende skærmbillede:

Trin 3: Test af hukommelsen

Udskriv bufferhukommelsen for at udtrække de chats, der er gemt i den, ved at bruge følgende kode:

Print ( agent_chain. hukommelse . buffer )

Chatterne i den rigtige rækkefølge uden ændringer er blevet vist i følgende uddrag:

Metode 2: Brug af den samme hukommelse til både agent og værktøjer

Den anden metode, som ikke anbefales af platformen, er at bruge bufferhukommelsen til både agenter og værktøjer. Værktøjerne kan ændre de chats, der er gemt i hukommelsen, hvilket kan returnere falske output i store samtaler:

Trin 1: Opbygning af kæden

Brug af den komplette kode fra skabelonen til at bygge værktøjerne og kæderne til agenterne med en lille ændring, da ReadOnlyMemory ikke tilføjes denne gang:

skabelon = '' 'Dette er en samtale mellem et menneske og en bot:

{chat_historie}

Skriv et resumé af samtalen for {input}:
'
''
#byg strukturen i chatten interface ved at bruge promptskabelonen ved at tilføje hukommelsen med kæden
hurtig = PromptTemplate ( input_variables = [ 'input' , 'chat_historie' ] , skabelon = skabelon )
hukommelse = ConversationBufferMemory ( memory_key = 'chat_historie' )
summary_chain = LLMChain (
llm = OpenAI ( ) ,
hurtig = hurtig ,
ordrig = Rigtigt ,
hukommelse = hukommelse ,
)
#byg værktøjerne ( søgning og resumé ) til konfigurere agenterne
Søg = SerpAPIWrapper ( )
værktøjer = [
Værktøj (
navn = 'Søg' ,
func = Søg. løb ,
beskrivelse = 'korrekte svar på de målrettede forespørgsler om de seneste begivenheder' ,
) ,
Værktøj (
navn = 'Resumé' ,
func = summary_chain. løb ,
beskrivelse = 'nyttigt at få resuméet af chatten og har brug for strenginput til dette værktøj, der repræsenterer, hvem der vil læse dette resumé' ,
) ,
]
#forklar trinene til agenten til at bruge værktøjerne til at udtrække information til chatten
præfiks = '' 'Få en samtale med et menneske, svar på forespørgslerne på den bedst mulige måde ved at få adgang til følgende værktøjer:' ''
suffiks = '' 'Begynde!'
#struktur til agenten til at begynde at bruge værktøjerne, mens du bruger hukommelsen
{ chat_historie }
Spørgsmål : { input }
{ agent_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configure promptskabeloner for at forstå konteksten af ​​spørgsmålet
værktøjer,
præfiks=præfiks,
suffiks = suffiks,
input_variables=['
input ', ' chat_historie ', ' agent_scratchpad '],
)
#integrer alle komponenterne, mens du bygger agent eksekveren
llm_chain = LLMChain(llm=OpenAI(temperatur=0), prompt=prompt)
agent = ZeroShotAgent(llm_chain=llm_chain, tools=tools, verbose=True)
agent_chain = AgentExecutor.from_agent_and_tools(
agent=agent, værktøjer=værktøjer, verbose=Sandt, hukommelse=hukommelse
)

Trin 2: Test af kæden

Kør følgende kode:

agent_chain. løb ( input = 'Hvad er LangChain' )

Svaret vises og gemmes i hukommelsen:

Stil opfølgende spørgsmål uden at give meget af sammenhængen:

agent_chain. løb ( input = 'Hvem udviklede det?' )

Agenten bruger hukommelsen til at forstå spørgsmålet ved at transformere det og udskriver derefter svaret:

Få et resumé af chatten ved hjælp af den hukommelse, der er knyttet til agenten:

agent_chain. løb (
input = 'Tak! Opsummer samtalen, for min 5-årige'
)

Produktion
Resuméet er blevet udtrukket med succes, og indtil nu ser alt ud til at være det samme, men ændringen kommer i næste trin:

Trin 3: Test af hukommelsen

Udpakning af chatbeskeder fra hukommelsen ved hjælp af følgende kode:

Print ( agent_chain. hukommelse . buffer )

Værktøjet har ændret historikken ved at tilføje et andet spørgsmål, som ikke blev stillet oprindeligt. Dette sker, når modellen forstår spørgsmålet ved hjælp af en selvspørge spørgsmål. Værktøjet tror fejlagtigt, at det er spurgt af brugeren og behandler det som en separat forespørgsel. Så det tilføjer også det yderligere spørgsmål til hukommelsen, som derefter bruges til at få konteksten for samtalen:

Det er alt for nu.

Konklusion

For at tilføje hukommelse til både en agent og dens værktøjer i LangChain skal du installere modulerne for at få deres afhængigheder og importere biblioteker fra dem. Byg derefter samtalehukommelsen, sprogmodellen, værktøjerne og agenten for at tilføje hukommelsen. Det anbefalet metode at tilføje hukommelsen bruger ReadOnlyMemory til agenten og dens værktøjer til at gemme chathistorikken. Brugeren kan også bruge samtalehukommelse for både agenter og værktøjer. Men, de får forvirret nogle gange og ændre chats i hukommelsen.