Gyors vázlat
Ez a bejegyzés a következőket mutatja be:
- Memória hozzáadása egy ügynökhöz és eszközeihez a LangChainben
- 1. lépés: Keretrendszerek telepítése
- 2. lépés: Környezetek beállítása
- 3. lépés: Könyvtárak importálása
- 4. lépés: ReadOnlyMemory hozzáadása
- 5. lépés: Az eszközök beállítása
- 6. lépés: Az ügynök felépítése
- 1. módszer: ReadOnlyMemory használata
- 2. módszer: Ugyanazon memória használata az ügynökhöz és az eszközökhöz
- Következtetés
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 , AgentExecutora 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.