Cualquiera que haya usado ChatGPT habrá percibido rápidamente su utilidad, pero también sus limitaciones, principalmente asociadas a la dificultad de suministrarle información adicional actualizada (añadir un contexto específico al modelo), y a la frecuente aparición de errores garrafales (denominados alucinaciones) y sesgos (desviaciones sistemáticas) en el contenido generado.
Solucionar estos problemas no es tarea fácil por la falta de transparencia de los creadores de ChatGPT, ya que no se sabe qué datos se han usado en su entrenamiento, ni tampoco se conocen los detalles concretos de cómo se gestionan las alucinaciones y los sesgos internamente.
En la actualidad se barajan varias alternativas para superar estas limitaciones, como el reentrenamiento o ajuste fino del modelo de lenguaje (LLM) sobre el que está construido ChatGPT (un proceso que requiere de mucho tiempo y capacidad de cómputo) o el uso de herramientas de búsqueda semántica combinada con bases de datos vectoriales, alternativas que estamos evaluando en estos momentos en el Centro Tecnológico de las TICs de Murcia (CENTIC) en el ámbito del proyecto ContextLLM (https://centic.es/propyecto-context-llm/), proyecto de I+D que será subvencionado por el INFO y por fondos FEDER.
Sin embargo, una alternativa mucho más sencilla y sorprendentemente efectiva para mejorar el funcionamiento de ChatGPT (y cualquier otro modelo de lenguaje) es suministrarle textos de entrada específicos, con una estructura muy concreta que limita el rango de respuestas que da el modelo, de manera que se puede controlar (hasta cierto punto) tanto su contenido como su formato, su estilo, su longitud, etc. La sistematización de esta metodología ha dado lugar a la aparición de una nueva disciplina, de muy reciente creación, denominada prompt engineering, que podríamos traducir como ingeniería del texto de entrada, y que forma un compendio de técnicas, entre las que se pueden destacar:
- Zero-shot prompting & few-shot prompting: aunque los LLMs tienen una capacidad lógica limitada, son capaces de entender y ejecutar tareas sin haber sido específicamente entrenados para ello. Sin embargo, es mucho más efectivo suministrarle algún ejemplo, en forma de preguntas acompañadas de las correspondientes respuestas correctas, que el modelo es capaz de asimilar y luego generalizar en nuevas respuestas.
- Chain-of-thought (CoT): consiste en instar al LLM a que descomponga las respuestas que genera, de manera que vaya justificando paso a paso todo el razonamiento que ha empleado. Esto ayuda a mejorar la calidad de las respuestas, limitando la aparición de alucinaciones y sesgos.
- Knowledge generation: esta técnica permite suministrar directamente en el prompt un nuevo contexto al modelo, un nuevo conocimiento que se anexa al que ya poseía y que se usa a la hora de generar posteriores respuestas. Su principal inconveniente es el tamaño de ese contexto, que es limitado.
- Self-consistency: Es una variante de chain-of-thought en la que al LLM se le suministran varios pares de preguntas y respuestas que representan el proceso de razonamiento que subyace a las respuestas o salidas que se desea obtener. A continuación, se le hace una pregunta al modelo y se le pide que resuelva el problema siguiendo una línea de razonamiento similar.
- Self-reflection: esta técnica insta al LLM a analizar sus propias respuestas, de manera que pueda encontrar los errores que estén presentes, aprendiendo de ellos y generando posteriormente respuestas más precisas.
- Priming: consiste en mantener con el LLM una conversación previa, conteniendo distintas preguntas, afirmaciones y órdenes, con el objetivo de modular y orientar las subsecuentes respuestas del modelo en la dirección que nos interese.
En general, combinando las diversas técnicas de prompt engineering es posible mejorar sustancialmente la calidad de las respuestas de ChatGPT y de cualquier otra herramienta basada en LLMs, sin necesidad de tener conocimientos de programación, aunque hay que tener en cuenta que no se trata de una ciencia exacta, ya que un mismo prompt puede generar distintas respuestas en distintas situaciones o al usar distintos LLMs. Además, cabe esperar que conforme vayan mejorando los modelos de lenguaje y sean cada vez más potentes, será menos necesario diseñar prompts complejos para obtener buenas respuestas, y el prompt engineering irá poco a poco perdiendo utilidad. Pese a ello, en la actualidad es una herramienta muy práctica, y está previsto que lo siga siendo a corto plazo, y probablemente también a medio plazo.