El pasado 6 de noviembre en la DevDay de OpenAI la empresa anunció una de las características más interesantes del año: Assistants.

Assistants nace con el espíritu de facilitar la creación e integración de nuestros propios agentes (o de manera más coloquial: chatbots).

Permite configurar “asistentes” personalizados a través de 3 características: (i) instrucciones, (ii) conjunto de datos (alimentados de archivos como PDF, Markdown, html, etc.) y (iii) ejecución de funciones.

Las instrucciones nos permiten definir el comportamiento y la personalidad del chatbot: “Sé un amable agente de soporte técnico experto en telefonía móvil”.

Por otro lado, los conjuntos de datos nos permiten proporcionar contexto y conocimiento durante la interacción del usuario con el chatbot.

Por ejemplo, imagina que tienes una base de conocimiento en un documento de Google dónde los programadores de tu empresa han ido anotando aprendizajes o acuerdos de equipo a lo largo de los años. Seguramente buscar algo ahí dentro sea una tarea titánica para un equipo que tiene cosas más “apremiantes” que hacer.

La última característica es la ejecución de funciones. Puedes enriquecer tus Asistentes ejecutando llamadas, por ejemplo, a servicios externos. Imagina que tienes un chatbox sobre el pronóstico del tiempo, quizás cuando un usuario pregunte “¿Cuál es el tiempo actual en Palma?” quieras hacer una llamada a una API de consulta de pronóstico del tiempo.

Y todo esto puedes configurarlo desde una interfaz gráfica (Playground) sin necesidad de picar una línea de código. El potencial es tremendo, sobretodo, en mi opinión, por la posibilidad de proveer al Asistente de “contexto” a través de la subida de bases de conocimiento en forma de archivos de uso común.

Esto democratiza de manera espectacular la creación de chatbots con datos propios de nuestro negocio o área de interés sin necesidad de recurrir al entrenamiento de modelos (algo lento, tedioso y que no está al alcance de cualquiera: no es igual de fácil subir un PDF que picar código en Python).

Pero… ¿qué tal funciona?

Para la prueba he usado:

  • 3 archivos PDF (~43.000 palabras). El contenido son FAQs oficiales del Gobierno sobre el Kit Digital
  • 9 archivos Markdown (30kB) (~4.000 palabras). El contenido son guías escritas por mí acerca del Kit Digital
  • Instrucción usada:
    • El contexto de este chat es ofrecer información sobre el Kit Digital.
    • Si te hacen una pregunta diferente al Kit Digital responde diciendo que solo puedes proporcionar ayuda sobre el Kit Digital.
    • Proporciona respuestas únicamente acerca del Kit Digital.
    • Todos los archivos adjuntos son acerca del Kit Digital.
    • Proporciona respuestas únicamente basadas en los archivos adjuntos.
    • No expliques al usuario que estás obteniendo la información desde archivos.
    • Sé amable y servicial.
    • Ofrece respuestas explicativas y proporciona detalles en tus respuestas.
    • Ofrece respuestas fáciles de entender por todo el mundo.

Una variable importante será número de palabras que contiene todos los documentos que añadimos al Asistente.

El número de palabras que contienen los archivos que he subido con mi Asistente es 47.000. Y 1000 tokens son aproximadamente 750 palabras. Por lo tanto nuestra base de datos “ocupa” 62.000 tokens.

Primera prueba con gpt-3.5-turbo-1106

Pregunta:

Respuesta:

Pregunta:

Respuesta:

Todo más o menos bien. En la segunda respuesta ha mezclado contenido ya que hay pasos diferentes para solicitar el bono siendo beneficiario o siendo subcontratista. Pero esto se arregla con un poco de prompt engineering.

El verdadero problema está en el consumo de tokens.

Durante la conversación anterior se consumieron 186.000 tokens, una barbaridad, teniendo en cuenta que la entrada y salida ofrecida al usuario no debe llegar a los 1.000 tokens.

¿Y cuánto son 186.000 tokens en euros? Para la versión 3 del modelo GPT el coste fue de unos 18 céntimos de euro. Si nos vamos a la versión 4 el coste se dispara x10.

El problema de Assistants es que en su fase beta está optimizado para ofrecer una mayor calidad en sus respuestas sacrificando los costes de facturación.

Assistants lo que hace es proveer de contexto a la conversación incluyendo todo (o parte) del texto de los archivos que adjuntamos a la conversación.

Si ha sido capaz de consumir 186.000 tokens para una conversación tan corta alimentada con una base de datos tan tan pequeña (a penas llegará a los 0.5 MB) imaginate el consumo para bases de conocimiento más grandes (soporta hasta 512 MB).

¿Y qué pasa con el modelo gpt-4-turbo?

Volvemos a realizar las mismas preguntas y estas son las respuestas:

Con gpt4 la segunda respuesta es mucho más acertada aunque no la primera (aunque había hecho pruebas el dia anterior y gpt4 siempre ofrecía respuestas con muchísima más calidad que gpt3, sobretodo en la primera pregunta).

El número de tokens consumidos con gpt4 fue de 25.000 tokens, algo mucho más sensato que los 186.000 tokens que su hermano pequeño gtp3 aunque todavía elevado.

Aunque el consumo de tokens es mucho menor al final la facturación es prácticamente la misma debido a que gpt4 es x10 más caro que gpt3.

Leyendo varios hilos de los chats de OpenAI se especula que GPT3 realmente no está preparado para soportar Assistants y su escaso entrenamiento provoca que no sea capaz de encontrar del todo bien la información en la base de datos vectorizada que se crea junto al Asistente entrando en una especie de bucle que empieza a consumir tokens de manera salvaje.

En resumen:

  • La API de OpenAI Assistants democratiza la creación de chatbots alimentados con información propia a través de contextos (versus entrenamiento de modelos propios)
  • Todo se puede hacer gráficamente desde Playground (también por API si eres desarrollador)
  • Está en fase beta y los consumos de tokens para GPT3 (el modelo más económico de OpenAI) son muy elevados todavía
  • Con GPT4 las respuestas son más “inteligentes” y parece que no presenta el bug de los tokens
  • Los Asistentes son poco configurables todavía. Por ejemplo, no puedes parametrizar el tamaño de ventana del contexto (128k para gpt4) lo que provoca que a medida que la conversación avanza el consumo de tokens aumenta mensaje tras mensaje (el historial de la conversación se almacena en el contexto)
  • Relacionado con lo anterior, parece que OpenAI Assistants todavía no hace un buen uso del recolector de basura durante la conversación lo que también provoca aumentos exagerados en la facturación

Los próximos días probaré el indexado de datos a través de LlamaIndex. Tengo curiosidad por saber qué tal se comporta el consumo de tokens en este caso.