1. Grundlagen von Textgenerierungsmethoden

Das Textgenerierungsmodell von OpenAI, das in der Regel als Generative Pre-trained Transformer (GPT) bezeichnet wird, basiert auf dem Selbst-Aufmerksamkeitsmechanismus im Deep Learning, um natürliche Sprache zu verstehen und zu verarbeiten. Das Training des GPT-Modells besteht aus zwei Phasen: Vortraining und Feinabstimmung.

Vortraining

Während der Vortrainingsphase unterzieht sich das Modell dem unüberwachten Lernen mit einem großen Textdatensatz. In diesem Prozess wird das Modell trainiert, indem es das nächste Wort vorhersagt. Beispielsweise versucht das Modell nachdem es die ersten Wörter des Satzes "Ich habe einen Stift" gesehen hat, das Wort "Stift" vorherzusagen. Das Hauptziel des Vortrainings besteht darin, dem Modell das Verständnis für die Struktur und Semantik von Sprache zu ermöglichen.

Feinabstimmung

Die Feinabstimmungsphase beinhaltet überwachtes Lernen in spezifischen Aufgaben. In dieser Phase wird das Modell angepasst, um sich an bestimmte Anwendungen wie Frage-Antwort-Systeme und Dokumentenzusammenfassungen anzupassen. Die Feinabstimmung beinhaltet ein weiteres Training des Modells mit annotierten Datensätzen auf Basis des vortrainierten Modells, was es ermöglicht, sich besser an spezifische Aufgaben anzupassen.

2. Anwendungsszenarien

Das Textgenerierungsmodell von OpenAI kann in einer Vielzahl von Szenarien eingesetzt werden. Hier sind einige spezifische Anwendungen:

  • Dokumentenerstellung: Unterstützung von Benutzern beim schnellen Erstellen und Bearbeiten von Dokumenten.
  • Programmcode schreiben: Generierung von Code-Snippets zur Unterstützung bei der Programmierung.
  • Beantworten von Fragen zu einer Wissensdatenbank: Bereitstellung von Antworten auf Basis gespeicherter Informationen.
  • Textanalyse: Extrahieren von Textinformationen, Analyse von Stimmungen und mehr.
  • Bereitstellung einer natürlichsprachigen Benutzeroberfläche für Software: Ermöglichen von Benutzern, mit Software in natürlicher Sprache zu interagieren.
  • Unterricht in einer Vielzahl von Fächern: Bereitstellung von Lehrhilfen für verschiedene Fächer.
  • Sprachübersetzung: Übersetzung von Texten zwischen verschiedenen Sprachen.
  • Simulieren von Charakteren für Spiele: Generierung von Dialogen und Hintergrundgeschichten für Spiele oder Rollenspielszenarien.

3. Einführung in das Dialogmodell

Ein Dialogmodell ist eine spezielle Art von Textgenerierungsmodell, das durch Vortraining natürliche Gespräche versteht und generiert. Dieses Modell kann ein Gespräch zwischen einem Benutzer und einem virtuellen Assistenten simulieren und ist für echtzeitinteraktive Anwendungen geeignet.

Die Verwendung eines Dialogmodells beinhaltet typischerweise Multi-Turn-Interaktionsgespräche. Wenn ein Benutzer beispielsweise eine Frage stellt, kann das Modell angemessene Antworten auf Basis von vorherigen Trainingsdaten generieren. Darüber hinaus kann das Dialogmodell kontextbezogene Informationen aufrechterhalten, um unter Berücksichtigung des vorherigen Gesprächsinhalts kohärentere und natürlichere Antworten zu generieren.

Anwendungsszenarien des Dialogmodells:

  • Kundendienstassistenten: Automatisches Beantworten von häufig gestellten Fragen der Benutzer, Bereitstellung von Unterstützung und Ratschlägen.
  • Chatbots: Durchführung natürlicher Gesprächsinteraktionen mit Benutzern.
  • Virtuelle Assistenten: Ausführen von Sprachbefehlen der Benutzer, wie das Planen von Meetings, das Einrichten von Erinnerungen und mehr.
  • Rollenspiele: Bereicherung des Spielerlebnisses, indem Spielfiguren einzigartige Dialoge und Persönlichkeiten erhalten.

4. Dialogmodell-API

Die Dialogmodell-API ermöglicht es Entwicklern, mit dem GPT-Modell über HTTP-Anfragen zu interagieren. In diesem Abschnitt wird erläutert, wie man mit Hilfe von curl Anfragen erstellt und die Antworten des Modells analysiert.

Erstellung von Anfragen

Bevor Sie beginnen, müssen Sie sich bei OpenAI registrieren und einen API-Schlüssel erhalten, der über HTTP-Header authentifiziert werden muss, wenn Anfragen gesendet werden.

Hier ist ein Beispiel für die Verwendung von curl, um eine Anfrage an die Dialogmodell-API zu senden:

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-3.5-turbo",
    "messages": [
      {
        "role": "system",
        "content": "Du bist ein hilfreicher Assistent."
      },
      {
        "role": "user",
        "content": "Welches Team hat die World Series 2020 gewonnen?"
      }
    ]
  }'

Bedeutung der Dialogmodell-Parameter

Bei der Verwendung der Dialogmodell-API von OpenAI umfassen die Hauptparameter "model" und "messages", von denen jeder spezifische Bedeutungen trägt und die Ergebnisse beeinflusst.

Modellparameter

Der Modellparameter wird verwendet, um die Version des zu verwendenden Modells anzugeben. Zum Beispiel bedeutet "modell": "gpt-3.5-turbo", dass Sie das GPT-3.5-Turbo-Modell anfordern. Die hier ausgewählte Version des Modells reagiert basierend auf ihren Fähigkeiten, Trainingsdaten und Schnittstellenfunktionen auf die Benutzereingabe.

Hier sind die derzeit unterstützten Modelle:

Unterstützte Modelle Maximaler Kontext Modellbeschreibung
gpt-4-0125-vorschau 128.000 Tokens GPT-4 Turbo Vorabversion, die darauf ausgelegt ist, "träge" Fälle zu reduzieren, in denen das Modell Aufgaben nicht abschließt.
gpt-4-turbo-vorschau 128.000 Tokens Zeigt derzeit auf das Modell gpt-4-0125-preview.
gpt-4-1106-vorschau 128.000 Tokens GPT-4 Turbo Modell mit verbesserten Anweisungsausführungsfähigkeiten, JSON-Modus, reproduzierbare Ausgabe und parallele Funktionsaufrufe.
gpt-4-vision-vorschau 128.000 Tokens GPT-4-Modell mit der Fähigkeit, Bilder zu verstehen, zusätzlich zu allen anderen Funktionen des GPT-4 Turbo.
gpt-4 8.192 Tokens Zeigt derzeit auf gpt-4-0613.
gpt-4-0613 8.192 Tokens GPT-4 Momentaufnahme vom 13. Juni 2023, bietet verbesserte Unterstützung für Funktionsaufrufe.
gpt-4-32k 32.768 Tokens Zeigt derzeit auf gpt-4-32k-0613. Dieses Modell wird nicht weit verbreitet beworben und bevorzugt die Verwendung von GPT-4 Turbo.
gpt-4-32k-0613 32.768 Tokens GPT-4 32k Versionssnapshot vom 13. Juni 2023. Dieses Modell wird nicht weit verbreitet beworben und bevorzugt die Verwendung von GPT-4 Turbo.
gpt-3.5-turbo-1106 16.385 Tokens Das neueste GPT-3.5 Turbo-Modell mit verbesserten Anweisungsausführung, JSON-Modus, reproduzierbarer Ausgabe und parallelen Funktionsaufrufen.
gpt-3.5-turbo 4.096 Tokens Zeigt derzeit auf gpt-3.5-turbo-0613.
gpt-3.5-turbo-16k 16.385 Tokens Zeigt derzeit auf gpt-3.5-turbo-16k-0613.
gpt-3.5-turbo-instruct 4.096 Tokens Funktional ähnlich wie die Modelle aus der GPT-3-Ära. Kompatibel mit traditionellen Abschlussendpunkten, nicht geeignet für Chat-Abschlüsse.
gpt-3.5-turbo-0613 4.096 Tokens Momentaufnahme von gpt-3.5-turbo vom 13. Juni 2023. Wird am 13. Juni 2024 nicht mehr unterstützt.
gpt-3.5-turbo-16k-0613 16.385 Tokens Momentaufnahme von gpt-3.5-16k-turbo vom 13. Juni 2023. Wird am 13. Juni 2024 nicht mehr unterstützt.
gpt-3.5-turbo-0301 4.096 Tokens Momentaufnahme von gpt-3.5-turbo vom 1. März 2023. Wird am 13. Juni 2024 nicht mehr unterstützt.

Nachrichtenparameter

Der Nachrichtenparameter ist ein Array, bei dem jedes Element eine Nachricht im Gespräch repräsentiert. Jede Nachricht ist ein Objekt mit zwei Eigenschaften: role (die Rolle des Senders) und content (der spezifische Inhalt der Nachricht).

  • rolle: Legt die Rolle des Absenders für die Nachricht fest. Optionale Werte sind "system", "benutzer" und "assistent".
  • inhalt: Der spezifische Inhalt der Nachricht.

Typen und Funktionen der Rolle

Der Wert des Rollenparameters definiert den Typ und die Funktion der Nachricht. Die Dialog-API ändert die Antwort des Modells basierend auf verschiedenen Rollen.

Rolle 'System'

Systemnachrichten werden verwendet, um das Verhalten des Modells global anzugeben. Zum Beispiel kann explizit die Rolle des Modells angegeben werden (wie z.B. Assistent, Übersetzer usw.) oder spezifische Anweisungen für das Gespräch bereitgestellt werden. Systemnachrichten haben langfristige Auswirkungen auf das Verhalten des Modells im gesamten Gespräch, sind jedoch in der Regel optional.

Wenn Sie beispielsweise möchten, dass das Modell an dem Gespräch als Kundendienstmitarbeiter teilnimmt, können Sie in der Systemnachricht angeben:

{
  "role": "system",
  "content": "Du bist ein Kundendienstmitarbeiter."
}

Rolle 'Benutzer'

Benutzer Nachrichten repräsentieren die vom Benutzer eingegebenen Fragen. Das Modell reagiert auf diese Nachrichten und liefert Informationen, Antworten oder andere Formen von Ausgaben. Diese Nachrichten sind ein entscheidender Bestandteil des Dialog-API-Workflows und entsprechen in der Regel tatsächlichen Benutzeranfragen in der Anwendung.

Zum Beispiel in der Benutzeranfrage im oben stehenden curl Beispiel:

{
  "role": "user",
  "content": "Welches Team hat die World Series 2020 gewonnen?"
}

Rolle 'Assistent'

Assistentennachrichten beziehen sich typischerweise auf die Antworten, die vom Modell generiert werden, und können auch Teil der vom Entwickler bereitgestellten Konversationsverlaufsnachrichten sein, die verwendet werden, um das Format der KI-Rückgabemitteilungen zu simulieren. In API-Anfragen werden Assistentenrolle-Nachrichten in der Regel nicht bereitgestellt, es sei denn, es ist erforderlich, das Format festzulegen, in dem das Modell Fragen im Konversationsverlauf beantwortet, um Ausgabebeispiele für das Modell bereitzustellen.

Analyse der Antwort

Die Antwort des Modells wird im JSON-Format zurückgegeben. Hier ist ein Beispiel zur Analyse der Antwort:

{
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "message": {
        "content": "Der Champion der World Series 2020 sind die Los Angeles Dodgers.",
        "role": "assistant"
      },
      "logprobs": null
    }
  ],
  "created": 1677664795,
  "id": "chatcmpl-7QyqpwdfhqwajicIEznoc6Q47XAyW",
  "model": "gpt-3.5-turbo-0613",
  "object": "chat.completion",
  "usage": {
    "completion_tokens": 17,
    "prompt_tokens": 57,
    "total_tokens": 74
  }
}

In der obigen Antwort können Sie die Antwort des Modells aus choices[0].message.content erhalten.

Wie man die Memory-Funktion im Dialogmodell implementiert

Im Folgenden finden Sie ein Beispiel zur Verwendung der Chat-Vervollständigungs-API von OpenAI, um die Memory-Funktion des GPT-Modells zu implementieren. Dieses Beispiel zeigt, wie der historische Gesprächskontext (d.h. der Inhalt des Speichers) in einer neuen API-Anfrage gespeichert wird, um einen kontinuierlichen Dialog zu erreichen.

import requests

api_url = "https://api.openai.com/v1/chat/completions"
api_key = "Ihr OpenAI API-Schlüssel"

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {api_key}"
}

data = {
    "model": "gpt-3.5-turbo",  # Kann durch gpt-4 oder andere verfügbare Modelle ersetzt werden
    "messages": [
      {
        "role": "system",  # Systemnachricht, wird verwendet, um das Verhalten des Dialogmodells festzulegen
        "content": "Du bist ein Hilfeassistent."
      },
      {
        "role": "user",  # Benutzernachricht, auf die das Modell antworten wird
        "content": "Können Sie mir die Hauptgründe für den Klimawandel nennen?"
      },
      {
        "role": "assistant",  # Antwort des Modells
        "content": "Die Hauptgründe für den Klimawandel sind unter anderem Treibhausgasemissionen, Verbrennung fossiler Brennstoffe und Abholzung."
      },
      {
        "role": "user",  # Neue Frage basierend auf der Antwort des Modells
        "content": "Wie können wir die Emissionen von Treibhausgasen reduzieren?"
      }
    ]
}

response = requests.post(api_url, headers=headers, json=data)

if response.status_code == 200:
    reply_content = response.json()['choices'][0]['message']['content']
    print(f"Antwort des Modells => {reply_content}")
else:
    print(f"Anfragefehler: {response.status_code}")

In diesem Beispiel simulieren wir, dass ein Benutzer zunächst nach den Hauptgründen für den Klimawandel fragt und dann eine weitere Frage basierend auf der Erklärung des Modells stellt. In nachfolgenden Anfragen behalten wir den Inhalt des vorherigen Gesprächs bei, um sicherzustellen, dass das Modell sich an die Geschichte des vorherigen Gesprächs erinnern und basierend darauf eine Antwort generieren kann. Auf diese Weise wird der Dialogzustand durch die Verwendung der Eingabe und Ausgabe der vorherigen Gesprächsrunde als Historiennachrichten der neuen Anfrage übertragen und behalten.

Tipp: Zur Implementierung der Memory-Funktion des Dialogs ist es aufgrund der maximalen Token-Begrenzung des Modells nicht möglich, alle historischen Konversationsnachrichten für jede Anfrage einzugeben. Typischerweise werden relevante Nachrichten, die sich auf die aktuellen Fragen beziehen, als historische Nachrichten in das Modell eingegeben, und die nachfolgenden Abschnitte werden vorstellen, wie das Embeddings-Feature die Textähnlichkeitssuche ermöglicht.

5. JSON-Schema

JSON-Schema ist eine Funktion der API des Dialogmodells, die es Benutzern ermöglicht, das Modell anzuweisen, immer ein JSON-Objekt zurückzugeben, das für Szenarien geeignet ist, die Antworten im JSON-Format erfordern.

Verwendung des JSON-Schemas

Um das JSON-Schema zu verwenden, müssen Sie das Feld response_format im HTTP-Anfragekörper auf { "type": "json_object" } setzen und sicherstellen, dass die Systemnachricht angibt, dass die Modellausgabe im JSON-Format erfolgt. Hier ist ein Curl-Anfragebeispiel zur Aktivierung des JSON-Schemas:

curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d '{
    "model": "gpt-3.5-turbo-1106",
    "response_format": { "type": "json_object" },
    "messages": [
      {
        "role": "system",
        "content": "Du bist ein hilfreicher Assistent, der darauf ausgelegt ist, JSON auszugeben."
      },
      {
        "role": "user",
        "content": "Welches Team hat die World Series 2020 gewonnen?"
      }
    ]
  }'

Parsen der JSON-Schema-Antwort

Im JSON-Schema-Modus enthält die Antwort ein vollständiges und perfekt geparstes JSON-Objekt. Dieser Modus stellt sicher, dass die Ausgabe des Modells ein gültiges JSON-Objekt ist, das direkt geparst und verwendet werden kann. Im Folgenden finden Sie ein Beispiel für eine Antwort, die mit JSON-Schema zurückgegeben werden könnte:

{
  "choices": [
    {
      "finish_reason": "stop",
      "message": {
        "content": "{\"winner\": \"Los Angeles Dodgers\"}"
      }
    }
  ]
}

In Python können Sie den folgenden Code verwenden, um den Inhalt der Antwort zu extrahieren:

import json

response = {
  "choices": [
    {
      "finish_reason": "stop",
      "message": {
        "content": "{\"winner\": \"Los Angeles Dodgers\"}"
      }
    }
  ]
}

response_content = json.loads(response['choices'][0]['message']['content'])

print(response_content)

Die Ausgabe wird sein:

{'winner': 'Los Angeles Dodgers'}

JSON Schema bietet eine zuverlässige Methode, um die korrekte Formatierung von Antworten für spezifische Anwendungsfälle zu gewährleisten. Daher wird empfohlen, JSON Schema in Szenarien zu aktivieren, in denen spezifische Anforderungen an das Format der API-Antwort bestehen.