Hogyan lehet kombinálni az ügynököket és a vektoros üzleteket a LangChainben?

Hogyan Lehet Kombinalni Az Ugynokoket Es A Vektoros Uzleteket A Langchainben



A LangChain a nyelvi modelleket tervező keretrendszer. Hatalmas mennyiségű adat képezi ezeket a modelleket természetes nyelven. Számos adatbázis vagy vektortároló, például a Chroma stb. kezeli ezeket az adatkészleteket. Az ügynök- és vektortárak kombinálásával a modell jobban teljesít a különböző tartományokból származó adatokkal. A LangChain lehetővé teszi számos vektortár használatát a nyelvi modell vagy chatbot betanítására.

Gyors vázlat

Ez a bejegyzés a következőket fogja mutatni:







Hogyan lehet ügynököt használni egy strukturált kimenet visszaküldésére a LangChainben



1. módszer: Az ágens kombinálása vektortárolókkal



2. módszer: Az ügynök használata útválasztóként





3. módszer: Ügynök használata Multi-Hop Vector Store-ban

Következtetés



Hogyan lehet ügynököt használni a strukturált kimenet visszaküldésére a LangChainben?

A fejlesztő ügynökök segítségével irányítja a modellek betanítási adatait tartalmazó adatbázisokat. Egy ügynök rendelkezik a teljes folyamat tervrajzával az összes lépés tárolásával. Az ügynök rendelkezik az összes ilyen tevékenység végrehajtásához szükséges eszközökkel a folyamat befejezéséhez. A felhasználó arra is használhatja az ügynököt, hogy adatokat szerezzen be a különböző adattárolókból, hogy változatossá tegye a modellt.

Az ágensek és vektortárak LangChainben való kombinálásának folyamatának megismeréséhez egyszerűen kövesse a felsorolt ​​lépéseket:

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

Először telepítse a LangChain modult és függőségeit az ügynökök és vektortárolók kombinálásához:

pip install langchain

Ebben az útmutatóban a Chroma adatbázist használjuk, amely különböző helyeken vagy táblákban tárolhat adatokat:

pip install chromadb

Az adatok jobb megértéséhez ossza fel a nagy fájlokat kisebb darabokra a tiktoken tokenizer segítségével:

pip install tiktoken

Az OpenAI az a modul, amely a LangChain keretrendszerben a nagy nyelvi modell felépítésére használható:

pip install openai

2. lépés: OpenAI környezet

A következő lépés itt az állítsa be a környezetet az OpenAI API-kulcsával, amely az OpenAI hivatalos fiókjából kinyerhető:

import te
import getpass

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

Most töltse fel az adatokat a helyi rendszerből a Google együttműködésébe, hogy a jövőben felhasználhassa azokat:

tól től Google. ET AL import fájlokat

feltöltve = fájlokat. feltölteni ( )

3. lépés: Vektortár létrehozása

Ez a lépés konfigurálja feladatunk első összetevőjét, amely egy vektortár a feltöltött adatok tárolására. A vektortárolók konfigurálásához a LangChain különböző függőségeiből importálható könyvtárak szükségesek:

tól től langchain. beágyazások . openai import OpenAIEembeddings

#Vector függőséget tárol a szükséges adatbázis vagy vektor beszerzéséhez

tól től langchain. vektortárak import Chroma

A #Szövegosztó a nagy szöveget kisebb darabokra alakítja

tól től langchain. text_splitter import CharacterTextSplitter

tól től langchain. llms import OpenAI

tól től langchain. document_loaders import WebBaseLoader

tól től langchain. láncok import RetrievalQA


llm = OpenAI ( hőfok = 0 )

4. lépés: Az útvonal beállítása

A könyvtárak importálása után egyszerűen állítsa be a vektortárak elérési útvonalát, mielőtt tárolná az adatokat:

tól től pathlib import Pálya

releváns_részek = [ ]
számára p ban ben Pálya ( '.' ) . abszolút ( ) . alkatrészek :
releváns_részek. mellékel ( p )
ha releváns_részek [ - 3 : ] == [ 'langchain' , 'dokumentumok' , 'modulok' ] :
szünet
#Feltételes utasítás a cikluson belül az egyes adatbázisok elérési útjának beállításához
doc_path = str ( Pálya ( *releváns_részek ) / 'a_szakszervezet_állapota.txt' )

5. lépés: Az adatok betöltése és felosztása

Most egyszerűen töltse be az adatokat, és ossza fel kisebb részekre, hogy jobb olvashatóságuk és érthetőségük legyen. Hozza létre az adatok beágyazását úgy, hogy a szöveget számokká alakítja, kialakítva a vektortereket, és eltárolja azokat a Chorma adatbázisban:

tól től langchain. document_loaders import TextLoader

#Adatkészlet betöltése az elérési útjáról, és a kisebb darabok tárolása az adatbázisban

rakodó = TextLoader ( doc_path )

dokumentumokat = rakodó. Betöltés ( )

text_splitter = CharacterTextSplitter ( chunk_size = 2000 , chunk_overlap = 0 )

szövegek = text_splitter. split_documents ( dokumentumokat )

# Konvertálja a szöveget számokká, és tárolja a beágyazásokat az adatbázisban

beágyazások = OpenAIEembeddings ( )

docsearch = Chroma. from_documents ( szövegek , beágyazások , gyűjtemény_neve = 'szakszervezeti állapot' )

6. lépés: Retriever létrehozása

Az ügynök- és vektortárolók kombinálásához létre kell hozni egy retrievert a RetrievalQA() metódussal a LangChain keretrendszerből. Ez a visszakeresési módszer akkor ajánlott, ha adatokat szeretne lekérni a vektortárakból, az ügynököket használva az adatbázisokkal való munka eszközeként:

szakszervezeti_állapot = RetrievalQA. from_chain_type (

llm = llm , lánc_típus = 'dolog' , vizsla = docsearch. mint_retriever ( )

)

Töltsön be egy másik adatkészletet, hogy integrálja az ügynököt több adatkészlettel vagy vektortárral:

rakodó = WebBaseLoader ( 'https://beta.ruff.rs/docs/faq/' )

Tárolja a ruff adatkészletet a chromadb-ben, miután létrehozta az adat kisebb darabjait a beágyazási vektorokkal is:

dok = rakodó. Betöltés ( )
ruff_texts = text_splitter. split_documents ( dok )
ruff_db = Chroma. from_documents ( ruff_texts , beágyazások , gyűjtemény_neve = 'nyakfodor' )
nyakfodor = RetrievalQA. from_chain_type (
llm = llm , lánc_típus = 'dolog' , vizsla = ruff_db. mint_retriever ( )
)

1. módszer: Az ágens kombinálása vektortárolókkal

Az alábbiakban megemlítjük az első módszert az ügynökök és a vektortárak kombinálására az információk kinyerésére:

1. lépés: Konfigurálja az eszközöket

Most, hogy a vektortárolók konfigurálva vannak, továbblépünk a folyamatunk második összetevőjének, azaz az ügynöknek a felépítéséhez. A folyamat ügynökének létrehozásához importálja a könyvtárakat a függőségek, például ügynökök, eszközök stb. használatával.

tól től langchain. ügynökök import inicializálás_ügynök
tól től langchain. ügynökök import AgentType
#Eszközök beszerzése a LangChainből az ügynök létrehozásához
tól től langchain. eszközöket import BaseTool
tól től langchain. llms import OpenAI
#LLMMathChain lekérése láncoktól a nyelvi modell felépítéséhez
tól től langchain. láncok import LLMMathChain
tól től langchain. segédprogramok import SerpAPIWrapper
tól től langchain. ügynökök import Eszköz

Konfigurálja az ügynökökhöz használandó eszközöket a minőségbiztosítási rendszer vagy a korábban konfigurált visszakeresés segítségével az eszközök nevével és leírásával:

eszközöket = [
Eszköz (
név = 'Az Unió állapotának minőségbiztosítási rendszere' ,
func = szakszervezeti_állapot. fuss ,
leírás = 'Válaszokat ad a betöltött adatkészlettel kapcsolatos kérdésekre, bevitellel teljesen formált kérdésként' ,
) ,
Eszköz (
név = 'Ruff minőségbiztosítási rendszer' ,
func = nyakfodor. fuss ,
leírás = 'Válaszokat ad a ruffdal (python linterrel) kapcsolatos kérdésekre teljesen formált kérdésként' ,
) ,
]

2. lépés: Inicializálja az ügynököt

Az eszközök konfigurálása után egyszerűen állítsa be az ügynököt az inicializa_agent() metódus argumentumában. Az általunk itt használt ügynök a ZERO_SHOT_REACT_DESCRIPTION az eszközökkel együtt, az llm (nyelvi modell) és a részletes:

ügynök = inicializálás_ügynök (

eszközöket , llm , ügynök = AgentType. ZERO_SHOT_REACT_DESCRIPTION , bőbeszédű = Igaz

)

3. lépés: Tesztelje az ügynököt

Egyszerűen futtassa az ügynököt a run() metódussal, amely argumentumában tartalmazza a kérdést:

ügynök. fuss (

'Mit mondott Joe Biden elnök a kanji brownról a beszédben?'

)

Az alábbi képernyőképen az ügynök memóriájában tárolt megfigyelés alapján mindkét adattárból kinyert válasz látható:

2. módszer: Az ügynök használata útválasztóként

A két komponens egyesítésének másik módja az ügynök útválasztóként való használata, és az alábbiakban ismertetjük a folyamatot:

1. lépés: Konfigurálja az eszközöket

Az ügynök útválasztóként való használata azt jelenti, hogy a RetrievalQA rendszer közvetlenül adja vissza a kimenetet, mivel az eszközök úgy vannak beállítva, hogy közvetlenül adják vissza a kimenetet:

eszközöket = [
#az adatokból való adatok lekéréséhez szükséges ügynök felépítéséhez szükséges eszközök konfigurálása
Eszköz (
név = 'Az Unió állapotának minőségbiztosítási rendszere' ,
func = szakszervezeti_állapot. fuss ,
leírás = 'Válaszokat ad a betöltött adatkészlettel kapcsolatos kérdésekre, teljes kérdésként megadva' ,
return_direct = Igaz ,
) ,
Eszköz (
név = 'Ruff minőségbiztosítási rendszer' ,
func = nyakfodor. fuss ,
leírás = 'Válaszokat ad a ruffdal (python linterrel) kapcsolatos kérdésekre, teljes kérdésként megadva' ,
return_direct = Igaz ,
) ,
]

2. lépés: Inicializálja és tesztelje az ügynököt

Az eszközök beállítása után egyszerűen állítsa be az ügynököt, amely kizárólag útválasztóként használható az inicializálás_agent() metódussal:

ügynök = inicializálás_ügynök (

eszközöket , llm , ügynök = AgentType. ZERO_SHOT_REACT_DESCRIPTION , bőbeszédű = Igaz

)

Tesztelje az ügynököt az agent.run() metódus bemeneti kérdésének megadásával a következő parancs végrehajtásával:

ügynök. fuss (

'Mit mondott Joe Biden elnök a kanji brownról a beszédben?'

)

Kimenet

A kimeneti képernyőképen látható, hogy az ügynök egyszerűen visszaadta a választ a kérdésre a RetrievalQA rendszer által kinyert adatkészletből:

3. módszer: Ügynök használata Multi-Hop Vector Store-ban

A harmadik módszer, amellyel a fejlesztők kombinálhatják az ügynök- és a vektortárakat, a többugrásos vektortároló lekérdezések. A következő szakasz a teljes folyamatot ismerteti:

1. lépés: Konfigurálja az eszközöket

Az első lépés, mint általában, azoknak az eszközöknek a konfigurálása, amelyeket az ügynökök felépítéséhez használnak, hogy adatokat nyerjenek ki az adattárakból:

eszközöket = [
Eszköz (
név = 'Az Unió állapotának minőségbiztosítási rendszere' ,
func = szakszervezeti_állapot. fuss ,
leírás = 'Válaszokat ad a betöltött adatkészlettel kapcsolatos kérdésekre teljesen formált kérdésként, nem hivatkozik az előző beszélgetés névmásaira' ,
) ,
Eszköz (
név = 'Ruff minőségbiztosítási rendszer' ,
func = nyakfodor. fuss ,
leírás = 'Válaszokat ad a betöltött adatkészlettel kapcsolatos kérdésekre teljesen formált kérdésként, nem hivatkozik az előző beszélgetés névmásaira' ,
) ,
]

2. lépés: Inicializálja és tesztelje az ügynököt

Ezután építse fel az ügynökváltozót az inicializálás_agent() metódussal az ügynök nevével:

ügynök = inicializálás_ügynök (

eszközöket , llm , ügynök = AgentType. ZERO_SHOT_REACT_DESCRIPTION , bőbeszédű = Igaz

)

Futtassa az ügynököt a több ugrásos kérdéssel, amely egynél több szempontot vagy szolgáltatást tartalmaz, mivel a következő kódblokk ilyen kérdést tartalmaz:

ügynök. fuss (

'Milyen eszközt használ a ruff, hogy átfusson Python notebookokon, és megemlítette-e valaki az eszközt a címében?'

)

Kimenet

A következő képernyőkép azt sugallja, hogy az ügynöknek végig kell dolgoznia a kérdést, hogy megértse annak összetettségét. Visszaadta a minőségbiztosítási rendszer által a folyamat során korábban feltöltött több adattárból kinyert választ:

Ez minden arról szól, hogyan lehet kombinálni az ügynököket és a vektortárakat a LangChainben.

Következtetés

Az ügynökök és a LangChain vektortárolóinak kombinálásához kezdje a modulok telepítésével a környezet beállításához és az adatkészletek betöltéséhez. Állítsa be a vektortárolókat az adatok betöltésére úgy, hogy először kisebb darabokra bontja, majd az OpenAI() metódussal készítse el a nyelvi modellt. Konfigurálja az ügynököt úgy, hogy integrálja azt a vektortárral, hogy adatokat nyerjen ki a különböző típusú lekérdezésekhez. Ez a cikk az ágensek és vektortárak LangChainben való kombinálásának folyamatát dolgozza fel.