if this article is not in your language, use the Google Translate widget
⬈ (bottom of page for Mobile version ⬇)
Dans un article précédent, j'avais décris la possibilité d'utiliser l'API d'Open AI via leur package Python.
Voici une alternative en utilisant une requête HTTP qui est compatible avec n'importe quel moteur Python sans installation de package Python. La requête s'effectue via la classe
HttpClient
(System.Net.Http
)
Lorsque vous souhaitez effectuer des requêtes HTTP en Python, vous
connaissez probablement des packages couramment utilisés tels que
requests
,
urllib
ou
httplib
. Cependant, avec l'accès à l'environnement .Net, il existe une
alternative intéressante pour réaliser des requêtes HTTP sans avoir à
installer des packages supplémentaires.
Dans cet article, nous explorerons comment utiliser la classe
HttpClient
de la bibliothèque
System.Net.Http
pour effectuer des requêtes HTTP en utilisant la méthode PostAsync et
ainsi simplifier vos interactions avec des API.
La documentation pour effectuer des requêtes API d'Open AI se trouve
ici
https://platform.openai.com/docs/api-reference/making-requests
https://platform.openai.com/docs/api-reference/making-requests
- Voici un exemple pour la traduction d'un mot
- .Exemple 1 Code avec la librairie Newtonsoft.Json (IronPython) .
import sys
import clr
import System
from System.Text import *
from System.Net import *
clr.AddReference("System.Net.Http")
from System.Net.Http import *
clr.AddReference('Newtonsoft.Json')
import Newtonsoft.Json;
clr.AddReference("System.Core")
clr.ImportExtensions(System.Linq)
apikey = "YOUR_API_KEY" # "sk-bC................................"
def translate_OpenAI(text="maison", source="french", target="english"):
input = "Hello translate this {0} word '{2}' in {1}".format(source, target, text)
result = None
with HttpClient() as client:
client.DefaultRequestHeaders.Add("Authorization", "Bearer {}".format(apikey))
content = {\
"model": "gpt-3.5-turbo", \
'max_tokens': 100 ,\
"messages": [{"role": "user", "content": input}], \
}
jsonRequest = Newtonsoft.Json.JsonConvert.SerializeObject(content);
httpContent = StringContent(jsonRequest, Encoding.UTF8, "application/json");
response = client.PostAsync("https://api.openai.com/v1/chat/completions", httpContent)
jsonResponse = response.Result.Content.ReadAsStringAsync().Result
#print(jsonResponse)
data = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonResponse);
try:
result = data["choices"][0]["message"]["content"].ToString()
except Exception as ex:
return "{}\n{}".format(ex, jsonResponse)
return result
OUT = translate_OpenAI(IN[0])
- . Exemple 2 Code avec la librairie python json (IronPython ou CPython3) .
import sys
import clr
import System
from System.Text import *
from System.Net import *
clr.AddReference("System.Net.Http")
from System.Net.Http import *
import json
apikey = "YOUR_API_KEY" # "sk-bC................................"
def translate_OpenAI(text="maison", source="french", target="english"):
input = "Hello translate this {0} word '{2}' in {1}.Write only the answer (word or expression)".format(source, target, text)
result = None
with HttpClient() as client:
client.DefaultRequestHeaders.Add("Authorization", "Bearer {}".format(apikey))
content = {\
"model": "gpt-3.5-turbo", \
'max_tokens': 100 ,\
"messages": [{"role": "user", "content": input}], \
}
#
jsonRequest = json.dumps(content, indent = 4)
#
httpContent = StringContent(jsonRequest, Encoding.UTF8, "application/json")
response = client.PostAsync("https://api.openai.com/v1/chat/completions", httpContent)
jsonResponse = response.Result.Content.ReadAsStringAsync().Result
data = json.loads(jsonResponse)
try:
result = data["choices"][0]["message"]["content"]
except Exception as ex:
return "{}\n{}".format(ex, jsonResponse)
return result
OUT = translate_OpenAI(IN[0])
- Un autre exemple pour de la correction grammatical et orthographique
Note
pour la rédaction de cet article, j'ai effectué une dizaine
de traductions et une dizaine de corrections pour un cout de moins
de 1 centime d'euro
I keep getting this error. Can you Help?
RépondreSupprimerWarning: CPythonEvaluator.EvaluatePythonScript operation failed.
Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
Hi,
SupprimerI've updated the code so you can identify the error
some examples
- wrong api key ?
- no more credits on your open AI account ?
Cyril,
SupprimerThanks for updating. I am trying to make this .net method work so I can call the API in Dynamo. I have had no success. I tried a new API key, and I tried adding credits. It should work, I have not modified the script at all but it gives me this same error. Is there a specific python version I need to be running or something i need to install that i am missing?
I am a python beginner and I appreciate your blog and help.
Sam
ok, I see, It's a PythonNet bug (CPython3 engine)
SupprimerI added another example with a different Library (json)
or I can switch to IronPython
Merci Cyril! This is working and I will see if i can adapt this method to make other types of calls as well.
RépondreSupprimerThank you for you help it is appreciated!!!