Azure OpenAI stellt eine REST-API für die Interaktion und zum Generieren von Antworten bereit. Diese können Entwickler nutzen, um Anwendungen KI-Funktionen hinzuzufügen. Wir zeigen im Folgenden, wie sich komfortabel mit REST-API und Software Development Kits arbeiten lässt.
Bevor eine Interaktion mit der API möglich ist, müssen wir eine OpenAI-Ressource im Azure-Portal erstellen, dort das Azure OpenAI Studio aufrufen, darin ein Modell bereitstellen und dann den Endpunkt und die zugehörigen Schlüssel abrufen. Schlüssel und Endpunkte finden sich in der Azure-OpenAI-Ressource u. a. unter „Ressourcenverwaltung / Schlüssel und Endpunkt“:
Für jeden Aufruf der REST-API werden jeweils der Endpunkt, ein Schlüssel aus der Azure OpenAI-Ressource und der für das bereitgestellte Modell verwendete Name benötigt. Das lässt sich einfach ausprobieren: Wurde ein Modell in einer AOAI-Ressource bereitgestellt, kann man im Falle des Modells vom Typ „Completion“ mit Hilfe einer HTTP-POST-Anforderung eine „Aussage“ an den Dienst senden. Dabei ist „completion“ der Endpunkt, der für Vervollständigungen zuständig ist.
Zum Senden der REST-Anforderung empfiehlt sich ein beliebiges geeignetes Werkzeug, wie z. B. „Postman“ oder die Development-Tools des favorisierten Browsers. Eine HTTP-POST-Anfrage wie …
curl https://<your endpoint>.openai.azure.com/openai/deployments/<your deployment>/chat/completions?api-version=2023-03-15-preview \
-H „Content-Type: application/json“ \
-H „api-key: <your_api_key“ \
-d „{
\“prompt\“: \“Your favorite Shakespeare is\“,
\“max_tokens\“: 5
}“
… sollte ein vergleichbares JSON-Ergebnis wie das Folgende liefern
{
"id": "<id>",
"object": "text_completion",
"created": 1679001781,
"model": "text-davinci-003",
"choices": [
{
"text": "Hamlet",
"index": 0,
"logprobs": null,
"finish_reason": "stop"
}
]}
Die zu suchende Vervollständigungsantwort findet sich innerhalb von „choices[].text“. Bemerkenswert ist, dass die Antwort auch „finish_reason“ enthält, was in diesem Beispiel „stop“ ist. Eine andere Möglichkeit für „finish_reason“ wären „in length“. Das würde bedeuten, dass der in der Anforderung angegebene Wert für „max_tokens“ überschritten ist. Ein „content_filter“ als Grund würde bedeuten, dass das System von der Äußerung generierte schädliche Inhalte erkannt hat. Ist das Fall, gibt die API-Anforderung einen Fehler zurück.
„Normale“ Vervollständigungen sind sicher interessant, viele Entwickler und Entwicklerinnen sind aber wohl mehr an einer Chat-Integration in ihre Anwendung interessiert. Anstelle von „completions“ verwenden sie in ihrer Anforderung dann „chat/completions“. Wer mag, kann das auch vorab im „Playground“ des Azure-OpenAI-Studios ausprobieren.
Der Playground im Azure OpenAI-Studio ist vielseitig. Beispielsweise können wir hier auf „JSON-Rohdaten anzeigen“ klicken, um selbige sichtbar zu machen.
Alternativ können wir schauen, was passiert, wenn der Schieber bei „Code anzeigen“ bestätigt wird. Das Tool zeigt dann den Quellecode für „json“, „python“, „c#“ oder „curl“ entsprechend der Auswahl rechts oben. Außerdem findet sich unten den zuständigen Endpunkt, wie in unserem Beispiel „https://driopenai[…]?api-version=2023-07-01-preview“ und den zugehörigen Schlüssel.
Das Tolle dabei ist, dass sich die benötigen Werte hier bequem kopieren lassen, falls man beispielsweise REST-Anfragen mit einem anderen Werkzeug, wie z. B. den Entwicklertools des Browsers oder mit Postman, an den Endpunkt senden möchte. In Postman sähe das etwa so aus, wie im vorangestellten Bild.
Den benötigten Endpunkt kennen wir ja bereits und können ihn oben im Anfrage-Feld eintragen. Als HTTP-REST-Methode verwenden wir „POST“. Der API-Schlüssel lässt sich im Tab „Authorization“ als Bearer-Token hinterlegen. Den übrigen Quellcode fügen wir im Tab „Body“ im „raw“-Format ein. Der „Typ“ wird in der Werkzeugleiste des Body-Tabs rechts oben auf „JSON“ eingestellt. Auf die gleiche Weise können wir nun weitere Fragen an den Dienst senden und damit das Code-Fragment für unsere Anwendung testen und optimieren.