Tutorial: Cómo usar la API de OpenAI
¿Quieres usar la API de OpenAI? En este post te mostraremos cómo usarla en Python. Verás cómo configurarla y usar ChatCompletion para generar respuestas a partir de un contexto. ¿Te animas?
Bienvenidos a este tutorial de cómo usar la API de OpenAI. Veremos conceptos básicos de la API, cómo configurarla y el uso de los modelos que OpenAI nos ofrece. Usando la API, podemos desarrollar aplicaciones de manera sencilla, por ejemplo, un ChatBot personalizado.
Spoiler: en el siguiente tutorial vamos a desarrollar un ChatBot persanalizado. Suscríbete para recibir un correo en cuánto lo publiquemos!
Este tutorial está dividido en 2 partes.
- Parte 1: API de OpenAI. Veremos a grandes rasgos qué es la API de OpenAI y te mostraremos los pasos que debes seguir para configurar todo lo necesario para usar la API.
- Parte 2: Uso de la API. Te mostraremos lo sencillo que es usar la API. Nos enfocaremos en
ChatCompletion
, un modelo basado en conversación y que recibe inputs y genera outputs en formato de chat.
Sin más preámbulo, ¡Comenzamos con el tutorial!
Puedes encontrar el código que explicamos en este tutorial en el siguiente link:
> Notebook Google Colab
API de OpenAI
La API de OpenAI nos permite crear aplicaciones increíbles con solo unas pocas líneas de código. Esta API es una interfaz que nos permite acceder a los modelos de inteligencia artificial más avanzados de OpenAI, como GPT-4, DALL-E, y Whisper. Con la API podemos generar texto, imágenes, y transcribir audio a partir de llamados a la API, pagando un costo cuyo detalle lo puedes ver en este link.
Para usar la API necesitas tener una cuenta y generar una clave de acceso (o API Key). Obtener la cuenta es simple: debes ir openai.com, luego seleccionar Sign Up, seguir los pasos que te indican, y posteriormente verificar la cuenta. Luego, debes asegurarte de tener un monto de crédito. Esto lo puedes verificar haciendo click sobre el ícono de tu cuenta arriba a la derecha, y dirigirte a Manage Account>Usage. Al momento de escribir este post, OpenAI está regalando $5 dólares de crédito a los nuevos usuarios para ser usados los 3 primeros meses. Si no es tu caso, debes configurar un método de pago en Manage Account>Billing. Una vez que tengas todo esto configurado, ya podrías generar la API Key.
La API Key es un código secreto que nos identifica como usuarios autorizados. Obtenerla es sencillo y se puede hacer en Manage Account>API Keys. Desde aquí puedes haces click en + Create secret key
, donde opcionalmente puedes darle un nombre (muy recomendable). Este paso te dará un código alfanumérico partiendo con el texto sk-
. Es importante que cuides con quien compartes la clave, ya que es una identificación personal y puede ser usada para acceder a tus datos o consumir tus créditos.
Para este tutorial, vamos a guardar la llave generada en un texto plano llamado y lo llamaremos key.txt
.
Parte 2: Uso de la API
Usaremos Google Colab para usar la API en Python. Google Colab es un entorno de programación en la nube que nos permite ejecutar código Python en un navegador web. Además, es gratuito y fácil de usar, y nos ofrece recursos computacionales como GPUs y TPUs para acelerar nuestros cálculos.
Para empezar a usar Google Colab tienes que abrir un nuevo cuaderno o notebook. Un cuaderno es un documento que combina texto y código, y para generar uno nuevo lo puedes hacer desde tu Google Drive a través de +New>More>Google Colaboratory. Una vez que tengas tu nuevo notebook, debes cargar el archivo plano key.txt
en los paneles de la izquierda.
El primer paso es instalar la librería de openai
, que es el paquete oficial de Python para interactuar con la API. Para instalarla debes escribir el siguiente comando en una celda de código y ejecutarlo:
!pip install openai
El signo de exclamación al principio indica que se trata de un comando del sistema operativo, y no de Python. El comando pip
es un gestor de paquetes que nos permite instalar librerías externas.
Una vez instalado la librería de openai
, tenemos que importarla en nuestro cuaderno con el siguiente comando:
import openai
Luego tienes que autenticarte con tu clave de acceso. Para ello debes usar la función openai.api_key
, que recibe como argumento la clave que guardaste en key.txt
. Para eso debes escribir y ejecutar el siguiente código en una celda de código:
key = open('key.txt').read()
openai.api_key = key
Una vez autenticados, podemos hacer llamados a la API y usar los distintos tipos modelos que OpenAI nos ofrece. En este tutorial vamos a usar el modelo ChatCompletion, que permite generar respuestas coherentes y creativas a partir de un contexto conversacional. Para usar el modelo ChatCompletion
vamos a usar el comando openai.ChatCompletion.create
, que recibe como argumentos los siguientes parámetros:
- model: identificador del modelo que queremos usar. La lista de modelos compatibles los podrás encontrar en la documentación de OpenAI. Para este tutorial te recomendamos usar
gpt-3.5-turbo
. - messages: parámetro principal que refleja la conversación que se ha llevado hasta el momento. Este es un arreglo de mensajes, donde cada uno tiene un role y un content. Ese último es el contenido del mensaje, y el primero es quién ha emitido el mensaje. Al momento de publicar este tutorial, existen tres roles: system, assistant, y user. Los mensajes que envía el usuario tienen asignado el rol de user. Por otro lado, los generados por el bot tienen el rol de assistant. Finalmente, los mensajes con rol system, establecen el comportamiento que el assistant tiene durante la conversación. Un ejemplo sencillo de este parámetro es el siguiente:
messages=[
{"role": "system", "content": "Eres un asistente experto en historia del fútbol."},
{"role": "user", "content": "¿Quién ganó el mundial en 2022?"},
{"role": "assistant", "content": "Argentina ganó la Copa del Mundo en 2022."},
{"role": "user", "content": "Dónde se jugó?"}
]
En el ejemplo, el primer mensaje del arreglo es del system, en donde le indica al assistant que debe actuar como un asistente experto en historia del fútbol cuando hable con el user. Luego, la conversación comienza con un mensaje del user preguntándole al assistant quién ganó el mundial en el 2022. El tercer mensaje es del assistant, donde entrega la respuesta a la pregunta del assistant. Finalmente, la conversación termina con un mensaje del user preguntando dónde fue jugado ese mundial.
Si le entregamos esta lista de mensajes a ChatCompletion
y hacemos llamado a la API, ésta entregaría de vuelta un nuevo mensaje con rol de assistant y content conteniendo la respuesta a la pregunta del user, considerando el contexto entregado en los mensajes anteriores.
ChatCompletion
también recibe otros parámetros que permiten limitar el largo del mensaje de vuelta y la variabilidad de este. Por ejemplo:
- max_tokens: el número máximo de tokens o palabras que queremos generar. Un token es una unidad mínima de significado en el lenguaje natural.
- temperature: un valor entre 0 y 2 que controla la aleatoriedad o creatividad de la generación. Un valor cercano a 0 genera respuestas más predecibles y conservadoras, mientras que un valor cercano a 1 genera respuestas más variadas e innovadoras.
Existen más parámetros que puedes revisar en detalle en la documentación. Para este tutorial solamente usaremos los 4 descritos más arriba con la siguiente configuración:
model = 'gpt-3.5-turbo'
max_tokens = 400
temperature = 1.0
Veamos un ejemplo de cómo usar el modelo ChatCompletion
. Supongamos que queremos crear un ChatBot que simule ser un asistente virtual de viajes para que nos ayude a planificar nuestro próximo destino. Para ello vamos a escribir los contents de los primeros mensajes de la conversación:
content_system = 'Eres un asistente virtual de viajes y que ayuda a pla nificar próximos vuelos'
content_assistant = 'Hola, soy tu asistente virtual de viajes. ¿Qué tipo de viaje te gustaría hacer?'
content_user = 'Quiero viajar a españa. Sugiere ciudades.'
Luego, llamamos a la API por medio de open.ChatCompletion.create
usando los parámetros y contents de más arriba:
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
max_tokens = 400,
temperature = 1.0,
messages=[
{"role": "system", "content": content_system},
{"role": "assistant", "content": content_assistant},
{"role": "user", "content": content_user}
]
)
El código anterior genera una respuesta de la API y el resultado se almacena en la variable response
, que es un diccionario que contiene diferentes campos. El campo que nos interesa es choices, un arreglo de posibles respuestas generadas por el modelo. Analicemos lo que contiene:
[<OpenAIObject at 0x7f0dfbc63560> JSON:
{ "message":{
"role": "assistant",
"content": "\u00a1Genial! Espa\u00f1a es un pa\u00eds con mucha historia
y ciudades maravillosas. Te sugiero algunas ciudades que podr\u00edas
visitar:\n\n1. Madrid: la capital de Espa\u00f1a es una ciudad
cosmopolita y vibrante, llena de arte y cultura. Podr\u00edas visitar
lugares como el Museo del Prado, el Palacio Real o el barrio de la
Latina para probar la gastronom\u00eda local.\n\n2. Barcelona: otra
ciudad imprescindible, famosa por la obra de Gaud\u00ed como la Sagrada
Familia o el Parque G\u00fcell. Adem\u00e1s, su barrio g\u00f3tico es un
lugar lleno de encanto.\n\n3. Sevilla: situada en el sur de Espa\u00f1a,
es una ciudad conocida por su flamenco, sus festividades y la catedral
de Santa Mar\u00eda de la Sede, una impresionante obra
arquitect\u00f3nica.\n\n4. Valencia: es una ciudad costera donde se
mezcla modernidad y tradici\u00f3n. El centro hist\u00f3rico con su
catedral y la Ciudad de las Artes y las Ciencias son algunos de los
lugares que no te puedes perder.\n\n5. Granada: con su impresionante
Alhambra, un palacio y fortaleza construido por los musulmanes, es una
ciudad con mucha historia.\n\nEstos son solo algunos ejemplos, pero hay
muchas otras ciudades fabulosas para visitar en Espa\u00f1a seg\u00fan
tus intereses. \u00bfTe puedo ayudar en algo m\u00e1s?"
},
"finish_reason": "stop",
"index": 0 }
]
Según el código, la respuesta de la API es un JSON que contiene un message
con el rol de assistant, y otros dos campos que indican la razón de detención de la generación de texto (finish_reason
) y el index
del mensaje. En nuestro caso nos enfocaremos en el message
y vamos a revisar su contenido ejecutando el siguiente código:
>>>print(response['choices'][0]['message']['content'])
¡Genial! España es un destino increíble. Hay muchas ciudades hermosas para
visitar, cada una con su propio encanto y atractivo. Algunas ciudades que te
sugiero son:
1. Madrid: la capital española es una ciudad vibrante y cosmopolita. Aquí
podrás visitar el Museo del Prado, el Palacio Real y el Parque del Retiro.
2. Barcelona: esta ciudad es conocida por su modernismo y sus obras maestras
arquitectónicas de Gaudí, como La Sagrada Familia y el Parque Güell.
3. Sevilla: es la cuarta ciudad más grande de España y se encuentra en el
corazón de Andalucía. Aquí podrás visitar la Catedral de Sevilla, la Giralda
y el Alcázar de Sevilla.
4. Valencia: esta ciudad posee una impresionante Ciudad de las Artes y las
Ciencias, una catedral gótica y playas de arena dorada.
5. Granada: cuenta con la impresionante Alhambra, patrimonio mundial de la
UNESCO, así como con barrios históricos con muchas tiendas, restaurantes y
bares de tapas.
¿Te gustaría saber más sobre alguna de estas ciudades o quizás necesitas
ayuda para planificar tu viaje? Estoy aquí para ayudarte en todo lo que
necesites.
¡Felicitaciones, has creado tu primer llamado a la API de OpenAI! Coméntanos cómo te fue y no dudes en escribir cualquier duda que tengas.
¡No olvides suscribirte! En un próximo tutorial enseñaremos a desarrollar tu propio ChatBot!