Kako dodati pomnilnik tako agentu kot njegovim orodjem v LangChainu?

Kako Dodati Pomnilnik Tako Agentu Kot Njegovim Orodjem V Langchainu



LangChain ponuja vsa potrebna orodja za izdelavo agentov za nadzor postopka pridobivanja informacij za uporabnika. Ta orodja so potrebna za gradnjo agenta, saj upravljajo naloge z različnimi orodji. Agenti prav tako manipulirajo s temi orodji, da opravijo korake in izvajajo vse dejavnosti. Ve, katero orodje je potrebno za delo in kdaj ga dodeliti določeni nalogi.

Hitri oris

Ta objava bo pokazala naslednje:

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 , AgentExecutor
iz 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.