Brzi pregled
Ovaj će post pokazati sljedeće:
- Kako dodati memoriju i agentu i njegovim alatima u LangChainu
- Korak 1: Instalacija Frameworks
- Korak 2: Postavljanje okruženja
- Korak 3: Uvoz biblioteka
- Korak 4: Dodavanje ReadOnlyMemory
- Korak 5: Postavljanje alata
- Korak 6: Izgradnja agenta
- Metoda 1: Korištenje ReadOnlyMemory
- Metoda 2: Korištenje iste memorije i za agenta i za alate
- Zaključak
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šiteljiz 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.