Files
SDL/VERAG_PROG_ALLGEMEIN/Schnittstellen/OPEN_AI/cOpenAI.vb
2025-02-07 08:08:08 +01:00

112 lines
5.0 KiB
VB.net

Imports System.Net.Http
Imports System.Text
Imports System.Threading.Tasks
Imports Newtonsoft.Json.Linq
Public Class cOpenAI
Shared apiKey As String = "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"
Shared apiUrl As String = "https://api.openai.com/v1/chat/completions"
Shared Sub doFirstAI()
'Dim frage As String = "Wie viele Tage braucht ein Versandschein von Istanbul nach München? Gib nur die Zahl zurück."
Dim frage As String = "Schreibe ein HAIKO über AI."
' API-Aufruf und Ausgabe der Antwort
Dim antwort As String = AskOpenAI(frage)
Console.WriteLine("Antwort von OpenAI: " & antwort)
' Console.WriteLine("Drücke eine beliebige Taste zum Beenden...")
' Console.ReadKey()
End Sub
Shared Function askAI_TruckPlate(text) As String
'Dim frage As String = "Wie viele Tage braucht ein Versandschein von Istanbul nach München? Gib nur die Zahl zurück."
'ASKAI_TruckPlate
Dim Prompt = "Extrahiere das oder die LKW-Kennzeichen aus folgendem Text. Es handelt sich vorwiegend um Kennzeichen aus der Türkei, Osteuropa und dem Balkan. Die Kennzeichen sind entweder zusammengeschrieben oder enthalten Leerzeichen.
Regeln:
Falls kein Kennzeichen im Text vorhanden ist, gib eine leere Zeichenkette zurück.
Falls genau ein Kennzeichen erkannt wird, gib es ohne Leerzeichen zurück.
Falls genau zwei Kennzeichen erkannt werden, gib sie ohne Leerzeichen durch einen / getrennt zurück.
Falls mehr als zwei Kennzeichen erkannt werden, gib eine leere Zeichenkette zurück.
Beispiel:
Text: 'Der LKW mit dem Kennzeichen BG 1234 AB wurde kontrolliert, ebenso TR AB123CD'
Erwartete Ausgabe 'BG1234AB/TRAB123CD'
Text: 'Keine Kennzeichen gefunden'
Erwartete Ausgabe ''
Text: 'Die Fahrzeuge RO 123 ABC, TR 45ABC67, PL 123456, UA AB 1234'
Erwartete Ausgabe ''
Text: 'Fahrzeug mit Kennzeichen SRB AB123 und eines mit MD 45 ABC'
Erwartete Ausgabe 'SRBAB123/MD45ABC'
Hier ist der zu analysierende Text '{TEXT}'
gib nur das extrahierte Kennzeichen bzw. die leere Zeichenkette zurück, ohne weitere Kommentare oder Erklärungen."
Console.WriteLine("Go..")
Console.WriteLine(Prompt.Replace("{TEXT}", text))
' API-Aufruf und Ausgabe der Antwort
Return AskOpenAI(Prompt.Replace("{TEXT}", text).Replace("""", "\""").Replace(vbCrLf, " ").Replace(vbLf, " ").Replace(vbCr, " "))
'Console.WriteLine("Antwort von OpenAI: " & antwort)
' Console.WriteLine("Drücke eine beliebige Taste zum Beenden...")
' Console.ReadKey()
End Function
' Funktion zur Kommunikation mit OpenAI API (synchrones Verhalten)
Shared Function AskOpenAI(question As String) As String
Try
Using client As New HttpClient()
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}")
' JSON-Body für die API-Anfrage mit GPT-4o
Dim requestBody As String = "
{
""model"": ""gpt-4o-mini"",
""messages"": [
{""role"": ""user"", ""content"": """ & question & """}
],
""max_tokens"": 10,
""temperature"": 0
}"
Dim content As New StringContent(requestBody, Encoding.UTF8, "application/json")
' POST-Anfrage senden und Antwort synchron verarbeiten
Dim response As HttpResponseMessage = client.PostAsync(apiUrl, content).Result
If response.IsSuccessStatusCode Then
Dim responseBody As String = response.Content.ReadAsStringAsync().Result
' JSON-Antwort parsen, um die OpenAI-Antwort zu extrahieren
Dim jsonResponse As JObject = JObject.Parse(responseBody)
Dim answer As String = jsonResponse("choices")(0)("message")("content").ToString().Trim()
Return answer ' Antwort zurückgeben
Else
Console.WriteLine($"Fehler: {response.StatusCode} - {response.Content.ReadAsStringAsync().Result}")
' Fehlerausgabe bei API-Problemen
Return $"Fehler: {response.StatusCode} - {response.Content.ReadAsStringAsync().Result}"
End If
End Using
Catch ex As Exception
' Allgemeine Fehlerbehandlung
Console.WriteLine($"Fehler: {ex.Message}")
Return $"Fehler: {ex.Message}"
End Try
End Function
End Class