Cuando interactuamos con un modelo de lenguaje, este puede recordar información de 2 maneras: la primera será a partir de los datos con los que se entrenó, donde tendrá el limitante de solo poder usar los datos fuente originales, por lo que, estarán expuestas a información muy específica y limitada a través del tiempo. La segunda manera es hacer que recuerde información mediante contenido extra que le añadamos en formato de contexto, sin embargo, aunque agreguemos nuevo contexto, ¿Cómo hallaremos las mejores respuestas a estas nuevas preguntas?

Los índices son la clave para extraer datos y digerirlos en los modelos, donde estos nos ayudarán a cargar la información desde amplias fuentes y formatos (word, excel, pdf, txt, entre otros), además podremos dividirlos en varios subtextos, tokenizarlos y convertirlos a una base de datos vectorial donde se almacenará el total de la información. A la hora de hacer un query este tambien se vectorizará y se buscarán los tokens más parecidos entre el prompt y el total del texto.

Con esto en cuenta, tendremos 3 clases principales de índices:

  1. Document loaders (cargarán los datos a memoria desde diferentes fuentes (siempre y cuando sean texto)).
  2. Text splitters (dividirán el texto en varias sub-páginas posibilitando la digestión del texto en el modelo).
  3. Vectorstores (bases de datos vectoriales donde guardaremos datos pasados por un embedding, esta será la base de datos donde buscaremos según los prompts).

¿Por qué usar índices?

La principal razón será que los LLM no pueden interactuar con nuevos datos dado que son modelos pre-entrenados en su totalidad, esto implica que la única manera de agregar nuevo conocimiento es mediante indexes.

Otra razón de gran peso es que nos permiten indexar datos no estructurados (pdf por ejemplo), donde ahora podremos hacer queries específicas a contenido que no es fácilmente clasificable bajo computación tradicional.

La razón final es que podremos hacer consultas precisas, donde gracias al prompt podremos comparar las páginas tokenizadas para hacer una búsqueda rápida y directa sobre los resultados y retornar una respuesta en caso de que se pueda generar.

By Sebastián Franco Gómez