Open Menu dzosoft
Close Menu dzosoft

   TOUT SUR L'INFORMATIQUE ET LA TECHNOLOGIE


                             





Publish perfectly-optimized content in 1-click



 
 
 

Utiliser ChatGPT dans VB .Net

 


Dans ce tutoriel nous allons essayer de montrer en écrivant un exemple comment intégrer l'api chatgpt dans un programme écrit en VB.Net

Commençons par créer un projet VB ChatGPT

 
Utiliser ChatGPT dans VB .Net
 

 
Utiliser ChatGPT dans VB .Net
 

Une fois créé, nous aurons le premier formulaire déjà inséré dans notre projet

 
Utiliser ChatGPT dans VB .Net
 
Nous aurons besoin de la bibliothèque vocale, vous allez dans le package nuget pour installer la bibliothèque

 
Utiliser ChatGPT dans VB .Net
 

 
Utiliser ChatGPT dans VB .Net
 

Une fois cela fait, nous commençons à insérer tous nos objets nécessaires à la construction de notre chatgpt, le premier objet est textEdit multiline où nous aurons la réponse du serveur, nous lui donnons le nom txtAnswer
Ensuite nous insérons l'objet txtQuestion où nous écrivons nos questions, nous insérons le bouton d'envoi pour envoyer notre demande j'essaye de lui donner le nom btnSend
Nous insérons l'étiquette lblSpeech qui sert à recevoir une partie du texte à chaque fois que nous recevons la réponse.

Nous insérons maintenant l'objet aléatoire associé à la variable de température. La température est un hyperparamètre utilisé dans certains modèles de traitement du langage naturel, notamment ChatGPT, pour contrôler le niveau de aléatoire

Après avoir inséré l'objet MaxTokens (TextEdit)

Les modèles comprennent et traitent le texte en le décomposant en jetons.
Les jetons peuvent être des mots ou simplement des morceaux de caractères. Par exemple, le mot « hamburger » est divisé en jetons « jambon », « bur » et « ger », tandis qu'un mot court et courant comme « poire » est un seul jeton. De nombreux jetons commencent par un espace, par exemple « bonjour » et « au revoir ».
Le nombre de jetons traités dans une requête API donnée dépend de la longueur de vos entrées et sorties. En règle générale, 1 jeton correspond à environ 4 caractères ou 0,75 mot pour un texte anglais.
Une limitation à garder à l'esprit est que votre invite de texte et votre complétion générée combinées ne doivent pas dépasser la longueur de contexte maximale du modèle (pour la plupart des modèles, il s'agit de 2 048 jetons, soit environ 1 500 mots).
Consultez l'outil tokenizer pour en savoir plus sur la façon dont le texte est traduit en jetons.
Ensuite, nous insérons une case à cocher pour mettre l'écoute en pause et une autre pour couper le son. Nous utilisons également une combobox pour les modèles.
L'API est alimentée par un ensemble de modèles avec différentes capacités et niveaux de prix. les modèles GPT-3 de base openai s'appellent Davinci, Curie, Babbage et Ada. La série Codex est un descendant de GPT-3 qui a été formé à la fois au langage naturel et au code. Pour en savoir plus, visitez la documentation des modèles du site openai.
Et une autre pour les voix existantes, qu'il faut charger en envoyant une requête au serveur

 
Utiliser ChatGPT dans VB .Net
 

Maintenant, nous commençons à écrire le code VB .Net

On commence par importer tous les modules nécessaires :

Importations System.Net
Importe System.IO
Importe System.Configuration
Importations Système.Sécurité.Cryptographie
Importe System.Speech.Synthesis
Importations System.Speech.Recognition


Il nous faut la constante openai_api_key , puis retourner sur le site

https://platform.openai.com/account/api-keys , soit nous pouvons l'initialiser avec le code, soit dans le fichier de configuration du projet app.config.


	Dim OPENAI_API_KEY As String = "" 'https://beta.openai.com/account/api-keys
    Dim oSpeechRecognitionEngine As SpeechRecognitionEngine = Nothing
    Dim oSpeechSynthesizer As System.Speech.Synthesis.SpeechSynthesizer = Nothing


Nous avons besoin des variables oSpeechRecognitonEngine et oSpeechSynthesizer dans la procédure de chargement du formulaire, nous lisons la valeur du fichier de configuration xml openai_api_key appi.config
Nous essayons maintenant de charger le combo contenant les différentes voix que nous pouvons utiliser.


Private Sub frmGPTChat_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim oAppSettingsReader As New AppSettingsReader()
        Dim sApiKey As String = oAppSettingsReader.GetValue("OPENAI_API_KEY", GetType(String)) & ""

If sApiKey = "" Then MsgBox("Please enter your OpenAI API key in the App.config file.") End Else OPENAI_API_KEY = sApiKey End If
'SetModels() We can load all the models or load only the three models that I've noticed working cbModel.Items.Clear() cbModel.Items.Add("text-davinci-003") cbModel.Items.Add("text-davinci-002") cbModel.Items.Add("code-davinci-002")
cbModel.SelectedIndex = 0

cbVoice.Items.Clear() Dim synth As New SpeechSynthesizer() For Each voice In synth.GetInstalledVoices() cbVoice.Items.Add(voice.VoiceInfo.Name) Next cbVoice.SelectedIndex = 0
End Sub


Lorsque vous cliquez sur cklisten si sélectionné, vous voyez le label lblSpeech et nous appelons la fonction SpeechtoText


 Private Sub chkListen_CheckedChanged(sender As Object, e As EventArgs) Handles chkListen.CheckedChanged
        If chkListen.Checked Then
            lblSpeech.Text = ""
            lblSpeech.Visible = True
            SpeechToText()
        Else
            oSpeechRecognitionEngine.RecognizeAsyncStop()
            lblSpeech.Visible = False
        End If
    End Sub
    Private Sub chkMute_CheckedChanged(sender As Object, e As EventArgs) Handles chkMute.CheckedChanged

If chkMute.Checked Then lblVoice.Visible = False cbVoice.Visible = False Else lblVoice.Visible = True cbVoice.Visible = True End If
End Sub


Si l'objet oSpeechRecognitionEngine n'est pas initialisé, nous l'initialisons


Private Sub SpeechToText()

If oSpeechRecognitionEngine IsNot Nothing Then oSpeechRecognitionEngine.RecognizeAsync(RecognizeMode.Multiple) Exit Sub End If
oSpeechRecognitionEngine = New SpeechRecognitionEngine(New System.Globalization.CultureInfo("en-US")) oSpeechRecognitionEngine.LoadGrammar(New DictationGrammar()) AddHandler oSpeechRecognitionEngine.SpeechRecognized, AddressOf OnSpeechRecognized AddHandler oSpeechRecognitionEngine.SpeechHypothesized, AddressOf OnSpeechHypothesized oSpeechRecognitionEngine.SetInputToDefaultAudioDevice() oSpeechRecognitionEngine.RecognizeAsync(RecognizeMode.Multiple) End Sub

On associe également l'événement OnSpeechRecognized qui nous permet de préparer notre question avant de l'envoyer, nous associons l'événement OnSpeechHypoSynthesized qui nous permet de visualiser le texte dans le label lblSpeech.


Private Sub OnSpeechRecognized(sender As Object, e As SpeechRecognizedEventArgs)
lblSpeech.Text = "" 'Reset Hypothesized text

If txtQuestion.Text <> "" Then txtQuestion.Text += vbCrLf End If
Dim text As String = e.Result.Text txtQuestion.Text += text End Sub
Private Sub OnSpeechHypothesized(sender As Object, e As SpeechHypothesizedEventArgs) Dim text As String = e.Result.Text lblSpeech.Text = text End Sub


Passons maintenant au bouton envoyer qui nous permet d'envoyer la requête grâce à la fonction sendMsg en utilisant le protocole http en invoquant l'API openai


 Private Sub btnSend_Click(sender As Object, e As EventArgs) Handles btnSend.Click

Dim sQuestion As String = txtQuestion.Text If sQuestion = "" Then MsgBox("Type in your question!") txtQuestion.Focus() Exit Sub End If
If txtAnswer.Text <> "" Then txtAnswer.AppendText(vbCrLf) End If
txtAnswer.AppendText("Me: " & sQuestion & vbCrLf) txtQuestion.Text = ""
Try Dim sAnswer As String = SendMsg(sQuestion) txtAnswer.AppendText("Chat GPT: " & Replace(sAnswer, vbLf, vbCrLf)) SpeechToText(sAnswer) Catch ex As Exception txtAnswer.AppendText("Error: " & ex.Message) End Try
End Sub


Nous avons le point de terminaison api.openai.com/v1/completion et la requête est effectuée avec la méthode post avec du contenu json
Notre requête est constituée de maxtokens de valeur 2048, caractère aléatoire 0,5, l'identifiant utilisateur pour cet exemple est 1 mais nous pouvons associer les requêtes à différents utilisateurs
Nous préparons la variable data avec tous les paramètres nécessaires à la fin nous lisons notre réponse au format json.


 Function SendMsg(ByVal sQuestion As String)

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3 Or System.Net.SecurityProtocolType.Tls12 Or System.Net.SecurityProtocolType.Tls11 Or System.Net.SecurityProtocolType.Tls
Dim apiEndpoint As String = "https://api.openai.com/v1/completions" Dim request As HttpWebRequest = WebRequest.Create(apiEndpoint) request.Method = "POST" request.ContentType = "application/json" request.Headers.Add("Authorization", "Bearer " & OPENAI_API_KEY)
Dim iMaxTokens As Integer = txtMaxTokens.Text '2048
Dim dTemperature As Double = txtTemperature.Text '0.5 If dTemperature < 0 Or dTemperature > 1 Then MsgBox("Randomness has to be between 0 and 1 with higher values resulting in more random text") Return "" End If
Dim sUserId As String = "1" Dim sModel As String = cbModel.Text 'text-davinci-002, text-davinci-003
'https://beta.openai.com/docs/api-reference/completions/create Dim data As String = "{" data += " ""model"":""" & sModel & """," data += " ""prompt"": """ & PadQuotes(sQuestion) & """," data += " ""max_tokens"": " & iMaxTokens & "," data += " ""user"": """ & sUserId & """, " data += " ""temperature"": " & dTemperature & ", " data += " ""frequency_penalty"": 0.0" & ", " 'Number between -2.0 and 2.0 Positive value decrease the model's likelihood to repeat the same line verbatim. data += " ""presence_penalty"": 0.0" & ", " ' Number between -2.0 and 2.0. Positive values increase the model's likelihood to talk about new topics. data += " ""stop"": [""#"", "";""]" 'Up to 4 sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence. data += "}"
Using streamWriter As New StreamWriter(request.GetRequestStream()) streamWriter.Write(data) streamWriter.Flush() streamWriter.Close() End Using
Dim response As HttpWebResponse = request.GetResponse() Dim streamReader As New StreamReader(response.GetResponseStream()) Dim sJson As String = streamReader.ReadToEnd() 'Return sJson
Dim oJavaScriptSerializer As New System.Web.Script.Serialization.JavaScriptSerializer Dim oJson As Hashtable = oJavaScriptSerializer.Deserialize(Of Hashtable)(sJson) Dim sResponse As String = oJson("choices")(0)("text")
Return sResponse
End Function

La fonction setmodels permet d'initialiser le combo avec les modèles possibles, pour le moment j'ai constaté que seulement 3 modèles que je peux utiliser les autres ne fonctionnent pas, peut-être parce que mon inscription sur le site openai est gratuite


 Private Sub SetModels()
        'https://beta.openai.com/docs/models/gpt-3

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3 Or System.Net.SecurityProtocolType.Tls12 Or System.Net.SecurityProtocolType.Tls11 Or System.Net.SecurityProtocolType.Tls
Dim apiEndpoint As String = "https://api.openai.com/v1/models" Dim request As HttpWebRequest = WebRequest.Create(apiEndpoint) request.Method = "GET" request.ContentType = "application/json" request.Headers.Add("Authorization", "Bearer " & OPENAI_API_KEY)
Dim response As HttpWebResponse = request.GetResponse() Dim streamReader As New StreamReader(response.GetResponseStream()) Dim sJson As String = streamReader.ReadToEnd() 'Return sJson
cbModel.Items.Clear()
Dim oSortedList As SortedList = New SortedList() Dim oJavaScriptSerializer As New System.Web.Script.Serialization.JavaScriptSerializer Dim oJson As Hashtable = oJavaScriptSerializer.Deserialize(Of Hashtable)(sJson) Dim oList As Object() = oJson("data") For i As Integer = 0 To oList.Length - 1 Dim sId As String = oList(i)("id") oSortedList.Add(sId, sId) Next
'Text-davinci - 3 'Text-davinci - 2 'code-davinci - 2
For Each oItem As DictionaryEntry In oSortedList cbModel.Items.Add(oItem.Key) Next

End Sub

N'oublions pas de remplacer les différents caractères non autorisés à l'aide d'une fonction distincte appelée PdQuotes avant d'envoyer le message

Private Function PadQuotes(ByVal s As String) As String

If s.IndexOf("\") <> -1 Then s = Replace(s, "\", "\\") End If
If s.IndexOf(vbCrLf) <> -1 Then s = Replace(s, vbCrLf, "\n") End If
If s.IndexOf(vbCr) <> -1 Then s = Replace(s, vbCr, "\r") End If
If s.IndexOf(vbLf) <> -1 Then s = Replace(s, vbLf, "\f") End If
If s.IndexOf(vbTab) <> -1 Then s = Replace(s, vbTab, "\t") End If
If s.IndexOf("""") = -1 Then Return s Else Return Replace(s, """", "\""") End If End Function
End Class


Une fois la partie code terminée, nous chercherons la clé, nous devons faire une inscription sur le site openai.com, c'est gratuit et nous collons la clé dans notre fichier xml api.config

Vous pouvez télécharger l'intégralité du projet ici   Télécharger ce projet

También te puede interesar


TOUT SUR  L'INFORMATIQUE ET LA TECHNOLOGIE

Comment créer un outil Paint dans VB .Net

Utilisez VB .Net et Active Directory

Capture Webcam dans VB.NET

Forme 3D, courbe 3D et boule 3D en VB .Net avec GDI+


Leave comment
          

Enregistrez le pseudo et l'e-mail dans ce navigateur pour la prochaine fois.



Cargando...     

Nord VPN