Schiță rapidă
Această postare va demonstra următoarele:
- Cum să adăugați memorie atât la un agent, cât și la instrumentele sale în LangChain
- Pasul 1: Instalarea cadrelor
- Pasul 2: Configurarea Mediilor
- Pasul 3: Importarea bibliotecilor
- Pasul 4: Adăugarea ReadOnlyMemory
- Pasul 5: Configurarea instrumentelor
- Pasul 6: Construirea agentului
- Metoda 1: Utilizarea ReadOnlyMemory
- Metoda 2: Folosind aceeași memorie atât pentru agent, cât și pentru instrumente
- Concluzie
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 Executordin 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.