Hitri oris
Ta objava bo pokazala naslednje:
- Kako dodati pomnilnik tako agentu kot njegovim orodjem v LangChainu
- 1. korak: Namestitev ogrodij
- 2. korak: Nastavitev okolij
- 3. korak: Uvoz knjižnic
- 4. korak: Dodajanje ReadOnlyMemory
- 5. korak: Nastavitev orodij
- 6. korak: Izdelava agenta
- 1. način: Uporaba ReadOnlyMemory
- 2. način: uporaba istega pomnilnika za agenta in orodja
- Zaključek
Kako dodati pomnilnik tako agentu kot njegovim orodjem v LangChainu?
Dodajanje pomnilnika agentom in orodjem jim omogoča boljše delo z možnostjo uporabe zgodovine klepetov modela. S pomnilnikom se agent lahko učinkovito odloči, katero orodje bo uvedel in kdaj. Zaželeno je, da uporabite ' Bralni pomnilnik ” za agente in orodja, tako da ga ne bodo mogli spreminjati. Če se želite naučiti postopka dodajanja pomnilnika agentom in orodjem v LangChain, pojdite skozi navedene korake:
1. korak: Namestitev ogrodij
Najprej namestite langchain-eksperimentalno modul za pridobitev njegovih odvisnosti za gradnjo jezikovnih modelov in orodij za agenta. LangChain experimental je modul, ki dobi odvisnosti za gradnjo modelov, ki se večinoma uporabljajo za eksperimente in teste:
pip namestite langchain - eksperimentalno
Dobite google-rezultati iskanja module z odvisnostmi OpenAI, da dobite najbolj ustrezne odgovore iz interneta:
pip namestite openai google - Iskanje - rezultate
2. korak: Nastavitev okolij
Za izgradnjo modela, ki dobi odgovore iz interneta, je treba nastaviti okolja z uporabo OpenAI in SerpAPi ključi:
uvoz ti
uvoz getpass
ti. približno [ 'OPENAI_API_KEY' ] = getpass. getpass ( 'Ključ API OpenAI:' )
ti. približno [ 'SERPAPI_API_KEY' ] = getpass. getpass ( 'Ključ API Serpapi:' )
3. korak: Uvoz knjižnic
Po nastavitvi okolij uvozite knjižnice, da zgradite orodja za posrednika in dodatni pomnilnik za integracijo z njimi. Naslednja koda uporablja agente, pomnilnik, llms, verige, pozive in pripomočke za pridobitev zahtevanih knjižnic:
iz langchaina. zastopniki uvoz ZeroShotAgent , Orodje , AgentExecutoriz langchaina. spomin uvoz ConversationBufferMemory , ReadOnlySharedMemory
iz langchaina. llms uvoz OpenAI
#dobi knjižnico za izdelava verige z uporabo LangChain
iz langchaina. verige uvoz LLMChain
iz langchaina. pozive uvoz PromptTemplate
#dobi knjižnico za pridobivanje informacij iz interneta
iz langchaina. pripomočki uvoz SerpAPIWrapper
4. korak: Dodajanje ReadOnlyMemory
Konfigurirajte predlogo za agenta, da začne izvajati naloge takoj, ko uporabnik poda vnos. Po tem dodajte »ConversationBufferMemory()« za shranjevanje zgodovine klepetov modela in inicializacijo 'Bralni pomnilnik' za agente in njihova orodja:
predlogo = '' 'To je pogovor med človekom in botom:{chat_history}
#nastavite strukturo za ekstrahiranje natančnega in enostavnega povzetka
Povzemite klepet za {input}:
' ''
poziv = PromptTemplate ( vhodne_spremenljivke = [ 'vnos' , 'chat_history' ] , predlogo = predlogo )
spomin = ConversationBufferMemory ( pomnilniški_ključ = 'chat_history' )
bralni pomnilnik = ReadOnlySharedMemory ( spomin = spomin )
#summary chain za integracijo vseh komponent za pridobivanje povzetka pogovora
summary_chain = LLMChain (
llm = OpenAI ( ) ,
poziv = poziv ,
verbose = Prav ,
spomin = bralni pomnilnik ,
)
5. korak: Nastavitev orodij
Zdaj nastavite orodja, kot sta iskanje in povzetek, da dobite odgovor iz interneta skupaj s povzetkom klepeta:
Iskanje = SerpAPIWrapper ( )orodja = [
Orodje (
ime = 'Iskanje' ,
funk = Iskanje. teči ,
opis = 'pravilni odgovori na ciljana vprašanja o zadnjih dogodkih' ,
) ,
Orodje (
ime = 'Povzetek' ,
funk = summary_chain. teči ,
opis = 'koristno za povzetek klepeta in vnos v to orodje mora biti niz, ki predstavlja, kdo bo prebral ta povzetek' ,
) ,
]
6. korak: Izdelava agenta
Konfigurirajte agenta takoj, ko so orodja pripravljena za izvajanje zahtevanih nalog in pridobivanje odgovorov iz interneta. ' predpono ” se izvede, preden agenti dodelijo katero koli nalogo orodjem in pripona ” se izvede, ko orodja izluščijo odgovor:
predpono = '' 'Pogovarjajte se s človekom in čim bolje odgovorite na naslednja vprašanja z dostopom do naslednjih orodij:' ''pripona = '' 'Začeti!'
#struktura za agent, da začne uporabljati orodja med uporabo pomnilnika
{ chat_history }
vprašanje : { vnos }
{ agent_scratchpad } '' '
poziv = ZeroShotAgent.create_prompt(
#configure predloge pozivov za razumevanje konteksta vprašanja
orodja,
prefix=predpona,
suffix=pripona,
vhodne_spremenljivke=[' vnos ', ' chat_history ', ' agent_scratchpad '],
)
1. način: Uporaba ReadOnlyMemory
Ko je agent nastavljen za izvajanje orodij, je model z ReadOnlyMemory modelom prednostno način gradnje in izvajanja verig za pridobivanje odgovorov, postopek pa je naslednji:
1. korak: Izgradnja verige
Prvi korak pri tej metodi je izgradnja verige in izvajalca za »ZeroShotAgent()« s svojimi argumenti. The 'LLMChain()' se uporablja za vzpostavitev povezave med vsemi klepeti v jezikovnem modelu z uporabo argumentov llm in prompt. Agent uporablja llm_chain, tools in verbose kot svoj argument ter zgradi agent_chain za izvajanje obeh agentov in njegovih orodij s pomnilnikom:
llm_veriga = LLMChain ( llm = OpenAI ( temperaturo = 0 ) , poziv = poziv )agent = ZeroShotAgent ( llm_veriga = llm_veriga , orodja = orodja , verbose = Prav )
agent_chain = AgentExecutor. od_agenta_in_orodij (
agent = agent , orodja = orodja , verbose = Prav , spomin = spomin
)
2. korak: Testiranje verige
Pokličite agent_chain z uporabo metode run() za postavljanje vprašanja iz interneta:
agent_chain. teči ( vnos = 'Kaj je LangChain' )Agent je odgovor pridobil iz interneta z iskalnimi orodji:
Uporabnik lahko zastavi nejasno nadaljnje vprašanje, da preizkusi pomnilnik, povezan z agentom:
agent_chain. teči ( vnos = 'Kdo ga je razvil?' )Agent je uporabil prejšnji klepet, da bi razumel kontekst vprašanj in pridobil odgovore, kot so prikazani na naslednjem posnetku zaslona:
Agent uporablja orodje (summary_chain), da izvleče povzetek vseh odgovorov, ki so bili prej ekstrahirani z uporabo agentovega pomnilnika:
agent_chain. teči (vnos = 'Hvala! Povzemite pogovor, za mojih 5 let'
)
Izhod
Povzetek prej zastavljenih vprašanj je bil prikazan za 5-letnika na naslednjem posnetku zaslona:
3. korak: Testiranje pomnilnika
Natisnite vmesni pomnilnik, da izvlečete klepete, shranjene v njem, z uporabo naslednje kode:
tiskanje ( agent_chain. spomin . medpomnilnik )Klepeti v pravilnem vrstnem redu brez kakršnih koli sprememb so bili prikazani v naslednjem delčku:
2. način: uporaba istega pomnilnika za agenta in orodja
Druga metoda, ki je platforma ne priporoča, je uporaba vmesnega pomnilnika za agente in orodja. Orodja lahko spremenijo klepete, shranjene v pomnilniku, ki lahko vrnejo napačne rezultate v velikih pogovorih:
1. korak: Izgradnja verige
Uporaba celotne kode iz predloge za izdelavo orodij in verig za posrednike z majhno spremembo, saj ReadOnlyMemory tokrat ni dodan:
predlogo = '' 'To je pogovor med človekom in botom:{chat_history}
Napišite povzetek pogovora za {input}:
' ''
#zgradite strukturo klepeta vmesnik z uporabo predloge poziva z dodajanjem pomnilnika z verigo
poziv = PromptTemplate ( vhodne_spremenljivke = [ 'vnos' , 'chat_history' ] , predlogo = predlogo )
spomin = ConversationBufferMemory ( pomnilniški_ključ = 'chat_history' )
summary_chain = LLMChain (
llm = OpenAI ( ) ,
poziv = poziv ,
verbose = Prav ,
spomin = spomin ,
)
#zgradite orodja ( iskanje in povzetek ) za konfiguracijo agentov
Iskanje = SerpAPIWrapper ( )
orodja = [
Orodje (
ime = 'Iskanje' ,
funk = Iskanje. teči ,
opis = 'pravilni odgovori na ciljana vprašanja o zadnjih dogodkih' ,
) ,
Orodje (
ime = 'Povzetek' ,
funk = summary_chain. teči ,
opis = 'koristno za pridobitev povzetka klepeta in potrebujete vnos niza v to orodje, ki predstavlja, kdo bo prebral ta povzetek' ,
) ,
]
#razloži korake za agent za uporabo orodij za pridobivanje informacij za klepet
predpono = '' 'Pogovarjajte se s človekom in odgovorite na vprašanja na najboljši možni način z dostopom do naslednjih orodij:' ''
pripona = '' 'Začeti!'
#struktura za agent, da začne uporabljati orodja med uporabo pomnilnika
{ chat_history }
vprašanje : { vnos }
{ agent_scratchpad } '' '
poziv = ZeroShotAgent.create_prompt(
#configure predloge pozivov za razumevanje konteksta vprašanja
orodja,
prefix=predpona,
suffix=pripona,
vhodne_spremenljivke=[' vnos ', ' chat_history ', ' agent_scratchpad '],
)
#integrirajte vse komponente med gradnjo izvajalca agenta
llm_chain = LLMChain(llm=OpenAI(temperatura=0), prompt=prompt)
agent = ZeroShotAgent(llm_chain=llm_chain, tools=tools, verbose=True)
agent_chain = AgentExecutor.from_agent_and_tools(
agent=agent, tools=orodja, verbose=True, memory=pomnilnik
)
2. korak: Testiranje verige
Zaženite naslednjo kodo:
agent_chain. teči ( vnos = 'Kaj je LangChain' )Odgovor je uspešno prikazan in shranjen v pomnilniku:
Zastavite nadaljnje vprašanje, ne da bi navedli veliko konteksta:
agent_chain. teči ( vnos = 'Kdo ga je razvil?' )Agent uporablja pomnilnik za razumevanje vprašanja tako, da ga transformira in nato natisne odgovor:
Pridobite povzetek klepeta z uporabo pomnilnika, ki je povezan z agentom:
agent_chain. teči (vnos = 'Hvala! Povzemite pogovor, za mojih 5 let'
)
Izhod
Povzetek je bil uspešno ekstrahiran in do zdaj se zdi, da je vse enako, vendar pride do spremembe v naslednjem koraku:
3. korak: Testiranje pomnilnika
Ekstrahiranje sporočil klepeta iz pomnilnika z naslednjo kodo:
tiskanje ( agent_chain. spomin . medpomnilnik )Orodje je spremenilo zgodovino z dodajanjem drugega vprašanja, ki prvotno ni bilo postavljeno. To se zgodi, ko model razume vprašanje z uporabo a samosprašuj vprašanje. Orodje zmotno misli, da ga vpraša uporabnik, in ga obravnava kot ločeno poizvedbo. Tako v spomin doda tudi tisto dodatno vprašanje, ki se nato uporabi za pridobitev konteksta pogovora:
To je vse za zdaj.
Zaključek
Če želite dodati pomnilnik agentu in njegovim orodjem v LangChain, namestite module, da pridobite njihove odvisnosti in iz njih uvozite knjižnice. Po tem zgradite pogovorni pomnilnik, jezikovni model, orodja in agenta za dodajanje pomnilnika. The priporočena metoda za dodajanje pomnilnika uporablja ReadOnlyMemory za agenta in njegova orodja za shranjevanje zgodovine klepeta. Uporabnik lahko uporablja tudi pogovorni spomin za agente in orodja. Ampak, dobijo zmeden včasih in spremenite klepete v pomnilniku.