La gestión del diálogo es una de las carencias actuales mas importantes de los grandes modelos de lenguaje (LLM). Todos son muy solventes al ejecutar una conversación corta tipo pregunta-respuesta pero no tienen capacidad de sostener un diálogo durante diferentes sesiones, no tienen una memoria de contexto en la que recoger y gestionar su interacción con nosotros.
Para paliar éste defecto han surgido diferentes soluciones como los «entornos de desarrollo de IA´s conversacionales«, tradicionalmente complejos y costosos. Pero también han aparecido tecnologías open-source como LLaMA-Index o LangChain, con la que podemos crear una «memoria de contexto» desde la que lanzar nuestro modelo de lenguaje. Dicha memoria puede estar constituida de diversas fuentes de conocimiento, no solo el historial de nuestra conversación.
A través de LangChain y otras tecnologías que la rodean podemos dotar a nuestro LLM de:
- Gestión del flujo del diálogo: creando un árbol de decisiones que guíe a nuestro modelo hacia un diálogo específico, limitando así las posibles respuestas a una pregunta y controlando la información que ofrece el modelo.
- Memoria Conversacional y de contexto: guardando la información relevante de anteriores conversaciones y creando con ellos «contextos de información para un tema particular» (salud, viajes, tecnología) para dotar a la interacción con los LLM´s de una mayor naturalidad y eficiencia.
- Integración con APi´s: obteniendo información de API´s externas como Wikipedia, MeteoSat, WolframAlpha etc, dando a nuestro modelo información actualizada que manejar. Podríamos solicitarle el mejor itinerario para hacer turismo por una ciudad, teniendo en cuenta nuestros gustos gastronómicos, culturales, si nos gusta andar o ir en transporte, la previsión meteorológica para el día o los puntos de interes que están abiertos en ese momento ya sea por horario o por obras, por ejemplo. Algunos de éstos datos podrían deducirse además de anteriores conversaciones, con lo que el modelo podría tenerlos en cuenta de antemano.
- Integración con bases de conocimientos: transformando nuestra documentación (HTML, TXT, PDF, etc) en embeddings (representaciones vectoriales de información) y almacenándolos en BBDD vectoriales podemos dotar a nuestro LLM de conocimientos generados por nosotros mismos y mantenerlo actualizado sin necesidad de re-entrenarlo, ahorrando en costes eliminando los problemas relacionados.
El desarrollo de éstas tecnologías y su implantación se está acelerando debido a los lanzamientos de LLM´s de carácter open-source y gran calidad que hemos visto durante 2023.
LlaMA e Hijos
Actualmente tenemos a nuestra disposición toda una plétora de modelos de uso libre, algunos derivados de LLaMA (creado por Facebook) como Alpaca, Vicuna o Guanaco y otros basados en otros desarrollos o creados enteramente por terceros como Falcon, Koala, RMKV-4-Raven, ChatGLM, Dolly, StableLM, o FastChat-T
Todos ellos los podemos encontrar en varios «sabores» o tamaños dependiendo del número de parámetros que lo conforman. Generlaménte tenemos versiones 7b, 13b, 30b, 64b o similares en referencia al número de parámetros que lo conforman (7b=siete mil millones).
Las necesidades de memoria de éstos modelos son muy grandes pero la comunidad ha encontrado maneras de optimizar tanto el tamaño como la velocidad de inferencia de los mismos, llegando al punto de poder ejecutar algunos de éstos monstruos que originalmente ocupaban decenas de gigas en tarjetas gráficas de gama media (>=6Gb VRAM) mediante técnicas como la cuantización de modelos y la inferencia de los mismos con precisiones mas bajas (8bit) sin que la calidad de las respuestas mermen notoriamente, lo que demuestra que la optimización es el siguiente paso a dar para el uso masivo de éste tipo de modelos en la sociedad.
La suma de éstas tecnologías nos presenta la opción de tener, totalmente gratis, nuestra propia IA conversacional, alimentada con nuestros datos, con acceso a herramientas externas y conocimientos online completamente actualizados sin sufrir los enormes gastos en entrenamiento que normalmente conllevaría.
Vicuna-13B 4b-128g
Para comprobar la calidad de éstos modelos he añadido un enlace a un cuaderno de Google Colab que puedes usar en cualquier momento y lugar ya que no se ejecuta en local, si no usando los recursos de una máquina virtual en un servidor de Google.
En dicho cuaderno usaremos Vicuna-13B 4b-128g como modelo de lenguaje. Como hemos comentado antes, Vicuna es un modelo derivado de LLaMA que ha sido refinado usando conversaciones con Chat-GPT4 para mejorar el formato de sus respuestas. A su vez el sabor que hemos escogido es la versión de 13.000.000.000 de parámetros, la cual ofrece muy buena calidad de conversación, y además hemos usado una versión del mismo cuantizada a 4bits, con lo que reducimos a la mitad el tamaño en memoria del modelo. Solo tendrás que ejecutar cada una de las celdas para arrancar Vicuna, tanto en un servidor con una interfaz web dedicada al chat como en la propia consola de la maquina virtual.
Son unos pasos muy sencillos en los que vemos las diferentes tecnologías que vamos a unir para dar forma a nuestro Asistente.
https://colab.research.google.com/drive/1qJBbake4NVFPzln1TPDHi5mzCrHRVsKX?usp=drive_link
En una futura actualización del cuaderno incluiré la implementación de LangChain, ya que ahora mismo es complicado conectarlo con un modelo fuertemente cuantizado como es Vicuna-13B 4b-128g, la versión de Vicuna que estamos utilizando en Colab.