Com combinar agents i botigues de vectors a LangChain?

Com Combinar Agents I Botigues De Vectors A Langchain



LangChain és el marc que dissenya models de llenguatge. Grans quantitats de dades entrenen aquests models en llenguatge natural. Hi ha moltes bases de dades o magatzems de vectors com Chroma, etc. per gestionar aquests conjunts de dades. En combinar els magatzems d'agents i vectors, el model funciona millor amb dades de diferents dominis. El LangChain permet l'ús de moltes botigues de vectors per entrenar el model d'idioma o el chatbot.

Esquema ràpid

Aquesta publicació mostrarà:







Com utilitzar un agent per retornar una sortida estructurada a LangChain



Mètode 1: combinació d'agent amb botigues de vectors



Mètode 2: Ús de l'agent com a encaminador





Mètode 3: ús de l'agent amb la botiga de vectors multi-Salt

Conclusió



Com utilitzar un agent per retornar una sortida estructurada a LangChain?

El desenvolupador utilitza agents per encaminar entre les bases de dades que contenen dades d'entrenament per als models. Un agent té el pla del procés complet emmagatzemant tots els passos. L'agent té les eines per realitzar totes aquestes activitats per completar el procés. L'usuari també pot utilitzar l'agent per obtenir dades de diferents magatzems de dades per tal que el model sigui divers.

Per conèixer el procés de combinació d'agents i botigues de vectors a LangChain, només cal que seguiu els passos indicats:

Pas 1: instal·lació de marcs

Primer, instal·leu el mòdul LangChain i les seves dependències per combinar els agents i els magatzems de vectors:

pip install langchain

En aquesta guia, estem utilitzant la base de dades Chroma que pot emmagatzemar dades en diferents ubicacions o taules:

pip instal·lar chromadb

Per entendre millor les dades, divideix els fitxers grans en trossos més petits mitjançant el tokenizer tiktoken:

pip install tiktoken

OpenAI és el mòdul que es pot utilitzar per construir el gran model de llenguatge al marc LangChain:

pip install openai

Pas 2: Entorn OpenAI

El següent pas aquí és configurar l'entorn utilitzant la clau API d'OpenAI que es pot extreure del compte oficial d'OpenAI:

importar vostè
importar getpass

vostè . aproximadament [ 'OPENAI_API_KEY' ] = getpass . getpass ( 'Clau de l'API OpenAI:' )

Ara, carregueu les dades del sistema local al col·laborador de Google per utilitzar-les en el futur:

des de Google. ET AL importar Fitxers

carregat = Fitxers. carregar ( )

Pas 3: creació d'una botiga de vectors

Aquest pas configura el primer component de la nostra tasca que és un magatzem de vectors per emmagatzemar les dades carregades. La configuració dels magatzems vectorials requereix les biblioteques que es poden importar des de diferents dependències del LangChain:

des de langchain. incrustacions . oberta importar OpenAIEmbeddings

#Vector emmagatzema la dependència per obtenir la base de dades o el vector necessari

des de langchain. botigues de vectors importar Croma

#Text Splitter s'utilitza per convertir el text gran en fragments més petits

des de langchain. divisor_text importar CharacterTextSplitter

des de langchain. llms importar OpenAI

des de langchain. carregadors_de_documents importar WebBaseLoader

des de langchain. cadenes importar QA de recuperació


llm = OpenAI ( temperatura = 0 )

Pas 4: establir el camí

Després d'importar les biblioteques, simplement configureu el camí per accedir als magatzems de vectors abans d'emmagatzemar-hi les dades:

des de pathlib importar Camí

parts_rellevants = [ ]
per pàg en Camí ( '.' ) . absolut ( ) . parts :
parts_rellevants. adjuntar ( pàg )
si parts_rellevants [ - 3 : ] == [ 'langchain' , 'docs' , 'mòduls' ] :
trencar
#Declaració condicional dins del bucle per establir el camí de cada base de dades
Doc_path = str ( Camí ( *parts_rellevants ) / 'estat_de_la_unió.txt' )

Pas 5: carregar i dividir les dades

Ara, només cal carregar les dades i dividir-les en trossos més petits per millorar la seva llegibilitat i comprensió. Creeu incrustacions de dades convertint el text en números fent els seus espais vectorials i emmagatzemant-lo a la base de dades Chorma:

des de langchain. carregadors_de_documents importar TextLoader

#Càrrega del conjunt de dades des del seu camí i emmagatzema els seus trossos més petits a la base de dades

carregador = TextLoader ( Doc_path )

documents = carregador. càrrega ( )

divisor_text = CharacterTextSplitter ( mida_part = 2000 , chunk_overlap = 0 )

textos = divisor_text. dividir_documents ( documents )

#Converteix el text en números i emmagatzema les incrustacions a la base de dades

incrustacions = OpenAIEmbeddings ( )

docsearch = Croma. de_documents ( textos , incrustacions , nom_col·lecció = 'estat d'unió' )

Pas 6: Creació d'un Retriever

Per combinar magatzems d'agents i vectors, cal crear un recuperador mitjançant el mètode RetrievalQA() del framework LangChain. Es recomana aquest mètode de recuperació per obtenir dades dels magatzems de vectors utilitzant els agents com a eina per treballar amb les bases de dades:

estat_de_unió = QA de recuperació. de_tipus_cadena (

llm = llm , tipus_cadena = 'coses' , retriever = docsearch. com_retriever ( )

)

Carregueu un altre conjunt de dades per integrar l'agent amb diversos conjunts de dades o magatzems de vectors:

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

Emmagatzemeu el conjunt de dades de ruff al chromadb després de crear també els fragments més petits de les dades amb els vectors d'incrustació:

docs = carregador. càrrega ( )
ruff_texts = divisor_text. dividir_documents ( docs )
ruff_db = Croma. de_documents ( ruff_texts , incrustacions , nom_col·lecció = 'ruf' )
ruff = QA de recuperació. de_tipus_cadena (
llm = llm , tipus_cadena = 'coses' , retriever = ruff_db. com_retriever ( )
)

Mètode 1: combinació d'agent amb botigues de vectors

El primer mètode per combinar agents i magatzems de vectors per extreure informació s'esmenta a continuació:

Pas 1: configureu les eines

Ara que les botigues de vectors estan configurades, avançant cap a la construcció del segon component del nostre procés, és a dir, l'agent. Per crear l'agent per al procés, importeu les biblioteques utilitzant les dependències com ara agents, eines, etc.

des de langchain. agents importar initialize_agent
des de langchain. agents importar Tipus d'agent
# Obtenir eines de LangChain per crear l'agent
des de langchain. eines importar Base Tool
des de langchain. llms importar OpenAI
#Aconseguir LLMMathChain de les cadenes per construir el model de llenguatge
des de langchain. cadenes importar LLMMathChain
des de langchain. utilitats importar SerpAPIWrapper
des de langchain. agents importar Eina

Configureu les eines que s'utilitzaran amb els agents mitjançant el sistema de control de qualitat o la recuperació configurada anteriorment amb el nom i la descripció de les eines:

eines = [
Eina (
nom = 'Sistema de control de qualitat de l'estat de la Unió' ,
func = estat_de_unió. correr ,
descripció = 'Ofereix respostes a les preguntes relacionades amb el conjunt de dades carregat amb entrada com a pregunta totalment formada' ,
) ,
Eina (
nom = 'Sistema de control de qualitat Ruff' ,
func = ruff. correr ,
descripció = 'Ofereix respostes a les preguntes sobre ruff (un python linter) amb entrada com a pregunta totalment formada' ,
) ,
]

Pas 2: inicialitzeu l'agent

Un cop configurades les eines, simplement configureu l'agent a l'argument del mètode initializa_agent(). L'agent que estem utilitzant aquí és el ZERO_SHOT_REACT_DESCRIPTION juntament amb les eines, llm (model de llenguatge) i verbose:

agent = initialize_agent (

eines , llm , agent = Tipus d'agent. ZERO_SHOT_REACT_DESCRIPTION , verbosa = És cert

)

Pas 3: prova l'agent

Simplement executeu l'agent mitjançant el mètode run() que conté la pregunta al seu argument:

agent. correr (

'Què va dir el president Joe Biden sobre kanji brown a l'adreça'

)

La següent captura de pantalla mostra la resposta extreta dels dos magatzems de dades mitjançant l'observació emmagatzemada a la memòria de l'agent:

Mètode 2: Ús de l'agent com a encaminador

Una altra manera de combinar els dos components és utilitzant l'agent com a encaminador i a continuació s'explica el procés:

Pas 1: configureu les eines

L'ús de l'agent com a encaminador significa que el sistema RetrievalQA retornarà la sortida directament a mesura que les eines estan configurades per retornar la sortida directament:

eines = [
#configuració de les eines necessàries per crear l'agent per obtenir dades de les dades
Eina (
nom = 'Sistema de control de qualitat de l'estat de la Unió' ,
func = estat_de_unió. correr ,
descripció = 'Ofereix respostes a les preguntes relacionades amb el conjunt de dades carregat amb entrada com a pregunta completa' ,
retorn_directe = És cert ,
) ,
Eina (
nom = 'Sistema de control de qualitat Ruff' ,
func = ruff. correr ,
descripció = 'Ofereix respostes a les preguntes sobre ruff (un python linter) amb entrada com a pregunta completa' ,
retorn_directe = És cert ,
) ,
]

Pas 2: inicialitzeu i proveu l'agent

Després de configurar les eines, simplement configureu l'agent que només es pot utilitzar com a encaminador mitjançant el mètode initialize_agent():

agent = initialize_agent (

eines , llm , agent = Tipus d'agent. ZERO_SHOT_REACT_DESCRIPTION , verbosa = És cert

)

Proveu l'agent donant la pregunta d'entrada al mètode agent.run() executant l'ordre següent:

agent. correr (

'Què va dir el president Joe Biden sobre kanji brown a l'adreça'

)

Sortida

La captura de pantalla de sortida mostra que l'agent simplement ha retornat la resposta a la pregunta del conjunt de dades extret pel sistema RetrievalQA:

Mètode 3: ús de l'agent amb la botiga de vectors multi-Salt

El tercer mètode en què els desenvolupadors poden combinar magatzems d'agents i de vectors és per a les consultes de magatzems de vectors de múltiples salts. La secció següent explica el procés complet:

Pas 1: configureu les eines

El primer pas és, com és habitual, la configuració de les eines utilitzades per construir els agents per extreure dades dels magatzems de dades:

eines = [
Eina (
nom = 'Sistema de control de qualitat de l'estat de la Unió' ,
func = estat_de_unió. correr ,
descripció = 'Ofereix respostes a les preguntes relacionades amb el conjunt de dades carregat amb entrada com a pregunta totalment formada, sense fer referència a cap pronom de la conversa anterior' ,
) ,
Eina (
nom = 'Sistema de control de qualitat Ruff' ,
func = ruf. correr ,
descripció = 'Ofereix respostes a les preguntes relacionades amb el conjunt de dades carregat amb entrada com a pregunta totalment formada, sense fer referència a cap pronom de la conversa anterior' ,
) ,
]

Pas 2: inicialitzeu i proveu l'agent

Després d'això, creeu la variable agent utilitzant el mètode initialize_agent() amb el nom de l'agent:

agent = initialize_agent (

eines , llm , agent = Tipus d'agent. ZERO_SHOT_REACT_DESCRIPTION , verbosa = És cert

)

Executeu l'agent mitjançant la pregunta multi-salt que conté més d'un aspecte o funció, ja que el bloc de codi següent conté aquesta pregunta:

agent. correr (

'Quina eina utilitza Ruff per executar quaderns de Python i algun dels parlants ha mencionat l'eina a la seva adreça?'

)

Sortida

La captura de pantalla següent suggereix que l'agent ha de resoldre la pregunta per entendre la seva complexitat. Ha retornat la resposta extreta pel sistema de control de qualitat dels múltiples magatzems de dades que hem penjat anteriorment en el procés:

Això es tracta de com combinar agents i botigues de vectors a LangChain.

Conclusió

Per combinar agents amb les botigues de vectors a LangChain, comenceu amb la instal·lació de mòduls per configurar l'entorn i carregar conjunts de dades. Configureu els magatzems de vectors per carregar dades dividint-los primer en trossos més petits i després construïu el model de llenguatge mitjançant el mètode OpenAI(). Configureu l'agent per integrar-lo amb el magatzem de vectors per extreure dades per a diferents tipus de consultes. Aquest article ha elaborat el procés de combinació d'agents i botigues de vectors a LangChain.