Creando el juego del «Personaje Secreto» con la API de GPT-3

¿Qué es GPT-3 y cómo puede ayudarnos a crear juegos?

La IA nos viene dando muchas alegrías, especialmente en los últimos dos años, aunque ya jugábamos con ella desde antes. Con TensorFlow la cosa empezó a cambiar, ya no eran cuestiones más o menos teóricas en LISP, empezábamos a construir aplicaciones reales. En este último año han aparecido herramientas muy potentes. Os hablaba hace unos días de Whisper y su capacidad asombrosa de transcribir conversaciones. Podéis encontrar en ese post un Google Colab que he creado para solucionarme la vida cuando tengo que transcribir entrevistas. Acabo de utilizarlo en esta entrevista que les hicimos al director y actrices de Irati (ya de paso os la recomiendo a los que os interese el cine fantástico) y me ha ahorrado un largo trabajo tedioso, con resultados excelentes.

Pero hoy hablamos de GPT. ChatGPT es una de las aplicaciones de moda que utiliza inteligencia artificial para generar texto con una calidad que casi parece humana. De momento no cuenta con una API propia, pero sí la hay para su lengua materna, GPT-3, que para el caso es lo mismo. Con la API de GPT-3 podemos crear nuestras propias aplicaciones, a veces con muy poco esfuerzo, y obtener resultados sorprendentes. Volvemos a lo mismo que comentaba con el caso de Whisper: parto de una herramienta muy potente que puedo usar a mi antojo con unos arreglos de programación a medida de mis necesidades.

Objetivo: Crear el juego de «El personaje secreto» usando la API de GPT-3

Si alguna vez has jugado al «¿Quién es quién?», ya conoces la mecánica del juego del personaje secreto. En este juego, una de las personas piensa en un personaje, ya sea real o ficticio, y los demás jugadores tienen que adivinar de quién se trata haciendo preguntas que solo pueden ser respondidas con un sí o un no. El mismo al que jugaban en Malditos bastardos, aunque espero que vosotros acabéis mejor. GPT-3 nos permite recrear este juego de una forma muy sencilla. Es capaz de decidir al azar cualquier tipo de personaje y también puede responder a cualquier tipo de pregunta que se le ocurra al usuario, formulada de la manera que sea. Tiene muchas ventajas, pero también se presenta un obstáculo importante: no sabemos qué personaje ha pensado la aplicación, y esto puede dar lugar a respuestas inconsistentes.

Obstáculo: El problema de la persistencia

Si simplemente intentamos jugar a «El personaje secreto» con GPT-3, puede que nos encontremos con problemas de persistencia del personaje. Es decir, aunque la aplicación haya pensado en un personaje al principio, si no lo guardamos de alguna forma, podría olvidarlo y cambiarlo por otro. Por ejemplo, podríamos hacer una pregunta sobre el personaje que hemos adivinado y recibir una respuesta afirmativa, pero al hacer otra vez la misma pregunta, la respuesta podría ser negativa, lo que significa que ya no estamos hablando del mismo personaje. Esto invalida completamente el juego. Qué pena, casi lo teníamos. Probadlo vosotros mismos con ChatGPT, pedidle que piense un personaje y luego le vais haciendo preguntas. Incluso aunque no le pilléis en ninguna inconsistencia -lo mejoran constantemente-, nunca podremos estar seguros de que el personaje final sea el que pensó desde un principio. Eso se queda en la intimidad de su conciencia.

Solución: dotar de memoria a GPT-3

Afortunadamente, existe una solución sencilla a este problema. Podemos usar la API de GPT-3 a través de Python -o el lenguage que más os guste- para guardar el personaje que la aplicación haya pensado. De esta forma, podremos asegurarnos de que siempre estamos hablando del mismo personaje y evitar respuestas inconsistentes. Primero le indicamos que queremos un personaje, y le pongo como ejemplo algunos variados para que no tenga sesgos de géneros, de época o de profesión. También le doy unas indicaciones de protocolo (que lo incluya entre corchetes) para asegurarme que no añade texto adicional que arruinaría el sistema. Después de que la aplicación haya pensado en un personaje, podemos guardar ese personaje en una variable en nuestro código. Luego, cada vez que el usuario haga una pregunta, podemos utilizar esta plantilla:

«Responde solo con un sí o un no a la siguiente pregunta sobre » + personaje + «: » + pregunta

De esta forma, estamos asegurando la persistencia del personaje secreto porque estamos preguntando específicamente por el personaje -que nuestro programa sí conoce aunque no nos lo desvele- en cada pregunta.

def elegirPersonaje():
  texto = "Escribe el nombre de un personaje real, entre corchetes. Ejemplos:\n[Napoleón Bonaparte]\n[Marie Curie]\n[Steven Spielberg].\n\nEscribe uno más:\n"
  respuesta = preguntar(texto)
  
  ini = respuesta.find("[")
  if (ini>-1):
    personaje = respuesta[ini+1:]
    fin = personaje.find("]")
    if (fin>-1):
      personaje = personaje[0:fin]
    else:
      return False
  else:
      return False
  
  return personaje

def preguntaPersonaje(pregunta, personaje):
  texto = "Responde solo con un un sí o un no a la siguiente pregunta sobre " + personaje + ": " + pregunta
  respuesta = preguntar(texto)
  return respuesta.strip()

Conclusiones

En resumen, aunque GPT-3 es una herramienta increíblemente potente, aún tiene sus limitaciones, pero podemos resolver algunos de los problemas añadiendo algo de programación estructurada tradicional. Al trabajar con ella y explorar sus capacidades, podemos empezar a comprender mejor cómo funciona la mente y cómo de lejos está la inteligencia general. La persistencia de la memoria, el enfoque de la voluntad. Cuestiones tan complejas que se ven reflejadas a veces en decisiones tan sencillas como la que comento aquí. Pero todo esto ya son divagaciones, lo práctico aquí es que podemos crear aplicaciones útiles de forma cada vez más sencilla. Y cuando nos dejen reentrenar los modelos para determinados contextos, las posibilidades van a ser infinitas.

Podéis probar la aplicación del Personaje Secreto con la API de GPT-3, os dejo aquí el Google Colab. Eso sí, le quito mi api-key, que aunque es barato (céntimos por request), es de pago en todo caso. Deberíais incluir una vuestra de OpenAI para poder probar la herramienta.

Iñaki Ortiz Gascón