Hogyan lehet memóriát hozzáadni egy ügynökhöz és eszközeihez a LangChainben?

Hogyan Lehet Memoriat Hozzaadni Egy Ugynokhoz Es Eszkozeihez A Langchainben



A LangChain minden szükséges eszközt biztosít az ügynökök felépítéséhez, hogy ellenőrizzék az információ kinyerésének folyamatát a felhasználó számára. Ezek az eszközök szükségesek az ügynök felépítéséhez, mivel különböző eszközökkel kezelik a feladatokat. Az ügynökök ezeket az eszközöket is manipulálják a lépések végrehajtásához és az összes tevékenység végrehajtásához. Tudja, hogy melyik eszközre van szükség a munkához, és mikor kell hozzárendelni az adott feladathoz.

Gyors vázlat

Ez a bejegyzés a következőket mutatja be:

Hogyan lehet memóriát hozzáadni egy ügynökhöz és eszközeihez a LangChainben?

A memória hozzáadásával az ügynökökhöz és az eszközökhöz jobb munkavégzést tesz lehetővé a modell csevegési előzményeinek használatával. A memória segítségével az ügynök hatékonyan eldöntheti, hogy melyik eszközt és mikor telepítse. Előnyös a „ Csak olvasható memória ” mind az ügynökök, mind az eszközök számára, így nem tudják majd módosítani. A LangChain ügynökökhöz és eszközökhöz való memória hozzáadásának folyamatának megismeréséhez kövesse a felsorolt ​​lépéseket:







1. lépés: Keretrendszerek telepítése

Először telepítse a langchain-kísérleti modult, hogy megkapja a függőségeit az ügynök nyelvi modelljei és eszközei létrehozásához. A LangChain experimental az a modul, amely megkapja a függőségeket a leginkább kísérletekhez és tesztekhez használt modellek felépítéséhez:



pip install langchain - kísérleti



Szerezd meg a google-search-results OpenAI-függőségekkel rendelkező modulok, amelyek a legrelevánsabb válaszokat kapják az internetről:





pip install openai google - keresés - eredmények

2. lépés: Környezetek beállítása

Az internetről választ kapó modell felépítéséhez be kell állítani a környezeteket a segítségével OpenAI és SerpAPi kulcsok:



import te
import getpass

te. hozzávetőlegesen, körülbelül [ 'OPENAI_API_KEY' ] = getpass. getpass ( 'OpenAI API kulcs:' )
te. hozzávetőlegesen, körülbelül [ 'SERPAPI_API_KEY' ] = getpass. getpass ( 'Serpapi API kulcs:' )

3. lépés: Könyvtárak importálása

A környezetek beállítása után importálja a könyvtárakat az ügynök eszközeinek és a velük való integrációhoz szükséges kiegészítő memória létrehozásához. A következő kód az ügynököket, a memóriát, az llms-eket, a láncokat, a promptokat és a segédprogramokat használja a szükséges könyvtárak beszerzéséhez:

a langchainből. ügynökök import ZeroShotAgent , Eszköz , AgentExecutor
a langchainből. memória import ConversationBufferMemory , ReadOnlySharedMemory
a langchainből. llms import OpenAI
#szerezd be a könyvtárat számára a lánc felépítése a LangChain segítségével
a langchainből. láncok import LLMCchain
a langchainből. felszólítja import PromptTemplate
#szerezd be a könyvtárat számára információszerzés az internetről
a langchainből. segédprogramok import SerpAPIWrapper

4. lépés: ReadOnlyMemory hozzáadása

Állítsa be a sablont az ügynök számára, hogy megkezdhesse a feladatok végrehajtását, amint a felhasználó megadja a bevitelt. Ezt követően adjuk hozzá a 'ConversationBufferMemory()' a modell csevegési előzményeinek tárolására és a 'Csak olvasható memória' az ügynökökhöz és eszközeihez:

sablon = '' 'Ez egy beszélgetés egy ember és egy bot között:

{chat_history}
#állítsa be a szerkezetet a pontos és egyszerű összefoglaló kinyeréséhez
Foglalja össze a csevegést {input} számára:
'
''

gyors = PromptTemplate ( bemeneti_változók = [ 'bemenet' , 'chat_history' ] , sablon = sablon )
memória = ConversationBufferMemory ( memória_kulcs = 'chat_history' )
csak olvasható memória = ReadOnlySharedMemory ( memória = memória )
#összefoglaló lánc az összes összetevő integrálásához számára megkapja a beszélgetés összefoglalóját
összefoglaló_lánc = LLMCchain (
llm = OpenAI ( ) ,
gyors = gyors ,
bőbeszédű = Igaz ,
memória = csak olvasható memória ,
)

5. lépés: Az eszközök beállítása

Most állítson be olyan eszközöket, mint a keresés és az összefoglaló, hogy megkapja a választ az internetről a csevegés összefoglalójával együtt:

keresés = SerpAPIWrapper ( )
eszközöket = [
Eszköz (
név = 'Keresés' ,
func = keresés. fuss ,
leírás = 'megfelelő válaszok a közelmúlt eseményeivel kapcsolatos célzott lekérdezésekre' ,
) ,
Eszköz (
név = 'összefoglaló' ,
func = összefoglaló_lánc. fuss ,
leírás = 'hasznos összefoglalni a csevegést, és az eszközbe bevitt karakterláncnak kell lennie, amely azt jelzi, hogy ki fogja elolvasni ezt az összefoglalót' ,
) ,
]

6. lépés: Az ügynök felépítése

Konfigurálja az ügynököt, amint az eszközök készen állnak a szükséges feladatok elvégzésére, és kivonják a válaszokat az internetről. A ' előtag ' változó lefut, mielőtt az ügynökök bármilyen feladatot rendelnének az eszközökhöz, és a ' utótag ” lefut, miután az eszközök kivonták a választ:

előtag = '' 'Beszélgessen egy emberrel, és a lehető legjobban válaszolja meg a következő kérdéseket a következő eszközök használatával: ''
utótag = '' 'Kezdődik!'
#szerkezet számára az ügynök, hogy a memória használata közben elkezdje használni az eszközöket
{ chat_history }
Kérdés : { bemenet }
{ agent_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configure prompt sablonok a kérdés kontextusának megértéséhez
szerszámok,
előtag=előtag,
utótag=utótag,
input_variables=['
bemenet ', ' chat_history ', ' agent_scratchpad '],
)

1. módszer: ReadOnlyMemory használata

Miután az ügynök be van állítva az eszközök végrehajtására, a ReadOnlyMemory modell a előnyben részesített a válaszok lekéréséhez szükséges láncok felépítésének és végrehajtásának módja, a folyamat pedig a következő:

1. lépés: A lánc felépítése

Ennek a módszernek az első lépése a lánc és a végrehajtó felépítése a 'ZeroShotAgent()' érveivel. A 'LLMChain()' A nyelvi modell összes csevegése közötti kapcsolat kiépítésére szolgál az llm és prompt argumentumok használatával. Az ügynök az llm_chain, tools és verbose paramétert használja argumentumként, és az agent_chain függvényt építi fel, hogy mind az ügynököket, mind az eszközöket a memóriával végrehajtsa:

llm_chain = LLMCchain ( llm = OpenAI ( hőfok = 0 ) , gyors = gyors )
ügynök = ZeroShotAgent ( llm_chain = llm_chain , eszközöket = eszközöket , bőbeszédű = Igaz )
ügynöklánc = AgentExecutor. from_agent_and_tools (
ügynök = ügynök , eszközöket = eszközöket , bőbeszédű = Igaz , memória = memória
)

2. lépés: A lánc tesztelése

Hívja a ügynöklánc a run() metódus használatával felteheti a kérdést az internetről:

ügynöklánc. fuss ( bemenet = 'Mi az a LangChain' )

Az ügynök a keresőeszközök segítségével kinyerte a választ az internetről:

A felhasználó felteheti a nem egyértelmű utókérdést, hogy tesztelje az ügynökhöz csatolt memóriát:

ügynöklánc. fuss ( bemenet = – Ki fejlesztette ki? )

Az ügynök az előző csevegést használta a kérdések kontextusának megértésére, és lekérte a válaszokat a következő képernyőképen látható módon:

Az ügynök az eszközt (summary_chain) használja, hogy kivonja az összes korábban az ügynök memóriájából kivont válasz összegzését:

ügynöklánc. fuss (
bemenet = 'Köszönöm! Foglalja össze a beszélgetést, az 5 évesemnek'
)

Kimenet
A korábban feltett kérdések összefoglalója egy 5 éves gyerek számára az alábbi képernyőképen látható:

3. lépés: A memória tesztelése

Nyomtassa ki a puffermemóriát a benne tárolt csevegések kibontásához a következő kóddal:

nyomtatás ( ügynöklánc. memória . puffer )

A csevegéseket a megfelelő sorrendben, változtatás nélkül jelenítettük meg a következő részletben:

2. módszer: Ugyanazon memória használata az ügynökhöz és az eszközökhöz

A második módszer, amelyet a platform nem javasol, a puffermemória használata az ügynökök és az eszközök számára. Az eszközök megváltoztathatják a memóriában tárolt csevegéseket, amelyek hamis kimeneteket adhatnak vissza nagy beszélgetésekben:

1. lépés: A lánc felépítése

A sablon teljes kódjának felhasználása az ügynökök eszközeinek és láncainak felépítéséhez egy kis változtatással, mivel a ReadOnlyMemory ezúttal nem kerül hozzáadásra:

sablon = '' 'Ez egy beszélgetés egy ember és egy bot között:

{chat_history}

Írjon összefoglalót a beszélgetésről {input} számára:
'
''
#építsd fel a chat szerkezetét felület a prompt sablon használatával a memória hozzáadásával a lánccal
gyors = PromptTemplate ( bemeneti_változók = [ 'bemenet' , 'chat_history' ] , sablon = sablon )
memória = ConversationBufferMemory ( memória_kulcs = 'chat_history' )
összefoglaló_lánc = LLMCchain (
llm = OpenAI ( ) ,
gyors = gyors ,
bőbeszédű = Igaz ,
memória = memória ,
)
#építsd meg az eszközöket ( keresés és összefoglaló ) számára az ügynökök konfigurálása
keresés = SerpAPIWrapper ( )
eszközöket = [
Eszköz (
név = 'Keresés' ,
func = keresés. fuss ,
leírás = 'megfelelő válaszok a közelmúlt eseményeivel kapcsolatos célzott lekérdezésekre' ,
) ,
Eszköz (
név = 'összefoglaló' ,
func = összefoglaló_lánc. fuss ,
leírás = 'hasznos a csevegés összefoglalójának lekéréséhez, és szükség van egy karakterlánc bevitelére az eszközben, amely azt jelzi, hogy ki fogja elolvasni ezt az összefoglalót' ,
) ,
]
#magyarázza el a lépéseket számára az ügynök, hogy használja az eszközöket az információ kinyerésére számára a chat
előtag = '' 'Beszélgessen egy emberrel, és válaszoljon a kérdésekre a lehető legjobb módon a következő eszközök használatával:' ''
utótag = '' 'Kezdődik!'
#szerkezet számára az ügynök, hogy a memória használata közben elkezdje használni az eszközöket
{ chat_history }
Kérdés : { bemenet }
{ agent_scratchpad } '' '

prompt = ZeroShotAgent.create_prompt(
#configure prompt sablonok a kérdés kontextusának megértéséhez
szerszámok,
előtag=előtag,
utótag=utótag,
input_variables=['
bemenet ', ' chat_history ', ' agent_scratchpad '],
)
#integrálja az összes komponenst az ügynök végrehajtó felépítése közben
llm_chain = LLMChain(llm=OpenAI(hőmérséklet=0), prompt=prompt)
agent = ZeroShotAgent(llm_chain=llm_chain, tools=tools, verbose=True)
agent_chain = AgentExecutor.from_agent_and_tools(
agent=agent, tools=tools, verbose=True, memory=memória
)

2. lépés: A lánc tesztelése

Futtassa a következő kódot:

ügynöklánc. fuss ( bemenet = 'Mi az a LangChain' )

A válasz sikeresen megjelenik és a memóriában tárolódik:

Tegye fel a következő kérdést anélkül, hogy a kontextus nagy részét megadná:

ügynöklánc. fuss ( bemenet = – Ki fejlesztette ki? )

Az ügynök a memóriát használja a kérdés megértéséhez úgy, hogy átalakítja azt, majd kiírja a választ:

Szerezze meg a csevegés összefoglalóját az ügynökhöz csatolt memória használatával:

ügynöklánc. fuss (
bemenet = 'Köszönöm! Foglalja össze a beszélgetést, az 5 évesemnek'
)

Kimenet
Az összefoglaló kinyerése sikeresen megtörtént, és eddig úgy tűnik, hogy minden a régi, de a változás a következő lépésben történik:

3. lépés: A memória tesztelése

A chat üzenetek kibontása a memóriából a következő kóddal:

nyomtatás ( ügynöklánc. memória . puffer )

Az eszköz módosította az előzményeket egy másik kérdés hozzáadásával, amelyet eredetileg nem tettek fel. Ez akkor történik, amikor a modell megérti a kérdést a segítségével önkérdés kérdés. Az eszköz tévesen azt hiszi, hogy a felhasználó kérte, és külön lekérdezésként kezeli. Így hozzáadja ezt a további kérdést is az emlékezethez, amelyet azután felhasználhatunk a beszélgetés kontextusának megállapítására:

Ez minden most.

Következtetés

Ha memóriát szeretne hozzáadni egy ügynökhöz és eszközeihez a LangChainben, telepítse a modulokat a függőségek lekéréséhez és a könyvtárak importálásához. Ezután hozza létre a beszélgetési memóriát, a nyelvi modellt, az eszközöket és az ügynököt a memória hozzáadásához. A ajánlott módszer A memória hozzáadásához a ReadOnlyMemory-t használja az ügynökhöz és annak eszközeit a csevegési előzmények tárolására. A felhasználó használhatja a társalgási memória ügynököknek és szerszámoknak egyaránt. De kapnak zavaros időnként, és módosítsa a csevegéseket a memóriában.