La inteligencia artificial está en boca de todo el mundo desde que OpenAI sorprendiera al mundo en noviembre de 2022 con el lanzamiento de ChatGPT. Hasta ese momento, las aplicaciones de chatbots eran bastante más rudimentarias, no tenían capacidad para generar respuestas demasiado coherentes ni para mantener conversaciones y tampoco eran utilizadas de forma masiva por el público. OpenAI consiguió que más de un millón de usuarios se registrasen en su servicio pocos días tras la publicación de ChatGPT, un hito histórico para un producto de estas características. Una vez tenemos este contexto, a lo largo de este artículo vamos a explicar cómo crear nuestro propio chatbot con la API de OpenAI integrando estos modelos de lenguaje en nuestro código de una forma muy sencilla.
OpenAI Platform: el centro de mando
En primer lugar, necesitaremos registrarnos como desarrolladores en OpenAI Platform. Desde este portal podemos gestionar API Keys en diversos proyectos. Además de esto, OpenAI Platform ofrece herramientas útiles como la capacidad definir límites de uso de API y acceso a logs detallados para poder auditar las interacciones con los modelos en tiempo real.
Tras registrarnos, debemos configurar un método de pago, ya que aunque los costes de la API se han reducido significativamente en los últimos meses, no hay disponible un tier gratuito. OpenAI cobra por el uso de tokens, que es cómo el modelo procesa texto.
1. ¿Qué es un token?
Un token es una secuencia de texto que utilizan los modelos de generación de texto y representan secuencias comunes de caracteres. Cada petición a la API consume un número de tokens, de manera que a mayor número de tokens, mayor coste. Desde OpenAI Platform podemos acceder a un playground para hacer pruebas para ver cómo se descompone un texto en varios tokens con distintos modelos de GPT.
2. Precios en OpenAI API
Como hemos mencionado previamente, el coste de uso de la API varía en función de la cantidad de tokens procesados (tanto de petición como de respuesta). A esto debemos añadir otro factor: el modelo que estemos utilizando, ya que normalmente las revisiones más recientes de GPT-4 tienen un precio mayor por token que GPT-3.5-turbo, por ejemplo. OpenAI ofrece la opción de procesar datos de manera asíncrona con peticiones en lote, lo que resulta útil para tareas que no requieren respuestas inmediatas, reduciendo los costos ya que son peticiones con precios reducidos.
A continuación detallamos los precios actuales a la fecha de publicación del artículo, pueden variar con el tiempo así que la versión más reciente se encuentra disponible en su web.
3. Generando una API Key para el proyecto
Tras registrarnos y validar nuestra cuenta, ya podremos configurar una API Key en nuestro proyecto por defecto. La API Key es lo que utilizaremos en el código para autenticarnos y poder hacer peticiones a los modelos de OpenAI.
Es muy importante guardar la clave generada, ya que solo se podrá ver una única vez, desde el panel de control de OpenAI solo veremos los primeros y últimos caracteres de esta clave a modo de validación.
4. Puesta en marcha del chatbot con la API de OpenAI
Para crear este proyecto de chatbot vamos a utilizar el lenguaje de programación Python junto a las bibliotecas de OpenAI y Streamlit, que es un framework que permite crear aplicaciones web de una forma muy sencilla. Para ello instalamos los paquetes necesarios.
pip install openai streamlit
Una vez descargados, ya podemos empezar a trabajar. En primer lugar, comprobamos que hemos configurado todo correctamente con una llamada sencilla a la API. Creamos un fichero llamado app.py en el que escribiremos el siguiente contenido:
# app.py
import os
from openai import OpenAI
os.environ["OPENAI_API_KEY"] = "" # Introduce tu API Key aquí
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-4o", # Podemos consultar los modelos disponibles con client.models.list()
messages=[
{"role": "user", "content": "Escribe un chiste sobre inteligencia artificial"}
]
)
print(completion.choices[0].message.content)
Al ejecutar el código anterior, OpenAI nos devuelve el siguiente mensaje:
¿Por qué los robots nunca tienen miedo de perder sus trabajos?
Porque siempre saben cómo reiniciarse y empezar de nuevo.
5. Integración con Streamlit
Como mencionamos anteriormente, vamos a emplear Streamlit para construir la interfaz de interacción de nuestro chatbot. Streamlit es un framework para desarrollar aplicaciones web basadas en datos cuya API ofrece componentes interactivos para poder generar chats con el rol de usuario y de asistente, lo cual aprovecharemos para desplegar nuestro chatbot sin necesidad de utilizar configuraciones complejas ni front-end personalizados.
Para entender mejor el flujo de Streamlit, cada vez que interactuamos con un componente (botón, selector, cuadro de texto, etc.) se realiza un rerun y se vuelve a ejecutar todo el código desde el principio. Para mantener el histórico de mensajes del chat cuando esto ocurra, utilizaremos el mecanismo de session_state que permite guardar datos entre reruns.
Con estos conceptos ya podemos refactorizar el código anterior para utilizar Streamlit:
# app.py
import os
import streamlit as st
from openai import OpenAI
os.environ["OPENAI_API_KEY"] = "" # Introduce tu API Key aquí
client = OpenAI()
# Creamos un histórico para almacenar los mensajes
if "messages" not in st.session_state:
st.session_state.messages = []
# Mostramos los mensajes desde nuestro histórico cada vez que la aplicación realiza un rerun.
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# Input del usuario
if prompt := st.chat_input("Escribe un mensaje..."):
# Añadimos el mensaje al histórico
st.session_state.messages.append({"role": "user", "content": prompt})
# Mostramos el mensaje en el chat
with st.chat_message("user"):
st.markdown(prompt)
# Realizamos la petición al modelo
with st.chat_message("assistant"):
stream = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": m["role"], "content": m["content"]}
for m in st.session_state.messages
],
stream=True, # Aplicamos el argumento stream=True para obtener la respuesta según se va generando
)
response = st.write_stream(stream) # Y aquí escribimos la respuesta en tiempo real
# Añadimos la respuesta al histórico
st.session_state.messages.append({"role": "assistant", "content": response})
Ahora ya podremos lanzar nuestra aplicación desde la línea de comandos mediante streamlit run app.py, que por defecto nos abrirá el navegador en https://localhost:8501 y donde ya podremos interactuar con un chatbot utilizando la biblioteca de OpenAI.
Conclusión
Con estos simples pasos, hemos creado una versión funcional de un chatbot con la API de OpenAI y Streamlit en solo 40 líneas de código. Este enfoque permite crear aplicaciones rápidas y efectivas, accesibles incluso para perfiles con conocimientos limitados en desarrollo web.
¿Quieres seguir aprendiendo sobre Inteligencia Artificial? Suscríbete y aprende con nuestras formaciones sobre IA de nuestro Canal de YouTube.