Kaip sujungti agentus ir vektorines parduotuves „LangChain“?

Kaip Sujungti Agentus Ir Vektorines Parduotuves Langchain



LangChain yra sistema, kurianti kalbos modelius. Didžiuliai duomenų kiekiai treniruoja šiuos modelius natūralia kalba. Yra daug duomenų bazių arba vektorių saugyklų, pvz., „Chroma“ ir kt., skirtų šiems duomenų rinkiniams valdyti. Sujungus agento ir vektorių saugyklas, modelis geriau veikia su duomenimis iš skirtingų domenų. „LangChain“ leidžia naudoti daugybę vektorių parduotuvių kalbos modeliui arba pokalbių robotui išmokyti.

Greitas kontūras

Šiame įraše bus rodoma:





Kaip naudoti agentą, norint grąžinti struktūrizuotą išvestį „LangChain“.



1 būdas: agento sujungimas su vektorinėmis parduotuvėmis



2 būdas: Agento naudojimas kaip maršrutizatorius





3 būdas: Agento naudojimas su Multi-Hop Vector Store

Išvada



Kaip naudoti agentą, norint grąžinti struktūrizuotą išvestį „LangChain“?

Kūrėjas naudoja agentus, kad nukreiptų tarp duomenų bazių, kuriose yra modelių mokymo duomenų. Agentas turi viso proceso planą, saugodamas visus veiksmus. Agentas turi įrankius, kad galėtų atlikti visas šias veiklas, kad užbaigtų procesą. Vartotojas taip pat gali naudoti agentą, kad gautų duomenis iš skirtingų duomenų saugyklų, kad modelis būtų įvairus.

Norėdami išmokti agentų ir vektorių saugyklų derinimo procesą LangChain, tiesiog atlikite nurodytus veiksmus:

1 veiksmas: „Frameworks“ diegimas

Pirmiausia įdiekite „LangChain“ modulį ir jo priklausomybes agentų ir vektorių saugyklų derinimui:

pip įdiegti langchain

Šiame vadove mes naudojame Chroma duomenų bazę, kuri gali saugoti duomenis įvairiose vietose arba lentelėse:

pip įdiegti chromadb

Norėdami geriau suprasti duomenis, padalykite didelius failus į mažesnius gabalus naudodami tikttoken žetonų priemonę:

pip įdiegti tiktoken

OpenAI yra modulis, kurį galima naudoti kuriant didelį kalbos modelį „LangChain“ sistemoje:

pip install openai

2 veiksmas: OpenAI aplinka

Kitas žingsnis čia yra sutvarkyti aplinką naudojant OpenAI API raktą, kurį galima išgauti iš oficialios OpenAI paskyros:

importuoti tu
importuoti gauti pasą

tu . maždaug [ „OPENAI_API_KEY“ ] = gauti pasą . gauti pasą ( 'OpenAI API raktas:' )

Dabar įkelkite duomenis iš vietinės sistemos į „Google“ bendradarbiavimą, kad galėtumėte juos naudoti ateityje:

google. ET AL importuoti failus

įkeltas = failus. įkelti ( )

3 veiksmas: vektorinės parduotuvės kūrimas

Šis veiksmas sukonfigūruoja pirmąjį mūsų užduoties komponentą, kuris yra vektorių saugykla, skirta įkeltiems duomenims saugoti. Norint konfigūruoti vektorių saugyklas, reikia bibliotekų, kurias galima importuoti iš skirtingų LangChain priklausomybių:

langchain. įterpimai . openai importuoti OpenAIEmbeddings

#Vector išsaugo priklausomybę, kad gautų reikiamą duomenų bazę arba vektorių

langchain. vektorių parduotuvės importuoti Chroma

#Teksto skirstytuvas naudojamas dideliam tekstui konvertuoti į mažesnius gabalus

langchain. text_splitter importuoti CharacterTextSplitter

langchain. llms importuoti OpenAI

langchain. document_loaders importuoti WebBaseLoader

langchain. grandines importuoti RetrievalQA


llm = OpenAI ( temperatūros = 0 )

4 veiksmas: kelio nustatymas

Importavę bibliotekas, prieš išsaugodami duomenis, tiesiog nustatykite prieigos prie vektorinių saugyklų kelią:

pathlib importuoti Kelias

atitinkamos_dalys = [ ]
dėl p in Kelias ( '.' ) . absoliutus ( ) . dalys :
atitinkamos_dalys. pridėti ( p )
jeigu atitinkamos_dalys [ - 3 : ] == [ 'langchain' , 'dokumentai' , 'moduliai' ] :
pertrauka
#Sąlyginis pareiškimas ciklo viduje, kad nustatytumėte kiekvienos duomenų bazės kelią
doc_path = g ( Kelias ( *susijusios_dalis ) / 'sąjungos_būsena.txt' )

5 veiksmas: duomenų įkėlimas ir padalijimas

Dabar tiesiog įkelkite duomenis ir padalykite juos į mažesnius gabalus, kad būtų geriau skaitoma ir suprantama. Sukurkite duomenų įterpimus konvertuodami tekstą į skaičius, sudarydami jų vektorines erdves ir išsaugodami juos Chorma duomenų bazėje:

langchain. document_loaders importuoti TextLoader

#Įkeliamas duomenų rinkinys iš jo kelio ir saugomi mažesni jo fragmentai duomenų bazėje

krautuvas = TextLoader ( doc_path )

dokumentus = krautuvas. apkrova ( )

teksto skirstytuvas = CharacterTextSplitter ( gabalo_dydis = 2000 m , chunk_overlap = 0 )

tekstų = text_splitter. padalinti_dokumentai ( dokumentus )

# Konvertuokite tekstą į skaičius ir išsaugokite įterpimus duomenų bazėje

įterpimai = OpenAIEmbeddings ( )

docsearch = Chroma. iš_dokumentų ( tekstų , įterpimai , kolekcijos_pavadinimas = „sąjungos valstybė“ )

6 veiksmas: retriverio kūrimas

Norint sujungti agento ir vektorių saugyklas, reikia sukurti retriverį naudojant RetrievalQA() metodą iš LangChain sistemos. Šis paieškos metodas rekomenduojamas norint gauti duomenis iš vektorinių parduotuvių, naudojant agentus kaip darbo su duomenų bazėmis įrankį:

sąjungos_ būsena = RetrievalQA. from_chain_type (

llm = llm , grandinės_tipas = 'daiktai' , retriveris = docsearch. kaip_retriveris ( )

)

Įkelkite kitą duomenų rinkinį, kad integruotumėte agentą su keliais duomenų rinkiniais arba vektorių saugyklomis:

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

Sukūrę mažesnes duomenų dalis su įdėjimo vektoriais, išsaugokite „Ruff“ duomenų rinkinį „chromadb“:

dok = krautuvas. apkrova ( )
ruff_texts = text_splitter. padalinti_dokumentai ( dok )
ruff_db = Chroma. iš_dokumentų ( ruff_texts , įterpimai , kolekcijos_pavadinimas = 'Ruff' )
ruff = RetrievalQA. from_chain_type (
llm = llm , grandinės_tipas = 'daiktai' , retriveris = ruff_db. kaip_retriveris ( )
)

1 būdas: agento sujungimas su vektorinėmis parduotuvėmis

Pirmasis būdas sujungti agentus ir vektorines saugyklas informacijai išgauti yra paminėtas toliau:

1 veiksmas: konfigūruokite įrankius

Dabar, kai vektorių saugyklos sukonfigūruotos, pereikime prie antrojo mūsų proceso komponento, ty agento, kūrimo. Norėdami sukurti proceso agentą, importuokite bibliotekas naudodami priklausomybes, pvz., agentus, įrankius ir kt.

langchain. agentai importuoti inicijuoti_agentą
langchain. agentai importuoti Agento tipas
#Įrankių gavimas iš „LangChain“ agentui sukurti
langchain. įrankiai importuoti BaseTool
langchain. llms importuoti OpenAI
#LLMMathChain gavimas iš grandinių, kad būtų sukurtas kalbos modelis
langchain. grandines importuoti LLMMathChain
langchain. Komunalinės paslaugos importuoti SerpAPIWrapper
langchain. agentai importuoti Įrankis

Sukonfigūruokite įrankius, kurie bus naudojami su agentais, naudodami QA sistemą arba anksčiau sukonfigūruotą gavimą su įrankių pavadinimu ir aprašymu:

įrankiai = [
Įrankis (
vardas = „Sąjungos kokybės užtikrinimo sistema“ ,
func = sąjungos_ būsena. paleisti ,
apibūdinimas = „Pateikia atsakymus į klausimus, susijusius su įkeltu duomenų rinkiniu, įvedant kaip visiškai suformuotą klausimą“ ,
) ,
Įrankis (
vardas = „Ruff QA sistema“ ,
func = ruff. paleisti ,
apibūdinimas = „Pateikia atsakymus į klausimus apie ruffą (pitono linterį) įvedant kaip visiškai suformuotą klausimą“ ,
) ,
]

2 veiksmas: inicijuokite agentą

Kai įrankiai bus sukonfigūruoti, tiesiog nustatykite agentą inicializavimo_agentas() metodo argumente. Agentas, kurį čia naudojame, yra ZERO_SHOT_REACT_DESCRIPTION kartu su įrankiais, llm (kalbos modelis) ir išsamiai:

agentas = inicijuoti_agentą (

įrankiai , llm , agentas = Agento tipas. ZERO_SHOT_REACT_DESCRIPTION , žodinis = Tiesa

)

3 veiksmas: patikrinkite agentą

Tiesiog paleiskite agentą naudodami run() metodą, kurio argumente yra klausimas:

agentas. paleisti (

„Ką savo kreipimesi prezidentas Joe Bidenas pasakė apie kanji brown?

)

Šioje ekrano kopijoje rodomas atsakymas, gautas iš abiejų duomenų saugyklų naudojant agento atmintyje saugomą stebėjimą:

2 būdas: Agento naudojimas kaip maršrutizatorius

Kitas būdas sujungti abu komponentus yra naudoti agentą kaip maršrutizatorių ir toliau paaiškinamas procesas:

1 veiksmas: konfigūruokite įrankius

Agento naudojimas kaip maršrutizatorius reiškia, kad RetrievalQA sistema grąžins išvestį tiesiogiai, nes įrankiai sukonfigūruoti taip, kad išvestį grąžintų tiesiogiai:

įrankiai = [
#Įrankių, reikalingų duomenims iš duomenų gauti agentui sukurti, konfigūravimas
Įrankis (
vardas = „Sąjungos kokybės užtikrinimo sistema“ ,
func = sąjungos_ būsena. paleisti ,
apibūdinimas = „Pateikia atsakymus į klausimus, susijusius su įkeltu duomenų rinkiniu, įvedant kaip išsamų klausimą“ ,
return_direct = Tiesa ,
) ,
Įrankis (
vardas = „Ruff QA sistema“ ,
func = ruff. paleisti ,
apibūdinimas = „Pateikia atsakymus į klausimus apie rufą (pitono linterį), įvedant išsamų klausimą“ ,
return_direct = Tiesa ,
) ,
]

2 veiksmas: inicijuokite ir patikrinkite agentą

Nustatę įrankius, tiesiog nustatykite agentą, kuris gali būti naudojamas tik kaip maršrutizatorius, naudojant inicializuoti_agentas() metodą:

agentas = inicijuoti_agentą (

įrankiai , llm , agentas = Agento tipas. ZERO_SHOT_REACT_DESCRIPTION , žodinis = Tiesa

)

Išbandykite agentą pateikdami įvesties klausimą agent.run() metodu, vykdydami šią komandą:

agentas. paleisti (

„Ką savo kreipimesi prezidentas Joe Bidenas pasakė apie kanji brown?

)

Išvestis

Išvesties ekrano kopijoje rodoma, kad agentas tiesiog grąžino atsakymą į klausimą iš duomenų rinkinio, ištraukto iš RetrievalQA sistemos:

3 būdas: Agento naudojimas su Multi-Hop Vector Store

Trečiasis būdas, kuriuo kūrėjai gali sujungti agentų ir vektorių saugyklas, yra kelių šuolių vektorių saugyklos užklausos. Šiame skyriuje paaiškinamas visas procesas:

1 veiksmas: konfigūruokite įrankius

Pirmasis žingsnis, kaip įprasta, yra įrankių, naudojamų kuriant agentus, skirtus duomenims iš duomenų saugyklų, konfigūracija:

įrankiai = [
Įrankis (
vardas = „Sąjungos kokybės užtikrinimo sistema“ ,
func = sąjungos_ būsena. paleisti ,
apibūdinimas = „Pateikia atsakymus į klausimus, susijusius su įkeltu duomenų rinkiniu, įvedant kaip visiškai suformuotą klausimą, nenurodant jokių įvardžių iš ankstesnio pokalbio“ ,
) ,
Įrankis (
vardas = „Ruff QA sistema“ ,
func = ruff. paleisti ,
apibūdinimas = „Pateikia atsakymus į klausimus, susijusius su įkeltu duomenų rinkiniu, įvedant kaip visiškai suformuotą klausimą, nenurodant jokių įvardžių iš ankstesnio pokalbio“ ,
) ,
]

2 veiksmas: inicijuokite ir patikrinkite agentą

Po to sukurkite agento kintamąjį naudodami inicializacijos_agentas() metodą su agento pavadinimu:

agentas = inicijuoti_agentą (

įrankiai , llm , agentas = Agento tipas. ZERO_SHOT_REACT_DESCRIPTION , žodinis = Tiesa

)

Paleiskite agentą naudodami kelių šuolių klausimą, kuriame yra daugiau nei vienas aspektas arba funkcija, nes toks klausimas yra šiame kodo bloke:

agentas. paleisti (

„Kokį įrankį Ruff naudoja, kad perbėgtų Python bloknotus ir ar kuris nors iš pranešėjų paminėjo įrankį savo adresu?

)

Išvestis

Toliau pateikta ekrano kopija rodo, kad agentas turi išspręsti klausimą, kad suprastų jo sudėtingumą. Jis grąžino atsakymą, kurį QA sistema ištraukė iš kelių duomenų saugyklų, kurias įkėlėme anksčiau proceso metu:

Tai viskas apie tai, kaip sujungti agentus ir vektorių parduotuves „LangChain“.

Išvada

Norėdami sujungti agentus su vektorių saugyklomis LangChain, pradėkite nuo modulių diegimo aplinkai nustatyti ir duomenų rinkiniams įkelti. Sukonfigūruokite vektorines saugyklas, kad būtų įkeliami duomenys, pirmiausia padalydami juos į mažesnius gabalus, o tada sukurkite kalbos modelį naudodami OpenAI() metodą. Sukonfigūruokite agentą, kad jis būtų integruotas su vektorių saugykla, kad išgautumėte duomenis įvairių tipų užklausoms. Šiame straipsnyje išsamiai aprašomas agentų ir vektorių parduotuvių „LangChain“ derinimo procesas.