Intégration avec l'API ChatGPT en Go : de l'idée au code fonctionnel

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Pourquoi Go et ChatGPT forment-ils un tandem idéal ?

\n

Avez-vous déjà imaginé à quelle vitesse vous pouvez « apprendre » à votre programme Go à communiquer avec un utilisateur comme un être humain ? Ou peut-être souhaitez-vous automatiser la génération de contenu, créer un assistant intelligent ou simplement ajouter une « touche spéciale » à votre service ? L'intégration avec l'API ChatGPT en Go n'est pas seulement une tendance à la mode, c'est un outil puissant qui ouvre les portes du monde de l'intelligence artificielle. Go, avec sa rapidité et sa simplicité, est parfait pour créer des requêtes rapides et fiables vers les réseaux de neurones. Dans cet article, nous n'allons pas seulement aborder la théorie, mais écrire du code réel que vous pourrez utiliser immédiatement dans vos projets.

\n\n

Préparons le terrain : de quoi avez-vous besoin pour commencer ?

\n

Avant de plonger dans le code, assurons-nous d'avoir tout le nécessaire. Vous aurez besoin de :

\n
    \n
  • Go installé (version 1.21 ou supérieure pour utiliser toutes les fonctionnalités modernes).
  • \n
  • Une clé API OpenAI. Vous pouvez l'obtenir sur la plateforme OpenAI. Traitez-la comme le mot de passe de votre carte bancaire — gardez-la secrète !
  • \n
  • Une compréhension de base des requêtes HTTP et des structures de données en Go.
  • \n
\n

Tout le code de l'article sera écrit dans un seul fichier main.go pour ne pas compliquer la structure. C'est parti !

\n\n

Étape 1 : Créer un client HTTP et envoyer la première requête

\n

Le cœur de notre intégration sera le paquet standard net/http. Il est léger, rapide et ne nécessite aucune dépendance externe. Notre objectif est d'envoyer une requête POST au point de terminaison https://api.openai.com/v1/chat/completions avec le corps et les en-têtes appropriés.

\n\n

Structure de la requête

\n

L'API ChatGPT attend un JSON d'un format spécifique. Créons des structures Go qui correspondront exactement à ce format :

\n
package main\n\nimport (\n    "bytes"\n    "encoding/json"\n    "fmt"\n    "io"\n    "net/http"\n    "os"\n)\n\ntype ChatMessage struct {\n    Role    string `json:"role"`\n    Content string `json:"content"`\n}\n\ntype ChatRequest struct {\n    Model    string        `json:"model"`\n    Messages []ChatMessage `json:"messages"`\n}\n\ntype ChatResponse struct {\n    Choices []struct {\n        Message ChatMessage `json:"message"`\n    } `json:"choices"`\n}
\n

Remarquez les balises json:"...". Elles garantissent que Go « empaquette » (sérialise) correctement nos données en JSON que OpenAI comprendra.

\n\n

Fonction d'envoi

\n

Écrivons maintenant une fonction qui prend en charge tout le « sale boulot » : formuler la requête, l'envoyer et analyser la réponse.

\n
func askChatGPT(apiKey, prompt string) (string, error) {\n    reqBody := ChatRequest{\n        Model: "gpt-3.5-turbo",\n        Messages: []ChatMessage{\n            {Role: "user", Content: prompt},\n        },\n    }\n\n    jsonData, err := json.Marshal(reqBody)\n    if err != nil {\n        return "", fmt.Errorf("erreur de marshaling : %w", err)\n    }\n\n    request, err := http.NewRequest("POST", "https://api.openai.com/v1/chat/completions", bytes.NewBuffer(jsonData))\n    if err != nil {\n        return "", fmt.Errorf("erreur de création de la requête : %w", err)\n    }\n\n    request.Header.Set("Content-Type", "application/json")\n    request.Header.Set("Authorization", "Bearer "+apiKey)\n\n    client := &http.Client{}\n    response, err := client.Do(request)\n    if err != nil {\n        return "", fmt.Errorf("erreur d'exécution de la requête : %w", err)\n    }\n    defer response.Body.Close()\n\n    body, err := io.ReadAll(response.Body)\n    if err != nil {\n        return "", fmt.Errorf("erreur de lecture de la réponse : %w", err)\n    }\n\n    // Vérifions le code de statut\n    if response.StatusCode != http.StatusOK {\n        return "", fmt.Errorf("l'API a renvoyé une erreur : %s, corps : %s", response.Status, string(body))\n    }\n\n    var chatResp ChatRes                

Blogs

Book Recommendations