De niño me decían que era muy preguntón y tenía la capacidad de acabar con la paciencia de cualquiera. Mis “¿por qué?” encadenados parecían no tener fin. Diría que eso no ha cambiado tanto pero he logrado controlarlo. Sé cuándo tengo que parar de preguntárselo a otros y a mi mismo para no entrar en un loop infinito. Me ocurre cuándo trabajo, también. ¿Por qué Ansible está dándo error de MaxConcurrentOperationsPerUser? ¿Por qué el MaxConcurrentOperations se está comportando como un counter secuencial? ¿Cómo está definido ese counter en Windows?…" aunque en este caso me pregunto a mí mismo y toca buscarse las propias respuestas.

Empezando a usar LLMs como asistentes de estudios, mi experiencia

Como entusiasta de la tecnología, SRE y Tech Lead estoy expuesto al actual frenesí con las IA generativas en la forma de los conocidos LLMs. No quiero entrar en plan gurú a ver cuánto es rompedor y cuánto es hype, y desde luego no voy a entrar en la filosofía sobre qué es la consciencia y el experimento de la habitación china. Voy a contar mi experiencia usandolo en un campo en el que no veo hablar tanto como en otros desde el lado de IT.

Sí, por supuesto que GPT3.5 me ha armado el esqueleto de scripts en bash y pwsh. Y claro que he cambiado los validadores de REGEX o JSON por prompts en los que le pido que me los haga para que den un resultado x. También le he preguntado cosas a ver si puedo librarme de googlearlas, o para sólo tener que googlear una confirmación (la palabra “alucina” no estaba tan de moda desde los 90). Pero otro uso en el que creo que le estoy sacando partido es en el estudio.

DISCLAIMER: Mi experiencia para este post se basa por completo en GPT 3.5 como LLM representativo.

Aprovechando una herramienta

Lleno de curiosidad, me animé a probar a usar LLM como apoyo de estudios, para ayudarme a ahorrar tiempo o emplearlo mejor. Quiero ver qué puede hacer esta herramienta. No quiero tenerle miedo, quiero ver como puede facilitarme las cosas. Ojo, los apuntes y la documentación oficial siguen siendo mi fuente primaria, aún compruebo y expando conocimientos concretos yendo a buscadores. A GPT-3.5 lo he aprovechado para tres cosas valiosas: empezar por conceptos más difusos e ir profundizando con tanto ir hacia atrás como sea necesario (esa temible cadena de “¿por qué?” de los niños), pedirle ejercicios sencillos de refuerzo o práctica personalizados y conversar usandolo de patito de goma 3.5 que además contesta para afianzar aún más conocimientos.

De fuzzy a concreto, con tanto “¿por qué?” como haga falta

Ya lo dije, creo que lo de “preguntón” se traduce en que tengo tendencia a querer ir a lo más elemental cada vez que aprendo algo (¿igual explica incluso mi obsesión por la etimología?). Aprendí hace muchos años que el límite de “¿por qué?” al final de cada explicación que me daba alguien estaba entre los tres y los cuatro antes de hacerle perder los nervios. GPT 3.5 aún no ha perdido la paciencia conmigo. ¿Alguna vez has estado estudiando algo y te das cuenta de que quieres más base teórica? Bienvenido a la sensación que tengo demasiado a menudo. Con GPT-3.5 puedo hacer preguntas y como mínimo me señala en la dirección adecuada en la que buscar.

También sirve para ir a cosas más concretas, por ejemplo empezar hablando de overriding en herencia de Python y acabar con ejemplos de overload de operadores haciendo override de su magic function, mediante un diálogo en lenguaje natural y no una cadena de búsquedas o un pozo de clicks en links de Stack Overflow.

Ejercicios de refuerzo a la carta

No lo he probado con ejercicios complejos porque no me fío y porque esos quiero que me los hagan humanos con mala intención que vayan a matar. Pero cuándo después de estudiar algo quiero afianzar el concepto, no hay nada mejor que pedir ejercicios a la carta. “GPT-3.5, dame 10 ejercicios con lambda functions. Vale, hazlos un poco más complicados, mézclalos con uso de funciones como map o filter. Este se me ha atascado un poco, ayúdame a resolverlo”.

LLM exercises

Rubberduck

Se parece al primer punto, pero quiero hacer una distinción porque aquí de lo que se trata es de entablar un diálogo para mejorar la comprensión de algo, o para resolver un problema sin pedir la solución. Algo del estilo: “Voy a pegar un snippet de código, no quiero que me digas como funciona aún. Voy a ir explicándolo yo paso a paso y vas a ir preguntandome para que mejore mi explicación”

LLM rubber duck 1

LLM rubber duck 2

Aquí se comporta como un buen rubber duck, que además da correcciones. Podemos ver que no soy tan buen profesor, y anima a ser más cuidadoso con el uso de términos. Tiene razón, en las list comprehensions no hay “function calls”, hay operaciones, que pueden incluir llamadas a funciones. También es verdad que en seguida vuelve a su función de “yo soy quién da las respuestas”, si fuera humano parecería incluso petulante.

Los riesgos

Todo eso está muy bien, pero además de las ventajas toca hablar de las cosas que GPT 3.5 no hace tan tan bien. Me he encontrado con algunos riesgos que pueden restar valor al aprendizaje enfocado con apoyo de un LLM. Las he separado en un par de categorías:

El LLM se equivoca, directamente

No todas las respuestas son correctas o reales, o las que te daría si vuelves a preguntar o afinas el prompt. Por eso digo que lo ideal es utilizarlo para afianzar y profundizar conceptos vistos en otro tipo de material. También puede equivocarse al corregir tus respuestas, así que lo ideal es pedirle ejercicios que se puedan comprobar de otra manera (esto es bastante sencillo estudiando lenguajes de programación, por suerte)

LLM hallucination1

La mayoría de las veces, con un prompt que pida reevaluar la respuesta, corregirá el error. ¡Pero no me fiaría!

El LLM propaga los sesgos del contenido con el que ha sido entrenado

¿Por qué iba GPT 3.5 a mostrar en sus ejemplos lo más reglados posibles ejemplos de prácticas no muy recomendadas? Mi respuesta para ello es que se basa en el contenido con el que el LLM ha sido entrenado. Es decir, el contenido generado por humanos, y me temo que mucho de ese contenido no siga las mejores prácticas.

LLM bias

Aquí podemos ver como GPT 3.5 usa en el ejemplo from module import class, que es totalmente válido pero no recomendado ya que se importa en el mismo namespace actual, y puede llevar a confusión cuando no directamente a colisión. (¿Y si nosotros habíamos definido nuestra propia reduce?). Sin entrar a valorar, porque estoy seguro de que sería un debate interesante lo de cuándo usar from x import y lo que está claro es que no es el mejor ejemplo a dar para alguien que se está aproximando al lenguaje.

En la reciente Tecnologica Santa Cruz, Mariano Sigman decía como única tésis de su charla que la IA es una creación eminentemente humana, y estoy de acuerdo. Sin querer, por el material de entrenamiento que les pasamos, los LLM muestran un lado muy humano con nuestros mismos sesgos cognitivos y errores.

Excesiva dependencia

En esto voy a ser old-school pero el mayor riesgo para mí es depender demasiado de una tecnología concreta. Puede ayudarnos a completar tareas más rápido, o al menos a encaminarlas. Eso está bien. Pero tenemos que seguir valorando nuestra propia capacidad para pensar, para aburrirnos de estudiar y para sufrir estando atascados hasta comprender algo o dar con la solución a algo. Ese tiempo es valioso. Si no sirve para nada más, por lo menos entrena la paciencia y la tolerancia a la frustración. Y eso es valioso para cualquier trabajo, pero me atrevo a pensar que aún más para IT. Este riesgo entra en lo casi filosófico pero realmente es algo que se ha visto en otras ocasiones. Una tecnología cambia nuestros hábitos e incluso nuestras capacidades. Hay bastantes pistas de que estamos perdiendo capacidad de atención debido a la tecnología.

Conclusiones

La principal es que el post no pretende ser una comparativa ni una investigación en profundidad y se basa sólo en mi experiencia con un subconjunto bastante limitado (aunque representativo) de los LLM de texto. La segunda es que esto se está moviendo muy rápido. Aún así voy a intentar comentar algunas cosas que creo son generales. Si quieres aprender desde cero o reforzar conocimientos sirve, pero en ambos casos vas a tener que comprobar todo. Para mí lo ideal es usarlo para afianzar conceptos que ya están estudiados en otro lugar más… confiable. También para generar primers y recordatorios rápidos, así como ejercicios que ayuden a afianzar los conceptos.

Y por último dejo por aquí una cita de película que resume lo que pienso de poder preguntar a una máquina por qués en lenguaje natural ad nauseaum sin que nada ni nadie pierda la paciencia.

Watching John with the machine, it was suddenly so clear. The terminator would never stop. It would never leave him, and it would never hurt him, never shout at him, or get drunk and hit him, or say it was too busy to spend time with him. It would always be there. And it would die to protect him. Of all the would-be fathers who came and went over the years, this thing, this machine, was the only one who measured up. In an insane world, it was the sanest choice –Sarah Connor (Terminator 2)