Saltar al contenido principal
InicioTutorialesInteligencia Artificial (IA)

Uso de GPT-3.5 y GPT-4 mediante la API OpenAI en Python

En este tutorial, aprenderás a trabajar con el paquete OpenAI Python para mantener conversaciones programáticamente con ChatGPT.
Actualizado feb 2024  · 14 min leer

ChatGPT es un innovador modelo de lenguaje de gran tamaño para generar texto. Ya está cambiando la forma en que escribimos casi todo tipo de textos, desde tutoriales como éste, hasta descripciones de productos autogeneradas, resultados del motor de búsqueda de Bing y docenas de casos de uso de datos, como se describe en la hoja de trucos ChatGPT para la ciencia de datos.

Para un uso interactivo, la interfaz web de ChatGPT es ideal. Sin embargo, OpenAI (la empresa que está detrás de ChatGPT) también tiene una interfaz de programación de aplicaciones (API) que te permite interactuar con ChatGPT y sus otros modelos utilizando código.

En este tutorial, aprenderás a trabajar con el paquete openai de Python para mantener conversaciones programáticamente con ChatGPT.

Ten en cuenta que OpenAI cobra por utilizar la API GPT. (A veces se proporcionan créditos gratuitos a los nuevos usuarios, pero no es transparente quién obtiene el crédito ni cuánto durará este trato). Cuesta 0,002 $ / 1000 tokens, donde 1000 tokens equivalen a unas 750 palabras. Ejecutar todos los ejemplos de este tutorial una vez debería costar menos de 2 céntimos de euro (pero si vuelves a ejecutar tareas, se te cobrará cada vez).

¿Cuándo debes utilizar la API en lugar de la Interfaz Web?

La aplicación web ChatGPT es una gran interfaz para los modelos GPT. Sin embargo, si quieres incluir la IA en una canalización de datos o en un software, la API es más apropiada. Algunos posibles casos de uso para los profesionales de los datos son:

  • Extraer datos de una base de datos o de otra API, y luego pedir a GPT que los resuma o genere un informe al respecto
  • Integrar la funcionalidad GPT en un cuadro de mandos para proporcionar automáticamente un resumen de texto de los resultados
  • Proporcionar una interfaz de lenguaje natural a tu data mart
  • Realizar investigaciones extrayendo artículos de revistas a través del paquete scholarly (PyPI, Conda), y conseguir que GPT resuma los resultados.

Crear una cuenta de desarrollador de OpenAI

Para utilizar la API, tienes que crear una cuenta de desarrollador en OpenAI. Necesitarás tener a mano tu dirección de correo electrónico, tu número de teléfono y los datos de tu tarjeta de débito o crédito.

Sigue estos pasos:

  1. Ve a la página de registro de la API.
  2. Crea tu cuenta (tendrás que facilitar tu dirección de correo electrónico y tu número de teléfono).
  3. Ve a la página de claves de la API.
  4. Crea una nueva clave secreta.
  5. Haz una copia de esta clave. (Si la pierdes, borra la clave y crea una nueva).
  6. Ve a la página Métodos de pago.
  7. Haz clic en "Añadir método de pago" e introduce los datos de tu tarjeta.

Almacena de forma segura las credenciales de tu cuenta

¡La clave secreta debe mantenerse en secreto! De lo contrario, otras personas podrán utilizarla para acceder a la API, y tú pagarás por ello. Los siguientes pasos describen cómo almacenar de forma segura tu clave utilizando DataCamp Workspace. Si utilizas una plataforma diferente, consulta la documentación de dicha plataforma. También puedes pedir consejo a ChatGPT. Aquí tienes una sugerencia:

> Eres un experto en seguridad informática. Estás hablando con un científico de datos. Explica las mejores prácticas para almacenar de forma segura las claves privadas utilizadas para acceder a la API.

  1. En tu workspace, haz clic en Integrations
  2. Pulsa el botón más "Create integration"
  3. Selecciona una integración de "Environment Variables"
  4. En el campo "Name", escribe "OPENAI". En el campo "Value", introduce tu clave secreta
  5. Haz clic en "Create", y conecta la nueva integración

Configurar Python

Para utilizar GPT a través de la API, necesitas importar los paquetes Python os y openai.

Si utilizas un Jupyter Notebook (como DataCamp Workspace), también es útil importar algunas funciones de IPython.display.

Un ejemplo también utiliza el paquete yfinance para recuperar los precios de las acciones.

# Import the os package
import os

# Import the openai package
import openai

# From the IPython.display package, import display and Markdown
from IPython.display import display, Markdown

# Import yfinance as yf
import yfinance as yf

La otra tarea de configuración es poner la variable de entorno que acabas de crear en un lugar en el que el paquete openai pueda verla.

# Set openai.api_key to the OPENAI environment variable
openai.api_key = os.environ["OPENAI"]

El patrón de código para llamar a GPT a través de la API

El patrón de código para llamar a la API de OpenAI y obtener una respuesta de chat es el siguiente:

response = openai.ChatCompletion.create(
              model="MODEL_NAME",
              messages=[{"role": "system", "content": 'SPECIFY HOW THE AI ASSISTANT SHOULD BEHAVE'},
                        {"role": "user", "content": 'SPECIFY WANT YOU WANT THE AI ASSISTANT TO SAY'}
              ])

Aquí hay varias cosas que desentrañar.

Nombres de los modelos de API de OpenAI para GPT

Los nombres de los modelos aparecen en la página Descripción general de los modelos de la documentación para desarrolladores. En este tutorial, utilizarás gpt-3.5-turbo, que es el último modelo utilizado por ChatGPT que tiene acceso público a la API. (Cuando esté ampliamente disponible, querrás cambiar a gpt-4.)

Tipos de mensajes GPT de la API OpenAI

Hay tres tipos de mensajes documentados en la Introducción a la documentación del Chat:

  • Los mensajes system describen el comportamiento del asistente de IA. Un mensaje system útil para los casos de uso de la ciencia de datos es "You are a helpful assistant who understands data science."
  • Los mensajes user describen lo que quieres que diga el asistente de IA. A lo largo de este tutorial veremos ejemplos de mensajes de usuario
  • Los mensajes assistant describen respuestas anteriores en la conversación. Veremos cómo mantener una conversación interactiva en tareas posteriores

El primer mensaje debe ser un mensaje del sistema. Los mensajes adicionales deben alternarse entre el usuario y el asistente.

Tu primera conversación: Generar un conjunto de datos

Generar conjuntos de datos de muestra es útil para probar tu código con distintos escenarios de datos o para demostrar el código a otras personas. Para obtener una respuesta útil de GPT, tienes que ser preciso y especificar los detalles de tu conjunto de datos, incluyendo:

  • el número de filas y columnas
  • los nombres de las columnas
  • una descripción de lo que contiene cada columna
  • el formato de salida del conjunto de datos

Aquí tienes un ejemplo de mensaje de usuario para crear un conjunto de datos.

Create a small dataset about total sales over the last year. 
The format of the dataset should be a data frame with 12 rows and 2 columns. 
The columns should be called "month" and "total_sales_usd". 
The "month" column should contain the shortened forms of month names 
from "Jan" to "Dec". The "total_sales_usd" column should 
contain random numeric values taken from a normal distribution 
with mean 100000 and standard deviation 5000. Provide Python code to 
generate the dataset, then provide the output in the format of a markdown table.

Incluyamos este mensaje en el patrón de código anterior.

# Define the system message
system_msg = 'You are a helpful assistant who understands data science.'

# Define the user message
user_msg = 'Create a small dataset about total sales over the last year. The format of the dataset should be a data frame with 12 rows and 2 columns. The columns should be called "month" and "total_sales_usd". The "month" column should contain the shortened forms of month names from "Jan" to "Dec". The "total_sales_usd" column should contain random numeric values taken from a normal distribution with mean 100000 and standard deviation 5000. Provide Python code to generate the dataset, then provide the output in the format of a markdown table.'

# Create a dataset using GPT
response = openai.ChatCompletion.create(model="gpt-3.5-turbo",
                                        messages=[{"role": "system", "content": system_msg},
                                         {"role": "user", "content": user_msg}])

Comprueba que la respuesta de GPT es OK

Las llamadas a la API son "arriesgadas" porque pueden surgir problemas ajenos a tu portátil, como problemas de conectividad a Internet, o un problema con el servidor que te envía los datos, o porque te quedaste sin crédito API. Debes comprobar que la respuesta que obtienes es correcta.

Los modelos GPT devuelven un código de estado con uno de cuatro valores, documentados en la sección Formato de respuesta de la documentación del Chat.

  • stop: la API devolvió el resultado completo del modelo
  • length: resultado incompleto del modelo debido al parámetro max_tokens o al límite de tokens
  • content_filter: contenido omitido debido a una marca de nuestros filtros de contenido
  • null: respuesta de la API aún en curso o incompleta

La API de GPT envía datos a Python en formato JSON, por lo que la variable de respuesta contiene listas y diccionarios profundamente anidados. ¡Es un poco pesado trabajar con él!

Para una variable de respuesta llamada response, el código de estado se almacena en el siguiente lugar.

response["choices"][0]["finish_reason"]

Extraer el mensaje del asistente de IA

Dentro de la variable de respuesta está el texto que pedimos a GPT que generara. Por suerte, siempre está en el mismo sitio.

response["choices"][0]["message"]["content"]

El contenido de la respuesta puede imprimirse como de costumbre con print(content), pero es contenido Markdown, que los cuadernos Jupyter pueden renderizar, mediante display(Markdown(content))

Here's the Python code to generate the dataset:

import numpy as np
import pandas as pd
# Set random seed for reproducibility
np.random.seed(42)
# Generate random sales data
sales_data = np.random.normal(loc=100000, scale=5000, size=12)
# Create month abbreviation list
month_abbr = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
# Create dataframe
sales_df = pd.DataFrame({'month': month_abbr, 'total_sales_usd': sales_data})
# Print dataframe
print(sales_df)

And here's the output in markdown format:

| month | total_sales_usd |

|-------|----------------|

| Jan | 98728.961189 |

| Feb | 106931.030292 |

| Mar | 101599.514152 |

| Apr | 97644.534384 |

| May | 103013.191014 |

| Jun | 102781.514665 |

| Jul | 100157.741173 |

| Aug | 104849.281004 |

| Sep | 100007.081991 |

| Oct | 94080.272682 |

| Nov | 96240.993328 |

| Dec | 104719.371461 |

Utiliza una función auxiliar para llamar a GPT

Necesitas escribir un montón de código repetitivo para hacer estas tres simples cosas. Es útil disponer de una función wrapper que elimine las partes aburridas. De este modo, podemos centrarnos en los casos de uso de la ciencia de datos.

Esperemos que OpenAI mejore la interfaz de su paquete Python para que este tipo de cosas estén integradas. Mientras tanto, siéntete libre de utilizarlo en tu propio código.

La función toma dos argumentos.

  • system: una cadena que contiene el mensaje del sistema.
  • user_assistant: una matriz de cadenas que alternan el mensaje del usuario y el mensaje del asistente.

El valor de retorno es el contenido generado.

def chat(system, user_assistant):
  assert isinstance(system, str), "`system` should be a string"
  assert isinstance(user_assistant, list), "`user_assistant` should be a list"
  system_msg = [{"role": "system", "content": system}]
  user_assistant_msgs = [
      {"role": "assistant", "content": user_assistant[i]} if i % 2 else {"role": "user", "content": user_assistant[i]}
      for i in range(len(user_assistant))]

  msgs = system_msg + user_assistant_msgs
  response = openai.ChatCompletion.create(model="gpt-3.5-turbo",
                                          messages=msgs)
  status_code = response["choices"][0]["finish_reason"]
  assert status_code == "stop", f"The status code was {status_code}."
  return response["choices"][0]["message"]["content"]

Un ejemplo de uso de esta función es

response_fn_test = chat("You are a machine learning expert.",["Explain what a neural network is."])

display(Markdown(response_fn_test))
A neural network is a type of machine learning model that is inspired by the architecture of the human brain. It consists of layers of interconnected processing units, called neurons, that work together to process and analyze data.

Each neuron receives input from other neurons or from external sources, processes that input using a mathematical function, and then produces an output that is passed on to other neurons in the network.

The structure and behavior of a neural network can be adjusted by changing the weights and biases of the connections between neurons. During the training process, the network learns to recognize patterns and make predictions based on the input it receives.

Neural networks are often used for tasks such as image classification, speech recognition, and natural language processing, and have been shown to be highly effective at solving complex problems that are difficult to solve with traditional rule-based programming methods.

Reutilizar respuestas del Asistente de IA

En muchas situaciones, desearás entablar una conversación más larga con la IA. Es decir, envías una solicitud a GPT, recibes una respuesta y envías otra solicitud para continuar el chat. En este caso, tienes que incluir la respuesta anterior de GPT en la segunda llamada a la API, para que GPT tenga el contexto completo. Esto mejorará la precisión de la respuesta y aumentará la coherencia en toda la conversación.

Para reutilizar el mensaje de GPT, lo recuperas de la respuesta y luego lo pasas a una nueva llamada al chat.

Ejemplo: Analizar el conjunto de datos de la muestra

Intentemos calcular la media de la columna de ventas del conjunto de datos generado anteriormente. Ten en cuenta que, como la primera vez no utilizamos la función chat(), tenemos que utilizar el código de subconjunto más largo para llegar al texto de respuesta anterior. Si utilizas chat(), el código es más sencillo.

# Assign the content from the response in Task 1 to assistant_msg
assistant_msg = response["choices"][0]["message"]["content"]

# Define a new user message
user_msg2 = 'Using the dataset you just created, write code to calculate the mean of the `total_sales_usd` column. Also include the result of the calculation.'

# Create an array of user and assistant messages
user_assistant_msgs = [user_msg, assistant_msg, user_msg2]

# Get GPT to perform the request
response_calc = chat(system_msg, user_assistant_msgs)

# Display the generated content
display(Markdown(response_calc))
Sure! Here's the code to calculate the mean of the `total_sales_usd` column: 

```python 
mean_sales = sales_df['total_sales_usd'].mean() 
print("Mean sales: $", round(mean_sales, 2)) 
``` 

And here's the output of this code: 

``` 
Mean sales: $ 100077.57 
``` 

Therefore, the mean of total sales over the last year is about $100,077.57. 

Utilizar GPT en una canalización

Una gran ventaja de utilizar la API frente a la interfaz web es que puedes combinar GPT con otras API. Recoger datos de una o varias fuentes y aplicarles IA es un potente flujo de trabajo.

Aplicación de la IA GPT a los datos meteorológicos

Aquí, obtendremos una previsión meteorológica con el paquete weather2 (PyPI) y utilizaremos GPT para obtener ideas de actividades.

# Import the weather2 package
import weather

# Get the forecast for Miami
location = "Miami"
forecast = weather.forecast(location)

# Pull out forecast data for midday tomorrow
fcast = forecast.tomorrow["12:00"]

# Create a prompt
user_msg_weather = f"In {location} at midday tomorrow, the temperature is forecast to be {fcast.temp}, the wind speed is forecast to be {fcast.wind.speed} m/s, and the amount of precipitation is forecast to be {fcast.precip}. Make a list of suitable leisure activities."

# Call GPT
response_activities = chat("You are a travel guide.", [user_msg_weather])

display(Markdown(response_activities))
With mild temperatures and calm winds, Miami is the perfect place for leisure activities. Here are some suggestions:

1. Visit Miami's beaches and soak up some sun or take a dip in the ocean!

2. Explore Miami's art scene with a visit to the Perez Art Museum Miami or the Wynwood Walls.

3. Take a stroll along the famous Ocean Drive and enjoy the colorful Art Deco architecture.

4. Head to Little Havana to experience the Cuban culture and delicious cuisine.

5. Enjoy a scenic walk or bike ride through one of Miami's many parks, such as Bayfront Park or South Pointe Park.

6. Visit the Miami Seaquarium and see some incredible marine life up close.

7. Take a boat tour to see the stunning Miami skyline from the water.

8. Shopping enthusiasts can explore the many high-end boutiques and outdoor shopping malls, such as Lincoln Road Mall.

9. Foodies can venture to one of the many food festivals happening throughout the year.

10. Finally, there are plenty of nightclubs and live music venues to keep the night going.

Muy bien. ¡Una parte de mí desearía estar mañana en Miami!

Llévalo al siguiente nivel

Puedes obtener más información sobre el uso de GPT en el curso Introducción a ChatGPT. (Pronto habrá un curso completo sobre cómo trabajar con la API de OpenAI)

Para tener una referencia de lo que acabas de aprender, hazte con una copia de la Hoja de trucos de la API OpenAI en Python o mira la grabación de la formación en directo Introducción a la API OpenAI y ChatGPT.

Si te interesa la transcripción de texto a voz, lee el tutorial Convertir voz en texto con la API Whisper de OpenAI.

Temas

Los mejores cursos de Python

Certificación disponible

Course

Introduction to Python

4 hr
5.4M
Master the basics of data analysis with Python in just four hours. This online course will introduce the Python interface and explore popular packages.
See DetailsRight Arrow
Start Course
Ver másRight Arrow
Relacionado

¿Qué es la ingeniería de prompts? Una guía detallada para 2024

Explora el mundo de la ingeniería de prompts con esta guía esencial. Comprende su importancia en la IA, el papel de un ingeniero de prompts y las perspectivas de futuro.
Matt Crabtree's photo

Matt Crabtree

19 min

Las 10 mejores alternativas a ChatGPT que puedes probar hoy mismo

Este artículo ofrece una lista de alternativas a ChatGPT que aumentarán tu productividad
Javier Canales Luna's photo

Javier Canales Luna

18 min

An AI juggles tasks

Cinco proyectos que puedes crear con modelos de IA generativa (con ejemplos)

Aprende a utilizar modelos de IA generativa para crear un editor de imágenes, un chatbot similar a ChatGPT con pocos recursos y una aplicación clasificadora de aprobación de préstamos y a automatizar interacciones PDF y un asistente de voz con GPT.
Abid Ali Awan's photo

Abid Ali Awan

10 min

Tutorial de clasificación Naive Bayes con Scikit-learn

Aprende a construir y evaluar un Clasificador Naive Bayes utilizando el paquete Scikit-learn de Python.
Abid Ali Awan's photo

Abid Ali Awan

13 min

Clasificación K vecinos más próximos (KNN) con scikit-learn

Este artículo trata de cómo y cuándo utilizar la clasificación k vecinos más próximos con scikit-learn. Centrado en conceptos, flujo de trabajo y ejemplos. También cubrimos las métricas de distancia y cómo seleccionar el mejor valor para k mediante validación cruzada.
Adam Shafi's photo

Adam Shafi

14 min

Tutorial Mistral 7B: Guía paso a paso para utilizar y ajustar Mistral 7B

El tutorial cubre el acceso, la cuantización, el ajuste fino, la fusión y el almacenamiento de este potente modelo lingüístico de código abierto con 7300 millones de parámetros.
Abid Ali Awan's photo

Abid Ali Awan

12 min

See MoreSee More