ChatGPT Chatbot in Java Web-Anwendung integrieren

Wie integrierst Du eine künstliche Intelligenz als Chatbot in Deine Web-Anwendung? Am einfachsten indem Du die GPT-3 API benutzt. Hier zeige ich, wie es mit Java funktioniert.

OpenAI Account und API Key


OpenAI bietet die GPT-3 API an, die auch ChatGPT verwendet. Willst Du sie nutzen? Dann geht es vor dem eigentlichen Programmieren in Java so los:
  1. Eigenen Account auf https://openai.com/ erstellen.
  2. Einloggen und eigenen API Key erstellen:
    https://beta.openai.com/account/api-keys
    Der API Key berechtigt Deine Anwendung die GPT-3 API zu nutzen.

Bei YouTube findet ihr ein englisches und deutsches Video passend zu diesem Blog-Artikel.

How-To use GPT-3 API video in English

GPT-3 API mit Java HttpClient aufrufen

Die GPT-3 API kann mit jeder Programmiersprache bzw. jedem HTTP Client verwendet werden. Ich zeige euch hier, wie es mit dem HttpClient von Java funktioniert.

String postBody = 
    """
    {
        "prompt": "Code in Java to print first 20 Fibonacci numbers",
"max_tokens": 300,
"model": "text-davinci-003",
"temperature": 0.7
    }
    """;
var request = HttpRequest.newBuilder()
        .uri(URI.create("https://api.openai.com/v1/completions"))
.header("Content-Type", "application/json")
.header("Authorization", "Bearer " + OPENAI_API_KEY)
.POST(BodyPublishers.ofString(postBody))
.build();
var client = HttpClient.newHttpClient();
var resp = client.send(request,HttpResponse.BodyHandlers.ofString());
System.out.println(resp.body());
  • Wir definieren einen String postBody im JSON Format entsprechend der OpenAI API Dokumentation. Dieser String enthält im prompt die Nachricht bzw. hier die Programmieraufgabe die wir an die Chatbot API schicken. Die anderen JSON Attribute sind ausführlich in der API Dokumentation beschrieben: https://beta.openai.com/docs/api-reference/completions
  • HttpClient.newHttpClient() erzeugt die Instanz des Java HTTP Clients zum Verschicken eines HTTP Requests.
  • Den eigentlichen HttpRequest bauen wir mit einem Builder. Hier verwende ich nur die nötigsten Attribute des HttpRequests:
    • Die Internet-Addresse mit uri
    • Der Content-Type Header legt fest, dass wir einen JSON Text übertragen.
    • Der Authorization Header überträgt unseren API Key als Bearer Token.
    • Der POST Request Body bestehend aus unseren JSON String.
  • Mit der send Methode schicken wir den POST Request ab und legen fest, dass der Response Body als String eingelesen wird. Die Antwort ist dann ein JSON, welches wir in die Console schreiben:
{
  "id": "cmpl-6aVIuAySr6W83S0xvbCgq2RUNc3hQ",
  "object": "text_completion",
  "created": 1674158160,
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "public class Fibonacci {...",
      "index": 0,
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 11,
    "completion_tokens": 131,
    "total_tokens": 142
  }
}

Die Antwort der künstlichen Intelligenz befindet sich im Attribut text innerhalb der Liste choices. Den Java Code für die Fibonacci Folge habe ich hier gekürzt - probiert es selbst aus, um ihn komplett zu sehen.

Wenn ihr die GPT-3 API in einer Spring Web-Anwendungen sehen wollt, schaut euch einfach mein Projekt bei GitHub https://github.com/elmar-brauch/openai-api an. Dort nutze ich zusätzlich das Spring Framework, um eine Thymeleaf Web-Anwendung mit Chatbot zu bauen.

Fazit

ChatGPT bzw. die GPT-3 API ist eine beeindruckende künstliche Intelligenz. Es macht wirklich Spaß sie zu benutzen. Leider kostet jeder API Aufruf - daher werden auch die Token-Attribute im Request und der Response gesetzt, um die genauen Kosten transparent zu machen. Zum Ausprobieren gibt es aber ein kostenloses Startkapital.


Kommentare

Inga hat gesagt…
Vielen Dank!

Beliebte Posts aus diesem Blog

OpenID Connect mit Spring Boot 3

Authentifizierung in Web-Anwendungen mit Spring Security 6

Reaktive REST-Webservices mit Spring WebFlux