Kuinka yhdistää agentit ja vektorikaupat LangChainissa?

Kuinka Yhdistaa Agentit Ja Vektorikaupat Langchainissa



LangChain on kehys, joka suunnittelee kielimalleja. Valtavat tietomäärät harjoittavat näitä malleja luonnollisella kielellä. On olemassa monia tietokantoja tai vektorivarastoja, kuten Chroma jne., joiden avulla voidaan hallita näitä tietojoukkoja. Yhdistämällä agentti- ja vektorivarastot malli toimii paremmin eri alueilta tulevien tietojen kanssa. LangChain mahdollistaa monien vektorikauppojen käytön kielimallin tai chatbotin kouluttamiseen.

Quick Outline

Tämä viesti näyttää:







Kuinka käyttää agenttia strukturoidun lähdön palauttamiseen LangChainissa



Tapa 1: Agentin yhdistäminen vektorikauppojen kanssa



Tapa 2: Agentin käyttäminen reitittimenä





Tapa 3: Agentin käyttäminen Multi-Hop Vector Storessa

Johtopäätös



Kuinka käyttää agenttia strukturoidun lähdön palauttamiseen LangChainissa?

Kehittäjä käyttää agentteja reitittämään mallien koulutusdataa sisältävien tietokantojen välillä. Agentilla on suunnitelma koko prosessista tallentamalla kaikki vaiheet. Agentilla on työkalut kaikkien näiden toimintojen suorittamiseen prosessin loppuunsaattamiseksi. Käyttäjä voi myös käyttää agenttia saadakseen tietoja eri tietovarastoista tehdäkseen mallista monipuolisen.

Jos haluat oppia agenttien ja vektorisäilöjen yhdistämisprosessin LangChainissa, seuraa lueteltuja vaiheita:

Vaihe 1: Kehysten asentaminen

Asenna ensin LangChain-moduuli ja sen riippuvuudet agenttien ja vektorivarastojen yhdistämistä varten:

pip asennus langchain

Tässä oppaassa käytämme Chroma-tietokantaa, joka voi tallentaa tietoja eri paikkoihin tai taulukoihin:

pip asennus chromadb

Saadaksesi parempi käsitys tiedoista, jaa suuret tiedostot pienempiin osiin Tiktoken-tokenizerin avulla:

pip asentaa tiktoken

OpenAI on moduuli, jota voidaan käyttää suuren kielimallin rakentamiseen LangChain-kehyksessä:

pip install openai

Vaihe 2: OpenAI-ympäristö

Seuraava askel tässä on perustaa ympäristöä käyttämällä OpenAI:n API-avainta, joka voidaan purkaa viralliselta OpenAI-tililtä:

tuonti sinä
tuonti getpass

sinä . suunnilleen [ 'OPENAI_API_KEY' ] = getpass . getpass ( 'OpenAI API Key:' )

Lataa nyt tiedot paikallisesta järjestelmästä Googlen yhteiskäyttöön, jotta voit käyttää niitä tulevaisuudessa:

alkaen Google. ET AL tuonti tiedostot

ladattu = tiedostot. lataa ( )

Vaihe 3: Vector Storen luominen

Tämä vaihe määrittää tehtävämme ensimmäisen komponentin, joka on vektorivarasto ladattujen tietojen tallentamista varten. Vektorivarastojen määrittäminen vaatii kirjastot, jotka voidaan tuoda LangChainin eri riippuvuuksista:

alkaen langchain. upotukset . openai tuonti OpenAIEembeddings

#Vector tallentaa riippuvuuden saadakseen tarvittavan tietokannan tai vektorin

alkaen langchain. vektorivarastot tuonti Chroma

#Tekstijakajaa käytetään suuren tekstin muuntamiseen pienemmiksi paloiksi

alkaen langchain. text_splitter tuonti CharacterTextSplitter

alkaen langchain. llms tuonti OpenAI

alkaen langchain. document_loaders tuonti WebBaseLoader

alkaen langchain. ketjut tuonti RetrievalQA


llm = OpenAI ( lämpötila = 0 )

Vaihe 4: Polun asettaminen

Kun olet tuonut kirjastot, aseta vektorivarastoihin pääsypolku ennen tietojen tallentamista niihin:

alkaen pathlib tuonti Polku

relevant_parts = [ ]
varten s sisään Polku ( '.' ) . ehdoton ( ) . osat :
relevant_parts. liittää ( s )
jos relevant_parts [ - 3 : ] == [ 'langchain' , 'asiakirjat' , 'moduulit' ] :
tauko
#Ehdollinen lauseke silmukan sisällä määrittääksesi polun kullekin tietokannalle
doc_path = str ( Polku ( * relevantit_osat ) / 'liiton_tila.txt' )

Vaihe 5: Tietojen lataaminen ja jakaminen

Lataa nyt tiedot ja jaa se pienempiin osiin parantaaksesi niiden luettavuutta ja ymmärrettävyyttä. Luo tietojen upotuksia muuntamalla teksti numeroiksi tekemällä niiden vektoriavaruudet ja tallentamalla se Chorma-tietokantaan:

alkaen langchain. document_loaders tuonti TextLoader

#Ladataan tietojoukkoa polultaan ja tallennetaan sen pienemmät osat tietokantaan

kuormaaja = TextLoader ( doc_path )

asiakirjoja = kuormaaja. ladata ( )

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

tekstejä = text_splitter. split_documents ( asiakirjoja )

#Muunna teksti numeroiksi ja tallenna upotukset tietokantaan

upotukset = OpenAIEembeddings ( )

docsearch = Chroma. from_documents ( tekstejä , upotukset , kokoelman_nimi = 'liiton tila' )

Vaihe 6: Luo noutaja

Agentti- ja vektorivarastojen yhdistämiseksi on luotava noutaja RetrievalQA()-menetelmällä LangChain-kehyksestä. Tätä hakumenetelmää suositellaan tietojen saamiseksi vektorivarastoista käyttämällä agentteja tietokantojen työskentelyn työkaluna:

liiton_tila = RetrievalQA. from_chain_type (

llm = llm , ketjun_tyyppi = 'tavaraa' , noutaja = docsearch. noutajana ( )

)

Lataa toinen tietojoukko integroidaksesi agentin useiden tietojoukkojen tai vektorisäilöiden kanssa:

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

Tallenna ruff-tietojoukko chromadb:hen, kun olet luonut pienemmät datapalat myös upotusvektoreilla:

asiakirjoja = kuormaaja. ladata ( )
ruff_texts = text_splitter. split_documents ( asiakirjoja )
ruff_db = Chroma. from_documents ( ruff_texts , upotukset , kokoelman_nimi = 'ruff' )
ruff = RetrievalQA. from_chain_type (
llm = llm , ketjun_tyyppi = 'tavaraa' , noutaja = ruff_db. noutajana ( )
)

Tapa 1: Agentin yhdistäminen vektorikauppojen kanssa

Ensimmäinen tapa yhdistää agentit ja vektorivarastot tiedon poimimiseksi on mainittu alla:

Vaihe 1: Määritä työkalut

Nyt kun vektorivarastot on konfiguroitu, siirrymme kohti prosessimme toisen komponentin eli agentin rakentamista. Voit luoda agentin prosessille tuomalla kirjastot käyttämällä riippuvuuksia, kuten agentteja, työkaluja jne.

alkaen langchain. agentit tuonti alustusagentti
alkaen langchain. agentit tuonti AgentType
#Työkalujen hankkiminen LangChainista agentin rakentamiseen
alkaen langchain. työkaluja tuonti BaseTool
alkaen langchain. llms tuonti OpenAI
#LLMMathChainin saaminen ketjuista kielimallin rakentamiseksi
alkaen langchain. ketjut tuonti LLMMathChain
alkaen langchain. apuohjelmia tuonti SerpAPIWrapper
alkaen langchain. agentit tuonti Työkalu

Määritä agenttien kanssa käytettävät työkalut laadunvarmistusjärjestelmää tai aiemmin määritettyä hakua käyttäen työkalujen nimellä ja kuvauksella:

työkaluja = [
Työkalu (
nimi = 'Unionin tilan laadunvarmistusjärjestelmä' ,
func = liiton_tila. juosta ,
kuvaus = 'Tarjoaa vastauksia ladattua tietojoukkoa koskeviin kysymyksiin syöttämällä täysin muodostettuna kysymyksenä' ,
) ,
Työkalu (
nimi = 'Ruff QA System' ,
func = ruff. juosta ,
kuvaus = 'Tarjoaa vastauksia ruffia (python-linteriä) koskeviin kysymyksiin syöttämällä sisään täysin muodostettuna kysymyksenä' ,
) ,
]

Vaihe 2: Alusta agentti

Kun työkalut on määritetty, aseta agentti inicializa_agent()-metodin argumenttiin. Välittäjä, jota käytämme täällä, on ZERO_SHOT_REACT_DESCRIPTION työkalujen, llm (kielimalli) ja verbose kanssa:

agentti = alustusagentti (

työkaluja , llm , agentti = AgentType. ZERO_SHOT_REACT_DESCRIPTION , monisanainen = Totta

)

Vaihe 3: Testaa agentti

Suorita agentti yksinkertaisesti käyttämällä run()-metodia, joka sisältää kysymyksen argumentissaan:

agentti. juosta (

'Mitä presidentti Joe Biden sanoi puheessaan kanji brownista'

)

Seuraava kuvakaappaus näyttää vastauksen, joka on poimittu molemmista tietovarastoista agentin muistiin tallennettujen havaintojen avulla:

Tapa 2: Agentin käyttäminen reitittimenä

Toinen tapa yhdistää molemmat komponentit on käyttää agenttia reitittimenä, ja seuraava selittää prosessin:

Vaihe 1: Määritä työkalut

Agentin käyttäminen reitittimenä tarkoittaa, että RetrievalQA-järjestelmä palauttaa tulosteen suoraan, koska työkalut on määritetty palauttamaan tulos suoraan:

työkaluja = [
#agentin rakentamiseen tarvittavien työkalujen määrittäminen tietojen saamiseksi tiedoista
Työkalu (
nimi = 'Unionin tilan laadunvarmistusjärjestelmä' ,
func = liiton_tila. juosta ,
kuvaus = 'Tarjoaa vastauksia ladattua tietojoukkoa koskeviin kysymyksiin syöttämällä täydellisenä kysymyksenä' ,
paluu_suora = Totta ,
) ,
Työkalu (
nimi = 'Ruff QA System' ,
func = ruff. juosta ,
kuvaus = 'Tarjoaa vastauksia ruffia (python linteriä) koskeviin kysymyksiin syöttämällä täydellisenä kysymyksenä' ,
paluu_suora = Totta ,
) ,
]

Vaihe 2: Alusta ja testaa agentti

Kun olet asettanut työkalut, aseta agentti, jota voidaan käyttää vain reitittimenä käyttämällä inicialize_agent()-menetelmää:

agentti = alustusagentti (

työkaluja , llm , agentti = AgentType. ZERO_SHOT_REACT_DESCRIPTION , monisanainen = Totta

)

Testaa agenttia antamalla syöttökysymys agent.run()-metodissa suorittamalla seuraava komento:

agentti. juosta (

'Mitä presidentti Joe Biden sanoi puheessaan kanji brownista'

)

Lähtö

Tulosteen kuvakaappaus näyttää, että agentti on yksinkertaisesti palauttanut vastauksen kysymykseen RetrievalQA-järjestelmän poimimasta tietojoukosta:

Tapa 3: Agentin käyttäminen Multi-Hop Vector Storessa

Kolmas menetelmä, jossa kehittäjät voivat yhdistää sekä agentti- että vektorivarastot, on monihyppyiset vektorivarastokyselyt. Seuraava osa selittää koko prosessin:

Vaihe 1: Määritä työkalut

Ensimmäinen vaihe on, kuten tavallista, työkalujen konfigurointi, joita käytetään agenttien rakentamiseen tietojen poimimiseksi tietovarastoista:

työkaluja = [
Työkalu (
nimi = 'Unionin tilan laadunvarmistusjärjestelmä' ,
func = liiton_tila. juosta ,
kuvaus = 'Tarjoaa vastauksia ladattua tietojoukkoa koskeviin kysymyksiin syöttämällä täysin muodostettuna kysymyksenä, ei viittaa mihinkään edellisen keskustelun pronomineihin' ,
) ,
Työkalu (
nimi = 'Ruff QA System' ,
func = ruff. juosta ,
kuvaus = 'Tarjoaa vastauksia ladattua tietojoukkoa koskeviin kysymyksiin syöttämällä täysin muodostettuna kysymyksenä, ei viittaa mihinkään edellisen keskustelun pronomineihin' ,
) ,
]

Vaihe 2: Alusta ja testaa agentti

Tämän jälkeen muodosta agenttimuuttuja käyttämällä inicializaatio_agent()-metodia agentin nimellä:

agentti = alustusagentti (

työkaluja , llm , agentti = AgentType. ZERO_SHOT_REACT_DESCRIPTION , monisanainen = Totta

)

Suorita agentti käyttämällä monihyppykysymystä, joka sisältää useamman kuin yhden aspektin tai ominaisuuden, koska seuraava koodilohko sisältää tällaisen kysymyksen:

agentti. juosta (

'Millä työkalulla ruff ajaa Python-muistikirjoja ja mainitsiko kukaan puhujista työkalun osoitteestaan'

)

Lähtö

Seuraava kuvakaappaus ehdottaa, että agentin on työstettävä kysymys läpi ymmärtääkseen sen monimutkaisuuden. Se on palauttanut QA-järjestelmän poimiman vastauksen useista tietovarastoista, jotka olemme ladannut aiemmin prosessin aikana:

Siinä on kyse agenttien ja vektorikauppojen yhdistämisestä LangChainissa.

Johtopäätös

Jos haluat yhdistää agentit LangChainin vektorivarastoihin, aloita moduulien asentaminen ympäristön määrittämiseksi ja tietojoukkojen lataamiseksi. Määritä vektorivarastot lataamaan dataa jakamalla se ensin pienempiin osiin ja rakentamalla sitten kielimalli OpenAI()-menetelmällä. Määritä agentti integroimaan se vektorisäilön kanssa erilaisten kyselyiden tietojen poimimiseksi. Tässä artikkelissa on käsitelty prosessia, jossa yhdistetään aineet ja vektorivarastot LangChainissa.