{"id":55000355,"date":"2023-04-01T00:00:00","date_gmt":"2023-04-25T13:08:46","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=355"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"OpenAI_mit_VBA","status":"publish","type":"post","link":"https:\/\/vbentwickler.de\/OpenAI_mit_VBA\/","title":{"rendered":"OpenAI mit VBA"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/a8888f2174be42e487700e0459b8bb81\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p><b>Schlagw&ouml;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&uuml;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&ouml;glichen, dass Du die Antworten auf die mit der Anwendung eingegebene Frage nutzen kannst. <\/p>\n<p><b>Video passend zu diesem Artikel:<\/b><\/p>\n<div class=\"brlbs-cmpnt-container brlbs-cmpnt-content-blocker brlbs-cmpnt-with-individual-styles\" data-borlabs-cookie-content-blocker-id=\"youtube-content-blocker\" data-borlabs-cookie-content=\"PGlmcmFtZSB3aWR0aD0iNTYwIiBoZWlnaHQ9IjMxNSIgc3JjPSJodHRwczovL3d3dy55b3V0dWJlLW5vY29va2llLmNvbS9lbWJlZC9BeEF1SmswakJkYyIgdGl0bGU9IllvdVR1YmUgdmlkZW8gcGxheWVyIiBmcmFtZWJvcmRlcj0iMCIgYWxsb3c9ImFjY2VsZXJvbWV0ZXI7IGF1dG9wbGF5OyBjbGlwYm9hcmQtd3JpdGU7IGVuY3J5cHRlZC1tZWRpYTsgZ3lyb3Njb3BlOyBwaWN0dXJlLWluLXBpY3R1cmU7IHdlYi1zaGFyZSIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPg==\">\n<div class=\"brlbs-cmpnt-cb-preset-c brlbs-cmpnt-cb-youtube\">\n<div class=\"brlbs-cmpnt-cb-thumbnail\" style=\"background-image: url('https:\/\/vbentwickler.de\/wp-content\/uploads\/borlabs-cookie\/1\/yt_AxAuJk0jBdc_hqdefault.jpg')\"><\/div>\n<div class=\"brlbs-cmpnt-cb-main\">\n<div class=\"brlbs-cmpnt-cb-play-button\"><\/div>\n<div class=\"brlbs-cmpnt-cb-content\">\n<p class=\"brlbs-cmpnt-cb-description\">Sie sehen gerade einen Platzhalterinhalt von <strong>YouTube<\/strong>. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfl\u00e4che unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.<\/p>\n<p> <a class=\"brlbs-cmpnt-cb-provider-toggle\" href=\"#\" data-borlabs-cookie-show-provider-information role=\"button\">Mehr Informationen<\/a> <\/div>\n<div class=\"brlbs-cmpnt-cb-buttons\"> <a class=\"brlbs-cmpnt-cb-btn\" href=\"#\" data-borlabs-cookie-unblock role=\"button\">Inhalt entsperren<\/a> <a class=\"brlbs-cmpnt-cb-btn\" href=\"#\" data-borlabs-cookie-accept-service role=\"button\" style=\"display: inherit\">Erforderlichen Service akzeptieren und Inhalte entsperren<\/a> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/div>\n<p><\/b><\/p>\n<p>Ob ChatGPT, OpenAI et cetera nun n&uuml;tzlich f&uuml;r uns Entwickler sind oder nicht: Wir k&ouml;nnen per Rest API darauf zugreifen, also ist es auf jeden Fall interessant! Den Einstieg findest Du unter folgendem Link:<\/p>\n<pre>https:\/\/openai.com\/api\/<\/pre>\n<p>Entweder Du hast schon einen Zugang, dann meldest Du Dich dort unter <b>Log In <\/b>an, oder Du registrierst Dich auf der Seite mit dem Button <b>Sign up<\/b>. Dazu ben&ouml;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&auml;tigungslink in der an Dich versendeten E-Mail an, um die Registrierung abzuschlie&szlig;en. Schlie&szlig;lich fragt OpenAI noch einige Informationen wie Name, Telefonnummer et cetera ab. Die Telefonnummer muss mit dem an diese Nummer gesendeten Code best&auml;tigt werden.<\/p>\n<p>Auf der Plattform findest Du anschlie&szlig;end oben rechts die M&ouml;glichkeit, auf Deinen Account zuzugreifen und dort finden wir auch den Befehl <b>View API Keys<\/b>. (siehe Bild 1). W&auml;hrend wir Abfragen &uuml;ber die Webseite ohne Weiteres absenden k&ouml;nnen, weil wir dort angemeldet sind, ben&ouml;tigen wir f&uuml;r den Zugriff &uuml;ber die Rest API einen API Key, um uns zu authentifizieren.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_355_001.png\" alt=\"Von OpenAI zum API Key\" width=\"574,6265\" height=\"583,323\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Von OpenAI zum API Key<\/span><\/b><\/p>\n<p>Warum sollen wir uns &uuml;berhaupt anmelden und k&ouml;nnen OpenAI nicht anonym nutzen? Weil es kostenpflichtig ist. Die aktuellen Preise f&uuml;r die Nutzung der verschiedenen APIs finden wir auf der folgenden Seite:<\/p>\n<pre>https:\/\/openai.com\/api\/pricing\/<\/pre>\n<p>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&uuml;r zum Ausprobieren einsetzen k&ouml;nnen. Genug, um einige Experimente von unserer VBA-Anwendung aus durchzuf&uuml;hren.<\/p>\n<h2>API Key holen<\/h2>\n<p>Wir ben&ouml;tigen also einen API Key, und den holen wir uns unter dem folgenden Link:<\/p>\n<pre>https:\/\/platform.openai.com\/account\/api-keys<\/pre>\n<p>Hier klicken wir einfach auf <b>Create new secret key <\/b>(siehe Bild 2). Den damit gewonnenen Key speichern wir in der Zwischenablage und f&uuml;gen ihn dann als Konstante in ein VBA-Standardmodul ein:<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_355_002.png\" alt=\"API key holen\" width=\"549,6265\" height=\"350,9204\"\/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: API key holen<\/span><\/b><\/p>\n<pre>Const cstrAPIkey<span style=\"color:blue;\"> As String<\/span> = \"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\"<\/pre>\n<h2>Erste Abfrage an OpenAI<\/h2>\n<p>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&ouml;nnen. Ein einfacher Aufruf soll wie folgt aussehen:<\/p>\n<pre><span style=\"color:blue;\">Debug.Print<\/span> OpenAI(\"Wie kann ich OpenAI in Microsoft Office nutzen?\")<\/pre>\n<p>Die Antwort von OpenAI lautet:<\/p>\n<pre>OpenAI kann nicht direkt in Microsoft Office genutzt werden, da es sich dabei um zwei verschiedene Programme handelt. Allerdings k&ouml;nnen Sie die Technologien, die OpenAI entwickelt hat, in Microsoft Office verwenden. Zum Beispiel k&ouml;nnen Sie Microsoft Word mit einer OpenAI-K&uuml;nstlichen Intelligenz (AI) erweitern, um automatisierten Text zu schreiben. Auch Microsoft Excel kann mit OpenAI-Technologien f&uuml;r maschinelles Lernen, Statistiken und Prognosen erweitert werden.<\/pre>\n<p>Bis zu diesem Ergebnis fehlen uns allerdings noch ein paar Zeilen Code.<\/p>\n<h2>Die Dokumentation der OpenAI-API<\/h2>\n<p>Die Endpoints der Rest API und ihre Beschreibung finden wir unter dem folgenden Link:<\/p>\n<pre>https:\/\/platform.openai.com\/docs\/api-reference\/introduction<\/pre>\n<p>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&uuml;hren m&ouml;chtest, kannst Du das im Playground unter der folgenden Adresse tun:<\/p>\n<pre>https:\/\/platform.openai.com\/playground<\/pre>\n<p>Hier kannst Du beispielsweise eine Frage wie die folgende stellen:<\/p>\n<pre>Schreibe eine VBA-Prozedur, mit der ich alle Datens&auml;tze einer Tabelle namens tblKunden mit den Feldern KundeID, Vorname und Nachname durchlaufen kann.<\/pre>\n<p>Die Antwort findest Du in Bild 3 &#8211; das ist wirklich beeindruckend gemessen daran, welchen Aufwand man als Anf&auml;nger sonst h&auml;tte, passenden Code im Internet zu suchen! Der Code ist nicht perfekt, aber man k&ouml;nnte ihn direkt in ein VBA-Modul &uuml;bernehmen und ausprobieren. Auf der rechten Seite findest Du einige Parameter, die wir auch bei Verwendung der Rest API nutzen k&ouml;nnen &#8211; und die in der Dokumentation genauer beschrieben werden.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2023_02\/pic_355_003.png\" alt=\"Beispiel f&uuml;r das Ermitteln von Code per OpenAI\" width=\"649,627\" height=\"662,6565\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Beispiel f&uuml;r das Ermitteln von Code per OpenAI<\/span><\/b><\/p>\n<h2>Bestandteile des Aufrufs der Rest API von OpenAI<\/h2>\n<p>Wenn wir die Rest API aufrufen wollen, ben&ouml;tigen wir folgende Informationen:<\/p>\n<ul>\n<li>den Endpunkt f&uuml;r den API-Befehl, in unserem Fall <b>https:\/\/api.openai.com\/v1\/completions<\/b>,<\/li>\n<li>die Zugriffsmethode, hier <b>GET<\/b>,<\/li>\n<li>unseren API Key sowie<\/li>\n<li>ein JSON-Dokument mit der eigentlichen Frage\/Aufgabe und den zu verwendenden Parametern.<\/li>\n<\/ul>\n<h2>Funktion zum Zusammenstellen des Aufrufs und zum Parsen des Ergebnisses<\/h2>\n<p>Die Funktion <b>OpenAI <\/b>erwartet lediglich die Frage, die wir an die Completions-API senden wollen, und liefert das Ergebnis als Antwort zur&uuml;ck (siehe Listing 1). Die Funktion speichert den API-Endpunkt in der Variablen <b>strURL <\/b>und die Zugriffsmethode in <b>strMethod<\/b>. Au&szlig;erdem f&uuml;gt sie in der Variablen <b>strJSON <\/b>das JSON-Dokument zusammen, welches die Frage\/Aufgabe und die Parameter enth&auml;lt. Dies sieht sp&auml;ter etwa so aus:<\/p>\n<pre><span style=\"color:blue;\">Public Function <\/span>OpenAI(strQuestion<span style=\"color:blue;\"> As String<\/span>)<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strJSON<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strURL<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>strMethod<span style=\"color:blue;\"> As String<\/span>\r\n     <span style=\"color:blue;\">Dim <\/span>objJson<span style=\"color:blue;\"> As Object<\/span>\r\n     strURL = \"https:\/\/api.openai.com\/v1\/completions\"\r\n     <span style=\"color:blue;\">Dim <\/span>strResponse<span style=\"color:blue;\"> As String<\/span>\r\n     strMethod = \"POST\"\r\n     strJSON = strJSON & \"{\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strJSON = strJSON & \"  \"\"model\"\": \"\"text-davinci-003\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strJSON = strJSON & \"  \"\"prompt\"\": \"\"\" & strQuestion & \"\"\",\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strJSON = strJSON & \"  \"\"temperature\"\": 0.7,\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strJSON = strJSON & \"  \"\"max_tokens\"\": 256,\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strJSON = strJSON & \"  \"\"top_p\"\": 1,\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strJSON = strJSON & \"  \"\"frequency_penalty\"\": 0,\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strJSON = strJSON & \"  \"\"presence_penalty\"\": 0\" & <span style=\"color:blue;\">vbCrLf<\/span>\r\n     strJSON = strJSON & \"}\"\r\n     <span style=\"color:blue;\">If <\/span>Request(strURL, strMethod, strJSON, strResponse)<span style=\"color:blue;\"> Then<\/span>\r\n         <span style=\"color:blue;\">Set<\/span> objJson = ParseJson(strResponse)\r\n         OpenAI = objJson.Item(\"choices\").Item(1).Item(\"text\")\r\n     <span style=\"color:blue;\">End If<\/span>\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<div class=\"rcp_restricted\"><p><span style=\"color: #ff0000\">M&ouml;chten Sie weiterlesen? Dann l&ouml;sen Sie Ihr Ticket!<\/span><br \/>\n<span style=\"color: #ff0000\">Hier geht es zur Bestellung des Jahresabonnements des Magazins <strong>Visual Basic Entwickler<\/strong>:<\/span><br \/>\n<span style=\"color: #ff0000\"><a style=\"color: #ff0000\" href=\"https:\/\/shop.minhorst.com\/magazine\/363\/visual-basic-entwickler-jahresabonnement?c=77\">Zur Bestellung ...<\/a><\/span><br \/>\n<span style=\"color: #ff0000\">Danach greifen Sie sofort auf <strong>alle rund 200 Artikel<\/strong> unseres Angebots zu - auch auf diesen hier!<\/span><br \/>\n<span style=\"color: #000000\">Oder haben Sie bereits Zugangsdaten? Dann loggen Sie sich gleich hier ein:<\/span><\/p>\n<\/div>\n\n\t\n\t<form id=\"rcp_login_form\"  class=\"rcp_form\" method=\"POST\" action=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000355\/\">\n\n\t\t\n\t\t<fieldset class=\"rcp_login_data\">\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_login\">Username or Email<\/label>\n\t\t\t\t<input name=\"rcp_user_login\" id=\"rcp_user_login\" class=\"required\" type=\"text\"\/>\n\t\t\t<\/p>\n\t\t\t<p>\n\t\t\t\t<label for=\"rcp_user_pass\">Password<\/label>\n\t\t\t\t<input name=\"rcp_user_pass\" id=\"rcp_user_pass\" class=\"required\" type=\"password\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t\t<p>\n\t\t\t\t<input type=\"checkbox\" name=\"rcp_user_remember\" id=\"rcp_user_remember\" value=\"1\"\/>\n\t\t\t\t<label for=\"rcp_user_remember\">Remember me<\/label>\n\t\t\t<\/p>\n\t\t\t<p class=\"rcp_lost_password\"><a href=\"\/data\/wp\/v2\/posts\/55000355?rcp_action=lostpassword\"><\/a><\/p>\n\t\t\t<p>\n\t\t\t\t<input type=\"hidden\" name=\"rcp_action\" value=\"login\"\/>\n\t\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_redirect\" value=\"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000355\/\"\/>\n\t\t\t\t\t\t\t\t<input type=\"hidden\" name=\"rcp_login_nonce\" value=\"bf09018a47\"\/>\n\t\t\t\t<input id=\"rcp_login_submit\" class=\"rcp-button\" type=\"submit\" value=\"Login\"\/>\n\t\t\t<\/p>\n\t\t\t\t\t<\/fieldset>\n\n\t\t\n\t<\/form>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Schlagw&ouml;rter wir 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 eine super Unterst&uuml;tzung ist, sondern 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&ouml;glich, dass Du die Antworten auf die mit der Anwendung eingegebene Frage nutzen kannst. <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66022023,662023,44000012,44000026,44000025],"tags":[],"yst_prominent_words":[],"class_list":["post-55000355","post","type-post","status-publish","format-standard","hentry","category-66022023","category-662023","category-Interaktiv","category-Outlook_programmieren","category-VBAProgrammierung"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000355","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/comments?post=55000355"}],"version-history":[{"count":0,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/posts\/55000355\/revisions"}],"wp:attachment":[{"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/media?parent=55000355"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/categories?post=55000355"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/tags?post=55000355"},{"taxonomy":"yst_prominent_words","embeddable":true,"href":"https:\/\/vbentwickler.de\/data\/wp\/v2\/yst_prominent_words?post=55000355"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}