Integration mit der ChatGPT API in Go: Von der Idee zum funktionierenden Code

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum Go und ChatGPT das ideale Gespann sind?

\n

Haben Sie sich jemals gefragt, wie schnell Sie Ihr Go-Programm dazu bringen können, wie ein Mensch mit dem Benutzer zu kommunizieren? Oder möchten Sie vielleicht die Content-Generierung automatisieren, einen intelligenten Assistenten erstellen oder einfach Ihrem Dienst das gewisse Etwas verleihen? Die Integration mit der ChatGPT API in Go ist nicht nur ein modischer Trend, sondern ein leistungsstarkes Werkzeug, das Türen zur Welt der künstlichen Intelligenz öffnet. Go, mit seiner Geschwindigkeit und Einfachheit, eignet sich ideal für die Erstellung schneller und zuverlässiger Anfragen an neuronale Netze. In diesem Artikel werden wir nicht nur die Theorie behandeln, sondern echten Code schreiben, den Sie sofort in Ihren Projekten verwenden können.

\n\n

Den Boden bereiten: Was wird für den Start benötigt?

\n

Bevor wir in den Code eintauchen, stellen wir sicher, dass wir alles Nötige haben. Sie benötigen:

\n
    \n
  • Installiertes Go (Version 1.21 oder höher, um alle modernen Funktionen nutzen zu können).
  • \n
  • OpenAI-API-Schlüssel. Sie erhalten ihn auf der OpenAI-Plattform. Behandeln Sie ihn wie Ihr Bankkarten-Passwort – bewahren Sie ihn geheim auf!
  • \n
  • Grundlegendes Verständnis von HTTP-Anfragen und Datenstrukturen in Go.
  • \n
\n

Den gesamten Code aus dem Artikel werden wir in einer einzigen Datei main.go schreiben, um die Struktur nicht zu verkomplizieren. Los geht's!

\n\n

Schritt 1: Erstellen eines HTTP-Clients und Senden der ersten Anfrage

\n

Das Herzstück unserer Integration wird das Standardpaket net/http sein. Es ist leichtgewichtig, schnell und erfordert keine externen Abhängigkeiten. Unsere Aufgabe ist es, eine POST-Anfrage an den Endpunkt https://api.openai.com/v1/chat/completions mit dem richtigen Body und den richtigen Headern zu senden.

\n\n

Struktur der Anfrage

\n

Die ChatGPT API erwartet JSON in einem bestimmten Format. Lassen Sie uns Go-Strukturen erstellen, die diesem Format genau entsprechen:

\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

Beachten Sie die json:"..."-Tags. Sie stellen sicher, dass Go unsere Daten korrekt in JSON „verpackt" (serialisiert), das OpenAI versteht.

\n\n

Sender-Funktion

\n

Jetzt schreiben wir eine Funktion, die die gesamte „Schmutzarbeit" übernimmt: die Anfrage erstellt, sendet und die Antwort parst.

\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("Fehler beim Marshalling: %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("Fehler beim Erstellen der Anfrage: %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("Fehler beim Ausführen der Anfrage: %w", err)\n    }\n    defer response.Body.Close()\n\n    body, err := io.ReadAll(response.Body)\n    if err != nil {\n        return "", fmt.Errorf("Fehler beim Lesen der Antwort: %w", err)\n    }\n\n    // Statuscode prüfen\n    if response.StatusCode != http.StatusOK {\n        return "", fmt.Errorf("API hat Fehler zurückgegeben: %s, Body: %s", response.Status, string(body))\n    }\n\n    var chatResp ChatRes                

Blogs

Buchempfehlungen