OpenAI mit VBA

Schlagwörter wie OpenAI oder ChatGPT beherrschen die Schlagzeilen der Welt. Wir wollen nicht entscheiden, ob es gut oder schlecht ist, ob es Dir den Job wegnimmt oder ob es eine super Unterstützung ist, sondern wir zeigen in diesem Artikel einfach, wie Du es per VBA steuern und in eigenen Anwendungen nutzen kannst. Dabei greifen wir auf die Rest API von OpenAI zu und ermöglichen, dass Du die Antworten auf die mit der Anwendung eingegebene Frage nutzen kannst.

Video passend zu diesem Artikel:

YouTube

Mit dem Laden des Videos akzeptieren Sie die Datenschutzerklärung von YouTube.
Mehr erfahren

Video laden

Ob ChatGPT, OpenAI et cetera nun nützlich für uns Entwickler sind oder nicht: Wir können per Rest API darauf zugreifen, also ist es auf jeden Fall interessant! Den Einstieg findest Du unter folgendem Link:

https://openai.com/api/

Entweder Du hast schon einen Zugang, dann meldest Du Dich dort unter Log In an, oder Du registrierst Dich auf der Seite mit dem Button Sign up. Dazu benötigst Du einen Google- oder Microsoft-Account oder Du registrierst Dich neu mit Deiner E-Mail-Adresse. Im letzteren Fall klickst Du noch den Bestätigungslink in der an Dich versendeten E-Mail an, um die Registrierung abzuschließen. Schließlich fragt OpenAI noch einige Informationen wie Name, Telefonnummer et cetera ab. Die Telefonnummer muss mit dem an diese Nummer gesendeten Code bestätigt werden.

Auf der Plattform findest Du anschließend oben rechts die Möglichkeit, auf Deinen Account zuzugreifen und dort finden wir auch den Befehl View API Keys. (siehe Bild 1). Während wir Abfragen über die Webseite ohne Weiteres absenden können, weil wir dort angemeldet sind, benötigen wir für den Zugriff über die Rest API einen API Key, um uns zu authentifizieren.

Von OpenAI zum API Key

Bild 1: Von OpenAI zum API Key

Warum sollen wir uns überhaupt anmelden und können OpenAI nicht anonym nutzen? Weil es kostenpflichtig ist. Die aktuellen Preise für die Nutzung der verschiedenen APIs finden wir auf der folgenden Seite:

https://openai.com/api/pricing/

Allerdings werden wir nicht sofort zur Kasse gebeten, sondern bekommen Zugriffe im Wert von 18$ geschenkt, die wir innerhalb von drei Monaten ab unserer Registrierung für zum Ausprobieren einsetzen können. Genug, um einige Experimente von unserer VBA-Anwendung aus durchzuführen.

API Key holen

Wir benötigen also einen API Key, und den holen wir uns unter dem folgenden Link:

https://platform.openai.com/account/api-keys

Hier klicken wir einfach auf Create new secret key (siehe Bild 2). Den damit gewonnenen Key speichern wir in der Zwischenablage und fügen ihn dann als Konstante in ein VBA-Standardmodul ein:

API key holen

Bild 2: API key holen

Const cstrAPIkey As String = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

Erste Abfrage an OpenAI

Danach geht es auch direkt ans Werk. Was wir programmieren wollen, ist eine allgemein nutzbare VBA-Funktion, die wir in jede beliebige Office-Anwendung einbauen und von dort aus aufrufen können. Ein einfacher Aufruf soll wie folgt aussehen:

Debug.Print OpenAI("Wie kann ich OpenAI in Microsoft Office nutzen?")

Die Antwort von OpenAI lautet:

OpenAI kann nicht direkt in Microsoft Office genutzt werden, da es sich dabei um zwei verschiedene Programme handelt. Allerdings können Sie die Technologien, die OpenAI entwickelt hat, in Microsoft Office verwenden. Zum Beispiel können Sie Microsoft Word mit einer OpenAI-Künstlichen Intelligenz (AI) erweitern, um automatisierten Text zu schreiben. Auch Microsoft Excel kann mit OpenAI-Technologien für maschinelles Lernen, Statistiken und Prognosen erweitert werden.

Bis zu diesem Ergebnis fehlen uns allerdings noch ein paar Zeilen Code.

Die Dokumentation der OpenAI-API

Die Endpoints der Rest API und ihre Beschreibung finden wir unter dem folgenden Link:

https://platform.openai.com/docs/api-reference/introduction

Uns interessiert hier speziell die Completions-API, mit der wir im Playground interessante Ergebnisse erhalten haben. Wenn Du erstmal einige Experimente direkt mit OpenAI durchführen möchtest, kannst Du das im Playground unter der folgenden Adresse tun:

https://platform.openai.com/playground

Hier kannst Du beispielsweise eine Frage wie die folgende stellen:

Schreibe eine VBA-Prozedur, mit der ich alle Datensätze einer Tabelle namens tblKunden mit den Feldern KundeID, Vorname und Nachname durchlaufen kann.

Die Antwort findest Du in Bild 3 – das ist wirklich beeindruckend gemessen daran, welchen Aufwand man als Anfänger sonst hätte, passenden Code im Internet zu suchen! Der Code ist nicht perfekt, aber man könnte ihn direkt in ein VBA-Modul übernehmen und ausprobieren. Auf der rechten Seite findest Du einige Parameter, die wir auch bei Verwendung der Rest API nutzen können – und die in der Dokumentation genauer beschrieben werden.

Beispiel für das Ermitteln von Code per OpenAI

Bild 3: Beispiel für das Ermitteln von Code per OpenAI

Bestandteile des Aufrufs der Rest API von OpenAI

Wenn wir die Rest API aufrufen wollen, benötigen wir folgende Informationen:

  • den Endpunkt für den API-Befehl, in unserem Fall https://api.openai.com/v1/completions,
  • die Zugriffsmethode, hier GET,
  • unseren API Key sowie
  • ein JSON-Dokument mit der eigentlichen Frage/Aufgabe und den zu verwendenden Parametern.

Funktion zum Zusammenstellen des Aufrufs und zum Parsen des Ergebnisses

Die Funktion OpenAI erwartet lediglich die Frage, die wir an die Completions-API senden wollen, und liefert das Ergebnis als Antwort zurück (siehe Listing 1). Die Funktion speichert den API-Endpunkt in der Variablen strURL und die Zugriffsmethode in strMethod. Außerdem fügt sie in der Variablen strJSON das JSON-Dokument zusammen, welches die Frage/Aufgabe und die Parameter enthält. Dies sieht später etwa so aus:

Public Function OpenAI(strQuestion As String) As String
     Dim strJSON As String
     Dim strURL As String
     Dim strMethod As String
     Dim objJson As Object
     strURL = "https://api.openai.com/v1/completions"
     Dim strResponse As String
     strMethod = "POST"
     strJSON = strJSON & "{" & vbCrLf
     strJSON = strJSON & "  ""model"": ""text-davinci-003""," & vbCrLf
     strJSON = strJSON & "  ""prompt"": """ & strQuestion & """," & vbCrLf
     strJSON = strJSON & "  ""temperature"": 0.7," & vbCrLf
     strJSON = strJSON & "  ""max_tokens"": 256," & vbCrLf
     strJSON = strJSON & "  ""top_p"": 1," & vbCrLf
     strJSON = strJSON & "  ""frequency_penalty"": 0," & vbCrLf
     strJSON = strJSON & "  ""presence_penalty"": 0" & vbCrLf
     strJSON = strJSON & "}"
     If Request(strURL, strMethod, strJSON, strResponse) Then
         Set objJson = ParseJson(strResponse)
         OpenAI = objJson.Item("choices").Item(1).Item("text")
     End If
End Function

Möchten Sie weiterlesen? Dann lösen Sie Ihr Ticket!
Hier geht es zur Bestellung des Jahresabonnements des Magazins Visual Basic Entwickler:
Zur Bestellung ...
Danach greifen Sie sofort auf alle rund 200 Artikel unseres Angebots zu - auch auf diesen hier!
Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:

2 Kommentare

  1. Hallo, das Beispiel (#355) funktioniert leider nicht (Fehler: ‘Tokens exceeded’, obgleich ich noch nie etwas mit der API gemacht habe).
    D.h.: (“…werden wir nicht sofort zur Kasse gebeten, sondern bekommen Zugriffe im Wert von 18$ geschenkt, “) -> ist das nicht (mehr) korrekt?
    Oder ist der Beispielcode überholt? Z.B. fehlt in der Beispiel-Datenbank das im Artikel beschriebene “Formular zur Eingabe von Anfragen an OpenAI”.
    post@klauspluecke.de

    1. Hallo Klaus, zumindest haben sie das Limit heruntergesetzt. Meines ist am 1.5.2023 abgelaufen, sodass ich es gerade nicht prüfen kann, da ich aktuell keinen API-Zugriff benötige.

Schreibe einen Kommentar