Cum să adăugați memorie atât unui agent, cât și instrumentelor sale în LangChain?

Cum Sa Adaugati Memorie Atat Unui Agent Cat Si Instrumentelor Sale In Langchain



LangChain oferă toate instrumentele necesare pentru construirea agenților pentru a controla procesul de extragere a informațiilor pentru utilizator. Aceste instrumente sunt necesare pentru construirea agentului, deoarece gestionează sarcinile folosind diferite instrumente. De asemenea, agenții manipulează aceste instrumente pentru a parcurge pașii și pentru a implementa toate activitățile. Știe ce instrument este necesar pentru lucrare și când să-l atribuie acelei sarcini specifice.

Schiță rapidă

Această postare va demonstra următoarele:

Cum să adăugați memorie atât unui agent, cât și instrumentelor sale în LangChain?

Adăugarea de memorie agenților și instrumentelor le permite să lucreze mai bine cu capacitatea de a utiliza istoricul de chat al modelului. Cu memorie, agentul poate decide eficient ce instrument să implementeze și când. Este de preferat să folosiți „ ReadOnlyMemory ” atât pentru agenți, cât și pentru instrumente, astfel încât aceștia nu vor putea să-l modifice. Pentru a afla procesul de adăugare a memoriei atât la agenți, cât și la instrumente în LangChain, parcurgeți pașii enumerați:







Pasul 1: Instalarea cadrelor

În primul rând, instalați langchain-experimental modul pentru a obține dependențele sale pentru a construi modele de limbaj și instrumente pentru agent. LangChain experimental este modulul care primește dependențele pentru construirea de modele care sunt utilizate în principal pentru experimente și teste:



pip install langchain - experimental



Obține Google-search-results module cu dependențe OpenAI pentru a obține cele mai relevante răspunsuri de pe internet:





pip install openai google - căutare - rezultate

Pasul 2: Configurarea Mediilor

Pentru a construi modelul care primește răspunsuri de pe internet, este necesar să configurați mediile folosind OpenAI și SerpAPi chei:



import tu
import getpass

tu. aproximativ [ „OPENAI_API_KEY” ] = getpass. getpass ( „Cheie API OpenAI:” )
tu. aproximativ [ „SERPAPI_API_KEY” ] = getpass. getpass ( „Cheia API Serpapi:” )

Pasul 3: Importarea bibliotecilor

După configurarea mediilor, importați bibliotecile pentru a construi instrumentele pentru agent și memoria suplimentară pentru a se integra cu acestea. Următorul cod utilizează agenți, memoria, llms, lanțuri, prompturi și utilitare pentru a obține bibliotecile necesare:

din langchain. agenţi import ZeroShotAgent , Instrument , Agent Executor
din langchain. memorie import ConversationBufferMemory , ReadOnlySharedMemory
din langchain. llms import OpenAI
#obține biblioteca pentru construirea lanțului folosind LangChain
din langchain. lanţuri import LLMChain
din langchain. solicitări import PromptTemplate
#obține biblioteca pentru obținerea informațiilor de pe internet
din langchain. utilitati import SerpAPIWrapper

Pasul 4: Adăugarea ReadOnlyMemory

Configurați șablonul pentru agent pentru a începe să execute sarcini de îndată ce utilizatorul oferă intrarea. După aceea, adăugați „ConversationBufferMemory()” pentru a stoca istoricul de chat al modelului și a inițializa „ReadOnlyMemory” pentru agenți și instrumentele sale:

șablon = '' „Aceasta este o conversație între un om și un bot:

{chat_history}
#setează structura pentru extragerea rezumatului precis și ușor
Rezumați chatul pentru {input}:
'
''

prompt = PromptTemplate ( variabile_de intrare = [ 'intrare' , 'istorie_chat' ] , șablon = șablon )
memorie = ConversationBufferMemory ( cheie_memorie = 'istorie_chat' )
readonlymemory = ReadOnlySharedMemory ( memorie = memorie )
#lant rezumat pentru a integra toate componentele pentru obținerea rezumatului conversației
lanț_rezumat = LLMChain (
llm = OpenAI ( ) ,
prompt = prompt ,
verboroasă = Adevărat ,
memorie = readonlymemory ,
)

Pasul 5: Configurarea instrumentelor

Acum, configurați instrumente precum căutarea și rezumatul pentru a obține răspunsul de pe internet împreună cu rezumatul chat-ului:

căutare = SerpAPIWrapper ( )
unelte = [
Instrument (
Nume = 'Căutare' ,
func = căutare. alerga ,
Descriere = „răspunsuri adecvate la întrebările vizate despre evenimentele recente” ,
) ,
Instrument (
Nume = 'Rezumat' ,
func = lanț_rezumat. alerga ,
Descriere = „util pentru a rezuma chatul și intrarea în acest instrument ar trebui să fie un șir, reprezentând cine va citi acest rezumat” ,
) ,
]

Pasul 6: Construirea agentului

Configurați agentul de îndată ce instrumentele sunt pregătite pentru a efectua sarcinile necesare și extrage răspunsurile de pe internet. „ prefix ” este executată înainte ca agenții să atribuie orice sarcină instrumentelor și „ sufix ” se execută după ce instrumentele au extras răspunsul:

prefix = '' „Purți o conversație cu un om, răspunzând la următoarele întrebări cât mai bine posibil, accesând următoarele instrumente:” ''
sufix = '' 'ÎNCEPE!'
#structura pentru agentul să înceapă să folosească instrumentele în timp ce folosește memoria
{ istorie_chat }
Întrebare : { intrare }
{ agent_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configurează șabloane de prompt pentru a înțelege contextul întrebării
unelte,
prefix=prefix,
sufix = sufix,
input_variables='
intrare ', ' istorie_chat ', ' agent_scratchpad '],
)

Metoda 1: Utilizarea ReadOnlyMemory

Odată ce agentul este setat să execute instrumentele, modelul cu ReadOnlyMemory este preferat modalitate de a construi și executa lanțurile pentru a obține răspunsuri, iar procesul este următorul:

Pasul 1: Construirea lanțului

Primul pas în această metodă este construirea lanțului și a executorului pentru „ZeroShotAgent()” cu argumentele sale. The „LLMCain()” este folosit pentru a construi conexiunea între toate chat-urile din modelul de limbă folosind argumentele llm și prompt. Agentul folosește llm_chain, tools și verbose ca argument și construiește agent_chain pentru a executa atât agenții, cât și instrumentele sale cu memorie:

llm_chain = LLMChain ( llm = OpenAI ( temperatura = 0 ) , prompt = prompt )
agent = ZeroShotAgent ( llm_chain = llm_chain , unelte = unelte , verboroasă = Adevărat )
lanț_agent = Agent Executor. de la_agent_și_instrumente (
agent = agent , unelte = unelte , verboroasă = Adevărat , memorie = memorie
)

Pasul 2: testarea lanțului

Suna lanț_agent folosind metoda run() pentru a pune întrebarea de pe internet:

lanț_agent. alerga ( intrare = „Ce este LangChain” )

Agentul a extras răspunsul de pe internet folosind instrumentele de căutare:

Utilizatorul poate pune întrebarea neclară de continuare pentru a testa memoria atașată agentului:

lanț_agent. alerga ( intrare = — Cine l-a dezvoltat? )

Agentul a folosit chatul anterior pentru a înțelege contextul întrebărilor și a preluat răspunsurile, așa cum se afișează în următoarea captură de ecran:

Agentul folosește instrumentul (summary_chain) pentru a extrage un rezumat al tuturor răspunsurilor extrase anterior folosind memoria agentului:

lanț_agent. alerga (
intrare = 'Mulțumesc! Rezumă conversația, pentru copilul meu de 5 ani'
)

Ieșire
Rezumatul întrebărilor adresate anterior a fost afișat pentru un copil de 5 ani în următoarea captură de ecran:

Pasul 3: Testarea memoriei

Imprimați memoria tampon pentru a extrage chat-urile stocate în ea utilizând următorul cod:

imprimare ( lanț_agent. memorie . tampon )

Chaturile în ordinea corectă, fără nicio modificare, au fost afișate în următorul fragment:

Metoda 2: Folosind aceeași memorie atât pentru agent, cât și pentru instrumente

A doua metodă care nu este recomandată de platformă este utilizarea memoriei tampon atât pentru agenți, cât și pentru instrumente. Instrumentele pot schimba chat-urile stocate în memorie, ceea ce ar putea returna rezultate false în conversații mari:

Pasul 1: Construirea lanțului

Folosind codul complet din șablon pentru a construi instrumentele și lanțurile pentru agenți cu o mică modificare, deoarece ReadOnlyMemory nu este adăugată de data aceasta:

șablon = '' „Aceasta este o conversație între un om și un bot:

{chat_history}

Scrieți un rezumat al conversației pentru {input}:
'
''
#construiți structura chat-ului interfata folosind șablonul prompt prin adăugarea memoriei cu lanțul
prompt = PromptTemplate ( variabile_de intrare = [ 'intrare' , 'istorie_chat' ] , șablon = șablon )
memorie = ConversationBufferMemory ( cheie_memorie = 'istorie_chat' )
lanț_rezumat = LLMChain (
llm = OpenAI ( ) ,
prompt = prompt ,
verboroasă = Adevărat ,
memorie = memorie ,
)
#construiește instrumentele ( căutare și rezumat ) pentru configurarea agentilor
căutare = SerpAPIWrapper ( )
unelte = [
Instrument (
Nume = 'Căutare' ,
func = căutare. alerga ,
Descriere = „răspunsuri adecvate la întrebările vizate despre evenimentele recente” ,
) ,
Instrument (
Nume = 'Rezumat' ,
func = lanț_rezumat. alerga ,
Descriere = „util pentru a obține rezumatul chat-ului și aveți nevoie de introducerea șirului în acest instrument reprezentând cine va citi acest rezumat” ,
) ,
]
#explicați pașii pentru agentul să folosească instrumentele pentru a extrage informații pentru chatul
prefix = '' „Purți o conversație cu un om, răspunzând la întrebări în cel mai bun mod posibil, accesând următoarele instrumente:” ''
sufix = '' 'ÎNCEPE!'
#structura pentru agentul să înceapă să folosească instrumentele în timp ce folosește memoria
{ istorie_chat }
Întrebare : { intrare }
{ agent_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configurează șabloane de prompt pentru a înțelege contextul întrebării
unelte,
prefix=prefix,
sufix = sufix,
input_variables='
intrare ', ' istorie_chat ', ' agent_scratchpad '],
)
#integrați toate componentele în timp ce construiți agentul executor
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, instrumente=instrumente, verbose=Adevărat, memorie=memorie
)

Pasul 2: testarea lanțului

Rulați următorul cod:

lanţ_agent. alerga ( intrare = „Ce este LangChain” )

Răspunsul este afișat cu succes și stocat în memorie:

Puneți întrebarea ulterioară fără a oferi prea mult context:

lanţ_agent. alerga ( intrare = — Cine l-a dezvoltat? )

Agentul folosește memoria pentru a înțelege întrebarea transformând-o și apoi imprimă răspunsul:

Obțineți rezumatul chat-ului folosind memoria atașată agentului:

lanţ_agent. alerga (
intrare = 'Mulțumesc! Rezumă conversația, pentru copilul meu de 5 ani'
)

Ieșire
Rezumatul a fost extras cu succes și până acum totul pare să fie la fel, dar schimbarea vine în următorul pas:

Pasul 3: Testarea memoriei

Extragerea mesajelor de chat din memorie folosind următorul cod:

imprimare ( lanţ_agent. memorie . tampon )

Instrumentul a modificat istoricul adăugând o altă întrebare care nu a fost pusă inițial. Acest lucru se întâmplă pe măsură ce modelul înțelege întrebarea folosind a auto-intrebare întrebare. Instrumentul crede în mod eronat că este solicitat de utilizator și îl tratează ca pe o interogare separată. Deci, adaugă acea întrebare suplimentară în memorie, care apoi va fi folosită pentru a obține contextul conversației:

Asta este tot pentru acum.

Concluzie

Pentru a adăuga memorie atât unui agent, cât și instrumentelor sale în LangChain, instalați modulele pentru a obține dependențele lor și pentru a importa biblioteci din ele. După aceea, construiți memoria conversației, modelul de limbă, instrumentele și agentul pentru a adăuga memoria. The metoda recomandata pentru a adăuga memorie se folosește ReadOnlyMemory la agent și instrumentele sale pentru a stoca istoricul chat. De asemenea, utilizatorul poate folosi memorie conversațională atât pentru agenți cât și pentru instrumente. Dar, ei primesc confuz uneori și schimbă conversațiile din memorie.