Greitas kontūras
Šiame įraše bus rodoma:
Kaip naudoti agentą, norint grąžinti struktūrizuotą išvestį „LangChain“.
- Frameworkų diegimas
- OpenAI aplinka
- Vektorinės parduotuvės kūrimas
- Kelio nustatymas
- Duomenų įkėlimas ir padalijimas
- Retriverio kūrimas
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
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 tuimportuoti 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:
iš 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ų:
iš langchain. įterpimai . openai importuoti OpenAIEmbeddings#Vector išsaugo priklausomybę, kad gautų reikiamą duomenų bazę arba vektorių
iš langchain. vektorių parduotuvės importuoti Chroma
#Teksto skirstytuvas naudojamas dideliam tekstui konvertuoti į mažesnius gabalus
iš langchain. text_splitter importuoti CharacterTextSplitter
iš langchain. llms importuoti OpenAI
iš langchain. document_loaders importuoti WebBaseLoader
iš 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ą:
iš pathlib importuoti Keliasatitinkamos_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:
iš 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.
iš langchain. agentai importuoti inicijuoti_agentąiš langchain. agentai importuoti Agento tipas
#Įrankių gavimas iš „LangChain“ agentui sukurti
iš langchain. įrankiai importuoti BaseTool
iš langchain. llms importuoti OpenAI
#LLMMathChain gavimas iš grandinių, kad būtų sukurtas kalbos modelis
iš langchain. grandines importuoti LLMMathChain
iš langchain. Komunalinės paslaugos importuoti SerpAPIWrapper
iš 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.