🚚 Recuperadores (Retrievers)
.
ℹ️ Summary
Esta guía proporciona un caso de uso sobre Recuperadores QA (Retrievers QA), sobre documentos combinados sobre cadenas en un almacenamiento vectorial local, HNSWLib.
.
🗂️ Background
Un recuperador es una interfaz que devuelve documentos a partir de una consulta no estructurada. Es más general que un almacén vectorial.
.
Un recuperador no necesita ser capaz de almacenar documentos, sólo de devolverlos (o recuperarlos). Los almacenes vectoriales pueden utilizarse como columna vertebral de un recuperador, pero también existen otros tipos de recuperadores.
.
Enlaces auxiliares:
.
🎯 Problem
Implementar una “Utility Chain” en LangChain utilizando TypeScript para implementar una tarea específica, por ejemplo, procesar y analizar datos textuales para extraer información QA.
.
🚧 Solution
LangChain permite incorporar prompts como parte de un flujo de procesamiento de una aplicación a un concentrado documental, para posteriormente la extracción específica información mediante RetrievalQAChain
.
import { RetrievalQAChain } from 'langchain/chains'
Posteriormente, se genera una chain
para efectuar un query
sobre un nicho de información, por ejemplo una pregunta What time will the meeting be?
.
const chain = RetrievalQAChain.fromLLM(llm, vectorStore.asRetriever({ k: 1 }))
const response = await chain.call({
query: 'What time will the meeting be?',
})
Sin embargo, RetrievalQAChain
emplea un VectorStore
para poder mezclar y seccionar la información.
.
HNSWLib
es un almacén de vectores en memoria, o local, que puede guardarse en un archivo. Instalable como dependencia mediante hnswlib-node
.
.
Cada almacenamiento vectorial requiere de Incrustaciones (Embeddings), los cuales son un medio para representar información en un formato numérico.
import { OpenAIEmbeddings } from 'langchain/embeddings/openai'
import { HNSWLib } from 'langchain/vectorstores/hnswlib'
const embeddings = new OpenAIEmbeddings({
openAIApiKey: API_TOKEN,
})
const vectorStore = await HNSWLib.fromDocuments(docs, embeddings)
🍻 Discussion
A distintos tipos de Embeddings, configurables para usarlos con LangChain. Dependiendo de caso de uso y la instalación, serán más ajustables para resolver los requerimientos de nuestro producto.
.
Cabe mencionar, que los Embeddings permiten procesar documentos, para permitirnos enfocar en la generación, refinamiento u optimización de nuestros prompts.
import { RetrievalQAChain } from 'langchain/chains'
import { OpenAIEmbeddings } from 'langchain/embeddings/openai'
import { OpenAI } from 'langchain/llms/openai'
import { TextLoader } from 'langchain/document_loaders/fs/text'
import { HNSWLib } from 'langchain/vectorstores/hnswlib'
const API_TOKEN = // 👈 Enter the API Token from OpenAI
const loader = new TextLoader('tmp/conversation.txt')
const docs = await loader.load()
const llm = new OpenAI({
maxTokens: -1,
modelName: 'gpt-4',
temperature: 0,
openAIApiKey: API_TOKEN,
})
const embeddings = new OpenAIEmbeddings({
openAIApiKey: API_TOKEN,
})
const vectorStore = await HNSWLib.fromDocuments(docs, embeddings)
const chain = RetrievalQAChain.fromLLM(llm, vectorStore.asRetriever({ k: 1 }))
const response = await chain.call({
query: 'What time will the meeting be?',
})
console.log(response)
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?