cours
Utilisation de GPT-3.5 et GPT-4 via l'API OpenAI en Python
ChatGPT est un modèle de langage large de pointe pour la génération de texte. Il change déjà la façon dont nous écrivons presque tous les types de texte, des tutoriels comme celui-ci aux descriptions de produits générées automatiquement, en passant par les résultats du moteur de recherche de Bing et des dizaines de cas d'utilisation de données tels que décrits dans l' antisèche du ChatGPT pour la science des données.
Pour une utilisation interactive, l'interface web du ChatGPT est idéale. Cependant, OpenAI (la société derrière ChatGPT) dispose également d'une interface de programmation d'applications (API) qui vous permet d'interagir avec ChatGPT et leurs autres modèles à l'aide d'un code.
Dans ce tutoriel, vous apprendrez à utiliser le paquetage Python openai
pour programmer des conversations avec ChatGPT.
Notez qu'OpenAI facture l'utilisation de l'API GPT. (Des crédits gratuits sont parfois accordés aux nouveaux utilisateurs, mais l'identité des bénéficiaires et la durée de l'accord ne sont pas transparentes). Il coûte 0,002 $ / 1000 jetons, 1000 jetons équivalant à environ 750 mots. Exécuter une seule fois tous les exemples de ce tutoriel devrait coûter moins de 2 US cents (mais si vous exécutez à nouveau des tâches, vous serez facturé à chaque fois).
Principes fondamentaux de l'OpenAI
Commencez à utiliser l'API OpenAI et plus encore !
Quand devriez-vous utiliser l'API plutôt que l'interface web ?
L'application web ChatGPT est une excellente interface pour les modèles GPT. Toutefois, si vous souhaitez intégrer l'IA dans un pipeline de données ou dans un logiciel, l'API est plus appropriée. Voici quelques cas d'utilisation possibles pour les praticiens des données :
- Vous récupérez des données d'une base de données ou d'une autre API, puis vous demandez à GPT de les résumer ou de générer un rapport à leur sujet.
- Intégrer la fonctionnalité GPT dans un tableau de bord pour fournir automatiquement un résumé textuel des résultats.
- Fournir une interface en langage naturel à votre data mart
- Effectuer des recherches en récupérant des articles de journaux par le biais du paquetage scholarly(PyPI, Conda), et demander à GPT de résumer les résultats.
Créer un compte de développeur OpenAI
Pour utiliser l'API, vous devez créer un compte de développeur auprès d'OpenAI. Vous devez avoir à portée de main votre adresse électronique, votre numéro de téléphone et les détails de votre carte de débit ou de crédit.
Procédez comme suit :
- Allez sur la page d'inscription à l'API.
- Créez votre compte (vous devrez fournir votre adresse électronique et votre numéro de téléphone).
- Allez sur la page des clés API.
- Créez une nouvelle clé secrète.
- Prenez une copie de cette clé. (Si vous la perdez, supprimez la clé et créez-en une nouvelle).
- Accédez à la page Méthodes de paiement.
- Cliquez sur "Ajouter un mode de paiement" et indiquez les détails de votre carte.
Stockez en toute sécurité les données d'identification de votre compte
La clé secrète doit être gardée secrète ! Sinon, d'autres personnes peuvent l'utiliser pour accéder à l'API, et vous devrez payer pour cela. Les étapes suivantes décrivent comment stocker votre clé en toute sécurité dans DataLab, le carnet de données de DataCamp basé sur l'IA. Si vous utilisez une autre plateforme, veuillez consulter la documentation correspondante. Vous pouvez également demander conseil au ChatGPT. Voici une suggestion de texte :
> Vous êtes un expert en sécurité informatique. Vous vous adressez à un data scientist. Expliquez les meilleures pratiques pour stocker en toute sécurité les clés privées utilisées pour l'accès à l'API.
- Dans votre classeur DataLab, cliquez sur "Environnement"
- Cliquez sur le signe plus à côté de "Environnement"
- Dans le champ "Nom", tapez "OPENAI". Dans le champ "Valeur", collez votre clé secrète.
- Donnez un nom à l'ensemble des variables d'environnement (il peut s'agir de n'importe quoi).
- Cliquez sur "Créer" et connectez la nouvelle intégration.
Mise en place de Python
Pour utiliser GPT via l'API, vous devez importer les paquets Python os
et openai
.
Si vous utilisez une solution Jupyter Notebook (comme DataLab), il est également utile d'importer certaines fonctions depuis IPython.display
.
Un exemple utilise également le paquet yfinance pour récupérer les cours des actions.
# 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
L'autre tâche d'installation consiste à placer la variable d'environnement que vous venez de créer à un endroit où le paquet openai peut la voir.
# Set openai.api_key to the OPENAI environment variable
openai.api_key = os.environ["OPENAI"]
Le modèle de code pour appeler GPT via l'API
Le modèle de code pour appeler l'API OpenAI et obtenir une réponse de chat est le suivant :
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'}
])
Il y a plusieurs points à éclaircir ici.
Noms des modèles de l'API OpenAI pour GPT
Les noms des modèles sont répertoriés dans la page " Model Overview" de la documentation destinée aux développeurs. Dans ce tutoriel, vous utiliserez gpt-3.5-turbo
, qui est le dernier modèle utilisé par ChatGPT et qui dispose d'un accès API public. (Lorsqu'il sera largement disponible, vous voudrez passer à gpt-4
).
Types de messages de l'API OpenAI GPT
Il existe trois types de messages décrits dans l'introduction à la documentation sur le chat :
system
les messages décrivent le comportement de l'assistant d'intelligence artificielle. Un message système utile pour les cas d'utilisation de la science des données est "Vous êtes un assistant utile qui comprend la science des données".user
décrivent ce que vous voulez que l'assistant d'intelligence artificielle dise. Nous aborderons des exemples de messages d'utilisateur tout au long de ce tutorielassistant
les messages décrivent les réponses précédentes dans la conversation. Nous verrons comment mener une conversation interactive dans les tâches suivantes
Le premier message doit être un message système. Les messages supplémentaires doivent alterner entre l'utilisateur et l'assistant.
Votre première conversation : Générer un ensemble de données
La génération d'échantillons de données est utile pour tester votre code par rapport à différents scénarios de données ou pour démontrer le code à d'autres personnes. Pour obtenir une réponse utile de GPT, vous devez être précis et spécifier les détails de votre ensemble de données, y compris :
- le nombre de lignes et de colonnes
- les noms des colonnes
- une description du contenu de chaque colonne
- le format de sortie de l'ensemble de données
Voici un exemple de message d'utilisateur pour créer un jeu de données.
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.
Incluons ce message dans le modèle de code précédent.
# 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}])
Vérifiez que la réponse de GPT est OK
Les appels API sont "risqués" car des problèmes peuvent survenir en dehors de votre ordinateur portable, comme des problèmes de connectivité internet, un problème avec le serveur qui vous envoie des données, ou parce que vous n'avez plus de crédit API. Vous devez vérifier que la réponse que vous obtenez est correcte.
Les modèles GPT renvoient un code d'état avec l'une des quatre valeurs, décrites dans la section Format de réponse de la documentation sur le chat.
stop
: L'API a renvoyé la sortie complète du modèlelength
: Sortie de modèle incomplète en raison du paramètre max_tokens ou de la limite de jetonscontent_filter
: Contenu omis en raison d'un drapeau de nos filtres de contenunull
: Réponse de l'API en cours ou incomplète
L'API GPT envoie des données à Python au format JSON, de sorte que la variable de réponse contient des listes et des dictionnaires profondément imbriqués. C'est un peu difficile de travailler avec !
Pour une variable de réponse nommée response
, le code d'état est stocké à l'endroit suivant.
response["choices"][0]["finish_reason"]
Extraire le message de l'assistant d'intelligence artificielle
Le texte que nous avons demandé à GPT de générer est caché dans la variable de réponse. Heureusement, il est toujours au même endroit.
response["choices"][0]["message"]["content"]
Le contenu de la réponse peut être imprimé comme d'habitude avec print(content)
, mais il s'agit d'un contenu Markdown, que les carnets Jupyter peuvent rendre, via 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 |
Utiliser une fonction d'aide pour appeler GPT
Vous devez écrire beaucoup de code répétitif pour faire ces trois choses simples. Il est utile de disposer d'une fonction enveloppante pour faire abstraction des éléments ennuyeux. Nous pouvons ainsi nous concentrer sur les cas d'utilisation de la science des données.
Espérons qu'OpenAI améliorera l'interface de son paquetage Python pour que ce genre de choses soit intégré. En attendant, n'hésitez pas à l'utiliser dans votre propre code.
La fonction prend deux arguments.
system
: Une chaîne de caractères contenant le message du système.user_assistant
: Un tableau de chaînes qui alterne le message de l'utilisateur et le message de l'assistant.
La valeur de retour est le contenu généré.
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"]
Voici un exemple d'utilisation de cette fonction
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.
Réutilisation des réponses de l'assistant IA
Dans de nombreuses situations, vous souhaiterez engager une conversation plus longue avec l'IA. En d'autres termes, vous envoyez une invite à GPT, recevez une réponse, puis envoyez une autre invite pour poursuivre la discussion. Dans ce cas, vous devez inclure la réponse précédente de GPT dans le deuxième appel à l'API, afin que GPT dispose du contexte complet. Cela améliorera la précision de la réponse et la cohérence de la conversation.
Pour réutiliser le message de GPT, vous le récupérez dans la réponse, puis vous le transmettez à un nouvel appel au chat.
Exemple : Analyse de l'échantillon de données
Essayons de calculer la moyenne de la colonne des ventes à partir de l'ensemble de données généré précédemment. Notez que, comme nous n'avons pas utilisé la fonction chat()
la première fois, nous devons utiliser le code de sous-ensemble plus long pour obtenir le texte de la réponse précédente. Si vous utilisez chat()
, le code est plus simple.
# 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.
Utilisation de GPT dans un pipeline
L'un des grands avantages de l'utilisation de l'API par rapport à l'interface web est que vous pouvez combiner GPT avec d'autres API. La collecte de données à partir d'une ou de plusieurs sources, puis l'application de l'IA à ces données constituent un flux de travail puissant.
Application de l'IA GPT aux données météorologiques
Dans ce cas, nous utiliserons les prévisions météorologiques avec le paquetage weather2(PyPI) et nous utiliserons GPT pour trouver des idées d'activités.
# 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.
C'est bien ! Une partie de moi souhaite être à Miami demain !
Passez au niveau supérieur
Pour en savoir plus sur l'utilisation de GPT, consultez le cours Introduction à ChatGPT. (Un cours complet sur le travail avec l'API OpenAI sera bientôt disponible !)
Pour vous référer à ce que vous venez d'apprendre, prenez une copie de l'aide-mémoire de l'API OpenAI en Python ou regardez l'enregistrement de la formation en direct Getting Started with the OpenAI API and ChatGPT (Démarrer avec l'API OpenAI et le ChatGPT ).
Si vous êtes intéressé par la transcription de la parole en texte, lisez le tutoriel Convertir la parole en texte avec l'API Whisper de l'OpenAI.
Obtenez une certification de haut niveau en matière d'IA
Les meilleurs cours de Python
cours
Python intermédiaire
cours