This commit is contained in:
2026-07-19 23:30:33 +02:00
parent 718115a1e4
commit cf75d131cc
12 changed files with 1273 additions and 778 deletions

View File

@@ -1,7 +1,10 @@
Imports System.Net.Http
Imports System.Net.Http.Headers
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks
Imports System.Windows.Forms
Imports Newtonsoft.Json
Imports Newtonsoft.Json.Linq
Public Class cOpenAI
@@ -10,6 +13,8 @@ Public Class cOpenAI
Shared apiKey As String = "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"
Shared apiUrl As String = "https://api.openai.com/v1/responses"
Shared apiKey_VERAG_Herbert As String = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImRmNjg2ZmY2LTJiMjYtNDIxYS1iMTQzLThmNzFmY2I3YjA1ZiIsImV4cCI6MTc4NTkxNzUxMCwianRpIjoiOTViM2MxZGQtMjcxMC00YWY0LTgxMGUtYzVjYWFhODdmNTM2IiwiaWF0IjoxNzgzNDk4MzEwfQ.OJ_GDpZs3Zxv7VvEpKHPjNn8jkJStkm_ruFtmqk_SiE"
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."
@@ -67,7 +72,7 @@ Public Class cOpenAI
' Funktion zur Kommunikation mit OpenAI API (synchrones Verhalten)
Public Shared Function AskOpenAI(question As String,
Optional maxOutputTokens As Integer = 1000) As String
Optional maxOutputTokens As Integer = 1000, Optional model As String = "gpt-4.1-mini") As String
Try
Using client As New HttpClient()
@@ -76,7 +81,7 @@ Public Class cOpenAI
New AuthenticationHeaderValue("Bearer", apiKey.Trim())
Dim requestJson As New JObject From {
{"model", "gpt-4.1-mini"},
{"model", model},
{"input", question},
{"max_output_tokens", maxOutputTokens}
}
@@ -143,6 +148,254 @@ Public Class cOpenAI
End Function
' Funktion zur Kommunikation mit OpenAI API (synchrones Verhalten)
Public Shared Function AskVERAG_HerbertAI(question As String,
Optional maxOutputTokens As Integer = 1000) As String
Using client As New HttpClient()
'client.BaseAddress = New Uri("http://192.168.0.215:11434/")
client.BaseAddress = New Uri("http://192.168.0.215:8000/v1/")
client.DefaultRequestHeaders.Authorization =
New AuthenticationHeaderValue("Bearer", apiKey_VERAG_Herbert)
'Qwen/Qwen2.5-14B-Instruct
Dim payload = New With {
.model = "Herbert",
.messages = New Object() {
New With {.role = "system", .content = "Du bist ein hilfreicher Assistent."},
New With {.role = "user", .content = question}
},
.temperature = 0.2,
.max_tokens = maxOutputTokens,
.stream = False
}
Dim json As String = JsonConvert.SerializeObject(payload)
Dim content As New StringContent(json, Encoding.UTF8, "application/json")
Dim response As HttpResponseMessage =
client.PostAsync("http://192.168.0.215:8000/v1/chat/completions", content).
GetAwaiter().
GetResult()
Dim resultJson As String =
response.Content.ReadAsStringAsync().GetAwaiter().GetResult()
If Not response.IsSuccessStatusCode Then
Throw New Exception("OpenWebUI Fehler: " & response.StatusCode.ToString() & vbCrLf & resultJson)
End If
Dim obj As JObject = JObject.Parse(resultJson)
Return obj("choices")(0)("message")("content").ToString()
End Using
End Function
Shared Function askAI_Kontakdaten_WebResearch(eingabe As String) As String
Dim prompt As String =
"Du bist ein B2B Contact Finder.
Such im Web nach den Kontaktdaten, vorwiegend Telefon + Mail
Accurancy ist die Wahrscheinlcihkeit, dass es sich um das gescuht UNternehmen handelt;
Ausgabeformat:
Treffer 1
Quelle:
Unternehmen:
Website:
Telefon:
E-Mail:
Adresse:
Accurancy:
Falls mehrere plausible Unternehmen gefunden werden, gib maximal 3 Treffer aus.
Jeder Treffer muss vollständig von einer Quelle sein sein.
Kein eindeutiger Treffer möglich.
Grund: ...
EINGABE: [[" & eingabe & "]]
"
Console.WriteLine(prompt)
Return AskOpenAI(prompt, 10000, "gpt-5.5")
End Function
Shared Function askAI_HERBERT_Allg(prompt As String) As String
Console.WriteLine(prompt)
Dim antwort As String = AskVERAG_HerbertAI(prompt, 2500)
Console.WriteLine(antwort)
Return antwort
End Function
Shared Function askAI_HERBERT_Kontakdaten_WebResearch(eingabe As String) As String
Dim prompt As String =
"Du bist ein B2B Contact Finder.
HARTE REGEL:
Jeder Treffer darf ausschließlich Daten aus einer einzigen Quelle enthalten.
Standardquelle ist die offizielle Unternehmenswebsite.
Das Mischen von Website, Telefonnummer, E-Mail-Adresse oder Adresse aus unterschiedlichen Quellen ist verboten.
Ziel:
Finde möglichst schnell die Telefonnummer und E-Mail-Adresse eines Unternehmens.
Eingabe:
Die Eingabe ist unstrukturiert und kann Firmenname, Ort, PLZ, Land, Website, Telefonnummer, E-Mail oder Freitext enthalten.
Arbeitsweise:
Identifiziere das wahrscheinlich richtige Unternehmen.
Ermittle die offizielle Website.
Verwende danach ausschließlich diese Website als Quelle.
Suche dort zuerst auf der Kontaktseite, danach im Impressum.
Telefon, E-Mail und Adresse dürfen nur ausgegeben werden, wenn sie auf derselben offiziellen Website gefunden wurden.
Sobald Telefonnummer oder E-Mail gefunden wurden, beende die Recherche.
Nur wenn keine offizielle Website eindeutig gefunden wird, verwende Google Maps als einzige alternative Quelle.
Wenn Google Maps verwendet wird, dürfen alle ausgegebenen Daten nur aus Google Maps stammen.
Nutze keine weiteren Quellen.
Recherchiere keine Ansprechpartner.
Regeln:
Ein Treffer = eine Quelle.
Keine Daten aus mehreren Quellen kombinieren.
Verwende nur Informationen, die eindeutig demselben Unternehmen zugeordnet sind.
Erfinde keine Daten.
Rate keine Telefonnummern, E-Mail-Adressen, Domains oder Adressen.
Korrigiere keine Domains durch Vermutung.
Bei Unsicherheit Information weglassen.
Wenn nur Telefon gefunden wird, gib nur Telefon aus.
Wenn nur E-Mail gefunden wird, gib nur E-Mail aus.
Keine Platzhalter wie N/A, unbekannt oder nicht gefunden.
Keine Faxnummern, Handelsregisterdaten, Rechtsform, Branche, Umsatz oder UID.
Ausgabe kurz und ohne Fließtext.
Ausgabeformat:
Treffer 1
Quelle:
Unternehmen:
Website:
Telefon:
E-Mail:
Adresse:
Falls mehrere plausible Unternehmen gefunden werden, gib maximal 3 Treffer aus.
Jeder Treffer muss vollständig quellenrein sein.
Falls kein eindeutiger Treffer möglich ist:
Kein eindeutiger Treffer möglich.
Grund: ...
EINGABE: [[" & eingabe & "]]
"
Console.WriteLine(prompt)
Dim antwort As String = AskVERAG_HerbertAI(prompt, 2500)
Console.WriteLine(antwort)
Return antwort
End Function
Shared Function askAI_Kontakdaten_WebResearcADVh(eingabe As String) As String
Dim prompt As String =
"Du bist ein B2B Contact Finder.
HARTE REGEL:
Jeder Treffer darf ausschließlich Daten aus einer einzigen Quelle enthalten.
Standardquelle ist die offizielle Unternehmenswebsite.
Das Mischen von Website, Telefonnummer, E-Mail-Adresse oder Adresse aus unterschiedlichen Quellen ist verboten.
Ziel:
Finde möglichst schnell die Telefonnummer und E-Mail-Adresse eines Unternehmens.
Eingabe:
Die Eingabe ist unstrukturiert und kann Firmenname, Ort, PLZ, Land, Website, Telefonnummer, E-Mail oder Freitext enthalten.
Arbeitsweise:
Identifiziere das wahrscheinlich richtige Unternehmen.
Ermittle die offizielle Website.
Verwende danach ausschließlich diese Website als Quelle.
Suche dort zuerst auf der Kontaktseite, danach im Impressum.
Telefon, E-Mail und Adresse dürfen nur ausgegeben werden, wenn sie auf derselben offiziellen Website gefunden wurden.
Sobald Telefonnummer oder E-Mail gefunden wurden, beende die Recherche.
Nur wenn keine offizielle Website eindeutig gefunden wird, verwende Google Maps als einzige alternative Quelle.
Wenn Google Maps verwendet wird, dürfen alle ausgegebenen Daten nur aus Google Maps stammen.
Nutze keine weiteren Quellen.
Recherchiere keine Ansprechpartner.
Regeln:
Ein Treffer = eine Quelle.
Keine Daten aus mehreren Quellen kombinieren.
Verwende nur Informationen, die eindeutig demselben Unternehmen zugeordnet sind.
Erfinde keine Daten.
Rate keine Telefonnummern, E-Mail-Adressen, Domains oder Adressen.
Korrigiere keine Domains durch Vermutung.
Bei Unsicherheit Information weglassen.
Wenn nur Telefon gefunden wird, gib nur Telefon aus.
Wenn nur E-Mail gefunden wird, gib nur E-Mail aus.
Keine Platzhalter wie N/A, unbekannt oder nicht gefunden.
Keine Faxnummern, Handelsregisterdaten, Rechtsform, Branche, Umsatz oder UID.
Ausgabe kurz und ohne Fließtext.
Ausgabeformat:
Treffer 1
Quelle:
Unternehmen:
Website:
Telefon:
E-Mail:
Adresse:
Falls mehrere plausible Unternehmen gefunden werden, gib maximal 3 Treffer aus.
Jeder Treffer muss vollständig quellenrein sein.
Falls kein eindeutiger Treffer möglich ist:
Kein eindeutiger Treffer möglich.
Grund: ...
EINGABE: [[" & eingabe & "]]
"
Console.WriteLine(prompt)
Return AskOpenAI(prompt, 10000, "gpt-5.5")
End Function
Shared Function askAI_Zolltarif(
unternehmensbeschreibung As String,
artikel As List(Of ZollArtikelInput)