Kako dodati memoriju i agentu i njegovim alatima u LangChainu?

Kako Dodati Memoriju I Agentu I Njegovim Alatima U Langchainu



LangChain pruža sve potrebne alate za izgradnju agenata za kontrolu procesa ekstrakcije informacija za korisnika. Ovi su alati potrebni za izgradnju agenta jer upravljaju zadacima pomoću različitih alata. Agenti također manipuliraju ovim alatima kako bi prošli kroz korake i implementirali sve aktivnosti. Zna koji je alat potreban za posao i kada ga treba dodijeliti tom specifičnom zadatku.

Brzi pregled

Ovaj će post pokazati sljedeće:

Kako dodati memoriju i agentu i njegovim alatima u LangChainu?

Dodavanje memorije agentima i alatima omogućuje im bolji rad uz mogućnost korištenja povijesti razgovora modela. S memorijom, agent može učinkovito odlučiti koji će alat primijeniti i kada. Poželjno je koristiti ' Memorija samo za čitanje ” za agente i alate tako da ga neće moći mijenjati. Da biste naučili postupak dodavanja memorije i agentima i alatima u LangChainu, prođite kroz navedene korake:







Korak 1: Instalacija Frameworks

Prije svega, instalirajte langchain-eksperimentalni modul za dobivanje njegovih ovisnosti za izgradnju jezičnih modela i alata za agenta. LangChain experimental je modul koji dobiva ovisnosti za izgradnju modela koji se uglavnom koriste za eksperimente i testove:



pip instalirati langchain - eksperimentalni



Dobiti google-rezultati-pretrage module s OpenAI ovisnostima kako biste dobili najrelevantnije odgovore s interneta:





pip instaliraj openai google - traži - rezultate

Korak 2: Postavljanje okruženja

Za izgradnju modela koji dobiva odgovore s interneta, potrebno je postaviti okruženja pomoću OpenAI i SerpAPi tipke:



uvoz vas
uvoz getpass

vas. približno [ 'OPENAI_API_KEY' ] = getpass. getpass ( 'OpenAI API ključ:' )
vas. približno [ 'SERPAPI_API_KEY' ] = getpass. getpass ( 'Serpapi API ključ:' )

Korak 3: Uvoz biblioteka

Nakon postavljanja okruženja, uvezite biblioteke za izgradnju alata za agenta i dodatnu memoriju za integraciju s njima. Sljedeći kod koristi agente, memoriju, llms, lance, upite i pomoćne programe za dobivanje potrebnih biblioteka:

iz Langchaina. agenti uvoz ZeroShotAgent , Alat , AgentIzvršitelj
iz Langchaina. memorija uvoz ConversationBufferMemory , ReadOnlySharedMemory
iz Langchaina. llms uvoz OpenAI
#dobi knjižnicu za izgradnja lanca pomoću LangChaina
iz Langchaina. lanci uvoz LLMClanac
iz Langchaina. upita uvoz PromptTemplate
#dobi knjižnicu za dobivanje informacija s interneta
iz Langchaina. komunalije uvoz SerpAPIWrapper

Korak 4: Dodavanje ReadOnlyMemory

Konfigurirajte predložak za agenta da započne s izvođenjem zadataka čim korisnik unese unos. Nakon toga dodajte “ConversationBufferMemory()” za pohranjivanje povijesti razgovora modela i inicijaliziranje “Memorija samo za čitanje” za agente i njihove alate:

predložak = '' 'Ovo je razgovor između čovjeka i bota:

{chat_history}
#postavite strukturu za izdvajanje preciznog i jednostavnog sažetka
Sažeti razgovor za {input}:
'
''

potaknuti = PromptTemplate ( ulazne_varijable = [ 'ulazni' , 'povijest_chata' ] , predložak = predložak )
memorija = ConversationBufferMemory ( memorijski_ključ = 'povijest_chata' )
memorija samo za čitanje = ReadOnlySharedMemory ( memorija = memorija )
#summary lanac za integraciju svih komponenti za dobivanje sažetka razgovora
lanac_sažetka = LLMClanac (
llm = OpenAI ( ) ,
potaknuti = potaknuti ,
opširno = Pravi ,
memorija = memorija samo za čitanje ,
)

Korak 5: Postavljanje alata

Sada postavite alate kao što su pretraživanje i sažetak kako biste dobili odgovor s interneta zajedno sa sažetkom razgovora:

traži = SerpAPIWrapper ( )
alata = [
Alat (
Ime = 'Traži' ,
funk = traži. trčanje ,
opis = 'ispravni odgovori na ciljane upite o nedavnim događajima' ,
) ,
Alat (
Ime = 'Sažetak' ,
funk = lanac_sažetka. trčanje ,
opis = 'korisno za sažimanje razgovora, a unos u ovaj alat trebao bi biti niz koji predstavlja tko će čitati ovaj sažetak' ,
) ,
]

Korak 6: Izgradnja agenta

Konfigurirajte agenta čim alati budu spremni za obavljanje potrebnih zadataka i izdvajanje odgovora s interneta. ' prefiks ” varijabla se izvršava prije nego što agenti dodijele bilo koji zadatak alatima i “ sufiks ” se izvršava nakon što su alati izvukli odgovor:

prefiks = '' 'Razgovarajte s čovjekom, odgovarajući na sljedeća pitanja najbolje što možete pristupom sljedećim alatima:' ''
sufiks = '' 'Početi!'
#struktura za agentu da počne koristiti alate dok koristi memoriju
{ chat_history }
Pitanje : { ulazni }
{ agent_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configure predloške upita za razumijevanje konteksta pitanja
alati,
prefiks=prefiks,
sufiks=sufiks,
ulazne_varijable=['
ulazni ', ' chat_history ', ' agent_scratchpad '],
)

Metoda 1: Korištenje ReadOnlyMemory

Nakon što je agent postavljen za izvršavanje alata, model s ReadOnlyMemory je model poželjan način za izgradnju i izvršavanje lanaca za dohvaćanje odgovora, a proces je sljedeći:

Korak 1: Izgradnja lanca

Prvi korak u ovoj metodi je izgradnja lanca i izvršitelja za “ZeroShotAgent()” sa svojim argumentima. The “LLMChain()” koristi se za izgradnju veze među svim razgovorima u jezičnom modelu pomoću argumenata llm i prompt. Agent koristi llm_chain, tools i verbose kao svoj argument i gradi agent_chain za izvršavanje oba agenta i njegovih alata s memorijom:

llm_lanac = LLMClanac ( llm = OpenAI ( temperatura = 0 ) , potaknuti = potaknuti )
agent = ZeroShotAgent ( llm_lanac = llm_lanac , alata = alata , opširno = Pravi )
lanac_agenta = AgentIzvršitelj. od_agenta_i_alata (
agent = agent , alata = alata , opširno = Pravi , memorija = memorija
)

Korak 2: Testiranje lanca

Nazovite lanac_agenta pomoću metode run() za postavljanje pitanja s interneta:

lanac_agenta. trčanje ( ulazni = 'Što je LangChain' )

Agent je izvukao odgovor s interneta pomoću alata za pretraživanje:

Korisnik može postaviti nejasno dodatno pitanje kako bi testirao memoriju pripojenu agentu:

lanac_agenta. trčanje ( ulazni = 'Tko ga je razvio?' )

Agent je upotrijebio prethodni chat kako bi razumio kontekst pitanja i dohvatio odgovore kao što je prikazano na sljedećoj snimci zaslona:

Agent koristi alat (summary_chain) za izdvajanje sažetka svih prethodno izdvojenih odgovora pomoću memorije agenta:

lanac_agenta. trčanje (
ulazni = 'Hvala! Sažeti razgovor, za mojih 5 godina'
)

Izlaz
Sažetak prethodno postavljenih pitanja prikazan je za 5-godišnjaka na sljedećoj snimci zaslona:

Korak 3: Testiranje memorije

Ispišite međuspremnik kako biste izdvojili razgovore pohranjene u njemu pomoću sljedećeg koda:

ispisati ( lanac_agenta. memorija . pufer )

Chatovi ispravnim redoslijedom bez ikakvih izmjena prikazani su u sljedećem isječku:

Metoda 2: Korištenje iste memorije i za agenta i za alate

Druga metoda koju platforma ne preporučuje je korištenje međuspremnika za agente i alate. Alati mogu promijeniti razgovore pohranjene u memoriji koji mogu vratiti lažne rezultate u velikim razgovorima:

Korak 1: Izgradnja lanca

Korištenje cjelovitog koda iz predloška za izradu alata i lanaca za agente s malom izmjenom jer ovaj put nije dodana ReadOnlyMemory:

šablona = '' 'Ovo je razgovor između čovjeka i bota:

{chat_history}

Napišite sažetak razgovora za {input}:
'
''
#izgradite strukturu chata sučelje koristeći predložak odzivnika dodavanjem memorije s lancem
potaknuti = PromptTemplate ( ulazne_varijable = [ 'ulazni' , 'povijest_chata' ] , šablona = šablona )
memorija = ConversationBufferMemory ( memorijski_ključ = 'povijest_chata' )
lanac_sažetka = LLMClanac (
llm = OpenAI ( ) ,
potaknuti = potaknuti ,
opširno = Pravi ,
memorija = memorija ,
)
#izradite alate ( pretraživanje i sažetak ) za konfiguriranje agenata
traži = SerpAPIWrapper ( )
alata = [
Alat (
Ime = 'Traži' ,
funk = traži. trčanje ,
opis = 'ispravni odgovori na ciljane upite o nedavnim događajima' ,
) ,
Alat (
Ime = 'Sažetak' ,
funk = lanac_sažetka. trčanje ,
opis = 'korisno za dobivanje sažetka chata i potreban je unos niza u ovaj alat koji predstavlja tko će čitati ovaj sažetak' ,
) ,
]
#objasni korake za agentu koristiti alate za izvlačenje informacija za razgovor
prefiks = '' 'Razgovarajte s čovjekom, odgovarajući na upite na najbolji mogući način pristupom sljedećim alatima:' ''
sufiks = '' 'Početi!'
#struktura za agentu da počne koristiti alate dok koristi memoriju
{ chat_history }
Pitanje : { ulazni }
{ agent_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configure predloške upita za razumijevanje konteksta pitanja
alati,
prefiks=prefiks,
sufiks=sufiks,
ulazne_varijable=['
ulazni ', ' chat_history ', ' agent_scratchpad '],
)
#integrirajte sve komponente dok gradite izvršitelja agenta
llm_chain = LLMChain(llm=OpenAI(temperature=0), prompt=prompt)
agent = ZeroShotAgent(llm_chain=llm_chain, tools=alati, verbose=True)
agent_lanac = AgentExecutor.from_agent_and_tools(
agent=agent, tools=alati, verbose=True, memory=memorija
)

Korak 2: Testiranje lanca

Pokrenite sljedeći kod:

lanac_agenta. trčanje ( ulazni = 'Što je LangChain' )

Odgovor je uspješno prikazan i pohranjen u memoriji:

Postavite sljedeće pitanje bez navođenja previše konteksta:

lanac_agenta. trčanje ( ulazni = 'Tko ga je razvio?' )

Agent koristi memoriju kako bi razumio pitanje transformirajući ga i zatim ispisuje odgovor:

Dobijte sažetak razgovora koristeći memoriju pripojenu agentu:

lanac_agenta. trčanje (
ulazni = 'Hvala! Sažeti razgovor, za mojih 5 godina'
)

Izlaz
Sažetak je uspješno izdvojen i do sada se čini da je sve isto, ali promjena dolazi u sljedećem koraku:

Korak 3: Testiranje memorije

Izdvajanje chat poruka iz memorije pomoću sljedećeg koda:

ispisati ( lanac_agenta. memorija . pufer )

Alat je izmijenio povijest dodajući još jedno pitanje koje izvorno nije postavljeno. To se događa kada model razumije pitanje koristeći a samozapitati se pitanje. Alat pogrešno misli da ga postavlja korisnik i tretira ga kao zaseban upit. Tako dodaje i to dodatno pitanje u memoriju koje se zatim koristi za dobivanje konteksta razgovora:

To je sve za sada.

Zaključak

Da biste dodali memoriju i agentu i njegovim alatima u LangChainu, instalirajte module da biste dobili njihove ovisnosti i uvezli biblioteke iz njih. Nakon toga izgradite memoriju razgovora, jezični model, alate i agenta za dodavanje memorije. The preporučena metoda za dodavanje memorije koristi se ReadOnlyMemory agentu i njegovim alatima za pohranjivanje povijesti razgovora. Korisnik također može koristiti razgovorno pamćenje i za agente i za alate. Ali, dobivaju zbunjeno ponekad i promijenite razgovore u memoriji.