Paano Pagsamahin ang Mga Ahente at Vector Store sa LangChain?

Paano Pagsamahin Ang Mga Ahente At Vector Store Sa Langchain



Ang LangChain ay ang balangkas na nagdidisenyo ng mga modelo ng wika. Ang napakalaking dami ng data ay nagsasanay sa mga modelong ito sa natural na wika. Maraming database o vector store tulad ng Chroma, atbp. upang pamahalaan ang mga dataset na ito. Sa pamamagitan ng pagsasama-sama ng mga tindahan ng ahente at vector, mas mahusay na gumaganap ang modelo sa data mula sa iba't ibang domain. Ang LangChain ay nagbibigay-daan sa paggamit ng maraming vector store upang sanayin ang modelo ng wika o chatbot.

Mabilis na Balangkas

Ipapakita ng post na ito ang:







Paano Gumamit ng Ahente para Magbalik ng Structured Output sa LangChain



Paraan 1: Pagsasama ng Ahente sa mga Vector Store



Paraan 2: Paggamit ng Ahente bilang Router





Paraan 3: Paggamit ng Ahente na May Multi-Hop Vector Store

Konklusyon



Paano Gumamit ng Ahente para Magbalik ng Structured Output sa LangChain?

Gumagamit ang developer ng mga ahente upang mag-ruta sa pagitan ng mga database na naglalaman ng data ng pagsasanay para sa mga modelo. Ang isang ahente ay may blueprint ng kumpletong proseso sa pamamagitan ng pag-iimbak ng lahat ng mga hakbang. Ang ahente ay may mga tool upang maisagawa ang lahat ng mga aktibidad na ito upang makumpleto ang proseso. Magagamit din ng user ang ahente upang makakuha ng data mula sa iba't ibang mga tindahan ng data upang gawing iba ang modelo.

Upang matutunan ang proseso ng pagsasama-sama ng mga ahente at vector store sa LangChain, sundin lamang ang mga nakalistang hakbang:

Hakbang 1: Pag-install ng Mga Framework

Una, i-install ang LangChain module at ang mga dependencies nito para sa pagsasama-sama ng mga ahente at vector store:

pip install langchain

Sa gabay na ito, ginagamit namin ang database ng Chroma na maaaring mag-imbak ng data sa iba't ibang lokasyon o talahanayan:

pip install chromadb

Para mas maunawaan ang data, hatiin ang malalaking file sa maliliit na piraso gamit ang tiktoken tokenizer:

pip install tiktoken

Ang OpenAI ay ang module na maaaring gamitin upang bumuo ng malaking modelo ng wika sa LangChain framework:

pip install openai

Hakbang 2: OpenAI Environment

Ang susunod na hakbang dito ay ang itakda ang kapaligiran gamit ang API key ng OpenAI na maaaring makuha mula sa opisyal na account ng OpenAI:

angkat ikaw
angkat getpass

ikaw . humigit-kumulang [ 'OPENAI_API_KEY' ] = getpass . getpass ( 'OpenAI API Key:' )

Ngayon, i-upload ang data mula sa lokal na system sa Google collaboratory upang magamit ito sa hinaharap:

mula sa google. ET AL angkat mga file

na-upload = mga file. mag-upload ( )

Hakbang 3: Paglikha ng Vector Store

Kino-configure ng hakbang na ito ang unang bahagi ng aming gawain na isang vector store para sa pag-iimbak ng na-upload na data. Ang pag-configure ng mga tindahan ng vector ay nangangailangan ng mga aklatan na maaaring ma-import mula sa iba't ibang dependency ng LangChain:

mula sa langchain. mga paglalagay . openai angkat OpenAIEmbeddings

Ang #Vector ay nag-iimbak ng dependency upang makuha ang kinakailangang database o vector

mula sa langchain. mga vectorstore angkat Chroma

#Text splitter ay ginagamit upang i-convert ang malaking text sa mas maliliit na chunks

mula sa langchain. text_splitter angkat CharacterTextSplitter

mula sa langchain. llms angkat OpenAI

mula sa langchain. document_loaders angkat WebBaseLoader

mula sa langchain. mga tanikala angkat RetrievalQA


llm = OpenAI ( temperatura = 0 )

Hakbang 4: Pagtatakda ng Landas

Pagkatapos mag-import ng mga aklatan, itakda lamang ang landas para sa pag-access sa mga tindahan ng vector bago itago ang data dito:

mula sa pathlib angkat Daan

kaugnay na_bahagi = [ ]
para sa p sa Daan ( '.' ) . ganap ( ) . mga bahagi :
kaugnay na_bahagi. dugtungan ( p )
kung kaugnay na_bahagi [ - 3 : ] == [ 'langchain' , 'docs' , 'mga module' ] :
pahinga
#Conditional Statement sa loob ng loop para itakda ang path para sa bawat database
doc_path = str ( Daan ( *kaugnay na_bahagi ) / 'estado_of_the_union.txt' )

Hakbang 5: Pag-load at Paghahati ng Data

Ngayon, i-load lang ang data at hatiin ito sa mas maliliit na piraso para mas maging madaling mabasa at maunawaan. Lumikha ng mga pag-embed ng data sa pamamagitan ng pag-convert ng teksto sa mga numero na ginagawa ang kanilang mga vector space at pag-iimbak nito sa database ng Chorma:

mula sa langchain. document_loaders angkat TextLoader

#Naglo-load ng dataset mula sa landas nito at nag-iimbak ng mas maliliit na chunks nito sa database

loader = TextLoader ( doc_path )

mga dokumento = loader. load ( )

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

mga text = text_splitter. split_documents ( mga dokumento )

#I-convert ang teksto sa mga numero at iimbak ang mga pag-embed sa database

mga paglalagay = OpenAIEmbeddings ( )

docsearch = Chroma. from_documents ( mga text , mga paglalagay , collection_name = 'estado-of-union' )

Hakbang 6: Paglikha ng Retriever

Upang pagsamahin ang mga tindahan ng ahente at vector, kinakailangan na lumikha ng retriever gamit ang RetrievalQA() na pamamaraan mula sa LangChain framework. Ang paraan ng pagkuha na ito ay inirerekomenda upang makakuha ng data mula sa mga tindahan ng vector gamit ang mga ahente bilang tool para sa pagtatrabaho sa mga database:

estado_ng_unyon = RetrievalQA. from_chain_type (

llm = llm , chain_type = 'bagay' , retriever = docsearch. bilang_retriever ( )

)

Mag-load ng isa pang dataset para isama ang ahente sa maraming dataset o vector store:

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

I-imbak ang ruff dataset sa chromadb pagkatapos gumawa ng mas maliliit na chunks ng data kasama ang mga vectors na naka-embed din:

mga doc = loader. load ( )
ruff_texts = text_splitter. split_documents ( mga doc )
ruff_db = Chroma. from_documents ( ruff_texts , mga paglalagay , collection_name = 'ruff' )
ruff = RetrievalQA. from_chain_type (
llm = llm , chain_type = 'bagay' , retriever = ruff_db. bilang_retriever ( )
)

Paraan 1: Pagsasama ng Ahente sa mga Vector Store

Ang unang paraan ng pagsasama-sama ng mga ahente at mga tindahan ng vector upang kunin ang impormasyon ay binanggit sa ibaba:

Hakbang 1: I-configure ang Mga Tool

Ngayong na-configure na ang mga vector store, nagpapatuloy sa pagbuo ng pangalawang bahagi ng aming proseso i.e. ahente. Upang lumikha ng ahente para sa proseso, i-import ang mga aklatan gamit ang mga dependency tulad ng mga ahente, tool, atbp.

mula sa langchain. mga ahente angkat initialize_agent
mula sa langchain. mga ahente angkat Uri ng Ahente
#Pagkuha ng Mga Tool mula sa LangChain para bumuo ng ahente
mula sa langchain. mga kasangkapan angkat BaseTool
mula sa langchain. llms angkat OpenAI
#Pagkuha ng LLMMathChain mula sa mga chain upang bumuo ng modelo ng wika
mula sa langchain. mga tanikala angkat LLMMathChain
mula sa langchain. mga kagamitan angkat SerpAPIWrapper
mula sa langchain. mga ahente angkat Tool

I-configure ang mga tool na gagamitin sa mga ahente gamit ang QA system o retrieval na na-configure nang mas maaga gamit ang pangalan at paglalarawan ng mga tool:

mga kasangkapan = [
Tool (
pangalan = 'State of Union QA System' ,
func = estado_ng_unyon. tumakbo ,
paglalarawan = 'Nagbibigay ng mga tugon sa mga tanong na nauugnay sa na-load na dataset na may input bilang isang ganap na nabuong tanong' ,
) ,
Tool (
pangalan = 'Ruff QA System' ,
func = ruff. tumakbo ,
paglalarawan = 'Nagbibigay ng mga tugon sa mga tanong tungkol sa ruff (isang python linter) na may input bilang isang ganap na nabuong tanong' ,
) ,
]

Hakbang 2: Magsimula ng Ahente

Kapag na-configure na ang mga tool, itakda lang ang ahente sa argumento ng paraan ng initializa_agent(). Ang ahente na ginagamit namin dito ay ang ZERO_SHOT_REACT_DESCRIPTION kasama ang mga tool, llm (modelo ng wika), at verbose:

ahente = initialize_agent (

mga kasangkapan , llm , ahente = Uri ng Ahente. ZERO_SHOT_REACT_DESCRIPTION , verbose = totoo

)

Hakbang 3: Subukan ang Ahente

I-execute lang ang ahente gamit ang run() method na naglalaman ng tanong sa argumento nito:

ahente. tumakbo (

'Ano ang sinabi ni Pangulong Joe Biden tungkol sa kanji brown sa address'

)

Ang sumusunod na screenshot ay nagpapakita ng sagot na nakuha mula sa parehong mga tindahan ng data gamit ang obserbasyon na nakaimbak sa memorya ng ahente:

Paraan 2: Paggamit ng Ahente bilang Router

Ang isa pang paraan upang pagsamahin ang parehong mga bahagi ay sa pamamagitan ng paggamit ng ahente bilang isang router at ipinapaliwanag ng sumusunod ang proseso:

Hakbang 1: I-configure ang Mga Tool

Ang paggamit ng ahente bilang router ay nangangahulugan na ang RetrievalQA system ay direktang ibabalik ang output habang ang mga tool ay na-configure upang direktang ibalik ang output:

mga kasangkapan = [
#configure ang mga tool na kinakailangan upang bumuo ng ahente para sa pagkuha ng data mula sa data
Tool (
pangalan = 'State of Union QA System' ,
func = estado_ng_unyon. tumakbo ,
paglalarawan = 'Nagbibigay ng mga tugon sa mga tanong na nauugnay sa na-load na dataset na may input bilang kumpletong tanong' ,
return_direct = totoo ,
) ,
Tool (
pangalan = 'Ruff QA System' ,
func = ruff. tumakbo ,
paglalarawan = 'Nagbibigay ng mga tugon sa mga tanong tungkol sa ruff (isang python linter) na may input bilang kumpletong tanong' ,
return_direct = totoo ,
) ,
]

Hakbang 2: Simulan at Subukan ang Ahente

Pagkatapos itakda ang mga tool, itakda lang ang ahente na magagamit lamang bilang router gamit ang initialize_agent() na paraan:

ahente = initialize_agent (

mga kasangkapan , llm , ahente = Uri ng Ahente. ZERO_SHOT_REACT_DESCRIPTION , verbose = totoo

)

Subukan ang ahente sa pamamagitan ng pagbibigay ng input na tanong sa agent.run() na paraan sa pamamagitan ng pagsasagawa ng sumusunod na command:

ahente. tumakbo (

'Ano ang sinabi ni Pangulong Joe Biden tungkol sa kanji brown sa address'

)

Output

Ipinapakita ng screenshot ng output na ibinalik lang ng ahente ang sagot sa tanong mula sa dataset na nakuha ng RetrievalQA system:

Paraan 3: Paggamit ng Ahente na May Multi-Hop Vector Store

Ang ikatlong paraan kung saan maaaring pagsamahin ng mga developer ang parehong mga tindahan ng ahente at vector ay para sa mga query sa multi-hop vector store. Ipinapaliwanag ng sumusunod na seksyon ang kumpletong proseso:

Hakbang 1: I-configure ang Mga Tool

Ang unang hakbang ay, gaya ng dati, ang pagsasaayos ng mga tool na ginagamit para sa pagbuo ng mga ahente upang kunin ang data mula sa mga tindahan ng data:

mga kasangkapan = [
Tool (
pangalan = 'State of Union QA System' ,
func = estado_ng_unyon. tumakbo ,
paglalarawan = 'Nagbibigay ng mga tugon sa mga tanong na nauugnay sa na-load na dataset na may input bilang isang ganap na nabuong tanong, hindi tumutukoy sa anumang mga panghalip mula sa nakaraang pag-uusap' ,
) ,
Tool (
pangalan = 'Ruff QA System' ,
func = ruff. tumakbo ,
paglalarawan = 'Nagbibigay ng mga tugon sa mga tanong na nauugnay sa na-load na dataset na may input bilang isang ganap na nabuong tanong, hindi tumutukoy sa anumang mga panghalip mula sa nakaraang pag-uusap' ,
) ,
]

Hakbang 2: Simulan at Subukan ang Ahente

Pagkatapos nito, buuin ang variable ng ahente gamit ang paraan ng initialize_agent() na may pangalan ng ahente:

ahente = initialize_agent (

mga kasangkapan , llm , ahente = Uri ng Ahente. ZERO_SHOT_REACT_DESCRIPTION , verbose = totoo

)

Patakbuhin ang ahente gamit ang multi-hop na tanong na naglalaman ng higit sa isang aspeto o feature dahil ang sumusunod na code block ay naglalaman ng ganoong tanong:

ahente. tumakbo (

'Anong tool ang ginagamit ni ruff para patakbuhin ang mga notebook ng Python at binanggit ba ng sinuman sa speaker ang tool sa kanilang address'

)

Output

Iminumungkahi ng sumusunod na screenshot na kailangang pag-aralan ng ahente ang tanong upang maunawaan ang pagiging kumplikado nito. Ibinalik nito ang sagot na nakuha ng QA system mula sa maraming data store na na-upload namin kanina sa proseso:

Iyon lang ang tungkol sa kung paano pagsamahin ang mga ahente at vector store sa LangChain.

Konklusyon

Upang pagsamahin ang mga ahente sa mga vector store sa LangChain, magsimula sa pag-install ng mga module para i-set up ang kapaligiran at i-load ang mga dataset. I-configure ang mga vector store upang mag-load ng data sa pamamagitan ng paghahati-hati nito sa mas maliliit na piraso muna at pagkatapos ay buuin ang modelo ng wika gamit ang OpenAI() na pamamaraan. I-configure ang ahente para isama ito sa vector store para kumuha ng data para sa iba't ibang uri ng mga query. Ang artikulong ito ay nagpapaliwanag sa proseso ng pagsasama-sama ng mga ahente at mga tindahan ng vector sa LangChain.