Files
SDL/VERAG_PROG_ALLGEMEIN/Schnittstellen/OPEN_AI/cOpenAI.vb
2026-07-19 23:30:33 +02:00

575 lines
26 KiB
VB.net
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
'Shared apiKey As String = "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"
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."
' 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)
Public Shared Function AskOpenAI(question As String,
Optional maxOutputTokens As Integer = 1000, Optional model As String = "gpt-4.1-mini") As String
Try
Using client As New HttpClient()
client.DefaultRequestHeaders.Authorization =
New AuthenticationHeaderValue("Bearer", apiKey.Trim())
Dim requestJson As New JObject From {
{"model", model},
{"input", question},
{"max_output_tokens", maxOutputTokens}
}
Dim content As New StringContent(
requestJson.ToString(),
Encoding.UTF8,
"application/json"
)
Dim response As HttpResponseMessage =
client.PostAsync(apiUrl, content).Result
Dim responseBody As String =
response.Content.ReadAsStringAsync().Result
If Not response.IsSuccessStatusCode Then
Return "Fehler: " & response.StatusCode.ToString() &
Environment.NewLine & responseBody
End If
Dim json As JObject = JObject.Parse(responseBody)
' 1. Standard-Fall: output_text direkt vorhanden
If json("output_text") IsNot Nothing Then
Return json("output_text").ToString().Trim()
End If
' 2. Fallback: output/content/text durchsuchen
Dim output = json("output")
If output IsNot Nothing AndAlso output.Type = JTokenType.Array Then
For Each item As JToken In output
Dim contentArray = item("content")
If contentArray IsNot Nothing AndAlso contentArray.Type = JTokenType.Array Then
For Each contentItem As JToken In contentArray
If contentItem("text") IsNot Nothing Then
Return contentItem("text").ToString().Trim()
End If
Next
End If
Next
End If
' 3. Wenn nichts gefunden wurde: gesamte Antwort zurückgeben
Return "Keine Textantwort gefunden." &
Environment.NewLine &
responseBody
End Using
Catch ex As Exception
Return "Fehler: " & ex.ToString()
End Try
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)
) As String
Dim inputJson As New JObject From {
{"unternehmensbeschreibung", unternehmensbeschreibung},
{"artikel", New JArray(
artikel.Select(Function(a) New JObject From {
{"artikelnummer", a.artikelnummer},
{"kundenwarenbeschreibung", a.kundenwarenbeschreibung},
{"kn8_text", a.kn8_text},
{"moegliche_eu_tarifnummern", New JArray(If(a.moegliche_eu_tarifnummern, New List(Of String)))},
{"tarifnummer_tuerkei", a.tarifnummer_tuerkei}
})
)}
}
Dim prompt As String =
"Du bist ein Zolltarif-Klassifizierungsassistent für Deutschland/EU und das Vereinigte Königreich.
Aufgabe
Ermittle für jeden übergebenen Artikel die wahrscheinlich zutreffende vollständige Zolltarifnummer für Deutschland/EU sowie für UK.
Die Ausgabe muss ausschließlich als valides JSON-Array erfolgen.
Priorität der Informationen
1. Alle verfügbaren Informationen sind gemeinsam zu bewerten.
2. Der KN8-Text ist die wichtigste Einzelinformation und dient als Grundlage für die zolltarifliche Einordnung.
3. Mögliche EU-Tarifnummern sind sehr wahrscheinliche Kandidaten und besonders zu berücksichtigen.
4. Die Kundenwarenbeschreibung dient der Präzisierung.
5. Die Unternehmensbeschreibung liefert fachlichen Kontext.
6. Die türkische Tarifnummer dient ausschließlich der Plausibilitätsprüfung.
Regeln
- Die Liste `moegliche_eu_tarifnummern` ist die einzige zulässige Quelle für 11-stellige EU EZT-Codenummern.
- Kommt die ermittelte 11-stellige EZT-Codenummer nicht exakt in `moegliche_eu_tarifnummern` vor, darf sie nicht ausgegeben werden.
- In diesem Fall ist stattdessen ausschließlich die passende 8-stellige KN-Unterposition auszugeben. - Für Deutschland grundsätzlich die vollständige 11-stellige EZT-Codenummer verwenden.
- Für UK die vollständige 10-stellige UK Global Tariff Nummer verwenden.
- Die deutsche Tarifnummer muss entweder genau 11 Ziffern oder falls keine eindeutige vollständige EZT-Codenummer bestimmt werden kann genau 8 Ziffern (KN-Unterposition) enthalten.
- Die UK-Tarifnummer muss immer genau 10 Ziffern enthalten.
- Keine Leerzeichen, Punkte oder sonstige Trennzeichen ausgeben.
- Eine 11-stellige deutsche EZT-Codenummer darf ausschließlich verwendet werden, wenn sie vollständig in der Liste `moegliche_eu_tarifnummern` enthalten ist.
- Ist keine passende 11-stellige EZT-Codenummer in `moegliche_eu_tarifnummern` enthalten, darf keine neue 11-stellige Nummer erzeugt oder ergänzt werden.
- In diesem Fall ist ausschließlich die wahrscheinlichste 8-stellige KN-Unterposition auszugeben.
- Die 8-stellige KN-Unterposition darf anhand aller verfügbaren Informationen selbst ermittelt werden.
- Die UK-Tarifnummer ist unabhängig hiervon anhand aller verfügbaren Informationen zu bestimmen.
- Falls keine ausreichend sichere Einstufung möglich ist, null verwenden.
- Accuracy realistisch zwischen 0 und 100 schätzen.
- Der Klassifizierungsgrund darf maximal zwei kurze Sätze umfassen.
- Die Reihenfolge der Ausgabe muss exakt der Reihenfolge der Eingabe entsprechen.
- Keine Erklärungen, kein Markdown, keine zusätzlichen Texte, ausschließlich gültiges JSON.
Warenbezeichnung
- Erstelle zusätzlich eine zollfachlich präzise Warenbezeichnung.
- Die Warenbezeichnung dient der zollrechtlichen Identifizierung der Ware und nicht der Wiedergabe des KN8-Textes.
- Der KN8-Text ist als Grundlage für die Einordnung zu verwenden, darf jedoch nicht wörtlich oder nahezu unverändert übernommen werden.
- Übernimm aus dem KN8-Text lediglich die zutreffende allgemeine Warengruppe, gegebenenfalls in verkürzter oder sprachlich angepasster Form.
- Ergänze anschließend sofern anhand der übrigen Informationen eindeutig möglich die konkrete Ware mit ', hier: ' (DE) bzw. ', here: ' (UK).
- Ziel ist eine präzisere Warenbezeichnung als der KN8-Text, welche die Ware für einen Zollsachbearbeiter möglichst eindeutig beschreibt.
- Leite die Warenbezeichnung aus allen verfügbaren Informationen ab (KN8-Text, Kundenwarenbeschreibung, mögliche EU-Tarifnummern, Unternehmensbeschreibung und türkische Tarifnummer).
- Nutze die Terminologie, wie sie üblicherweise im Zolltarif (KN, TARIC, EZT bzw. UK Global Tariff), in den Erläuterungen zur Kombinierten Nomenklatur oder in verbindlichen Zolltarifauskünften verwendet wird.
- Die Warenbezeichnung soll einem Zollsachbearbeiter eine möglichst eindeutige zollrechtliche Identifizierung ermöglichen.
- Es handelt sich ausdrücklich nicht um eine Übersetzung oder Kopie des KN8-Textes und nicht um eine Marketing- oder Verkaufsbezeichnung.
- Beschreibe die Ware anhand ihrer objektiven Merkmale:
- Art der Ware
- Hauptfunktion
- Material (soweit tarifrelevant oder eindeutig bekannt)
- Bauart oder Ausführung (soweit tarifrelevant)
- Erstelle für Deutschland/EU die Warenbezeichnung ausschließlich in deutscher Sprache.
- Erstelle für UK die Warenbezeichnung ausschließlich in englischer Sprache.
- Verwende keine fremdsprachigen Gattungs- oder Produktbezeichnungen in der jeweiligen Ausgabe.
- Übersetze allgemeine Warenbezeichnungen und Produktarten immer in die jeweilige Landessprache.
- Marken-, Firmen- und Modellbezeichnungen (z. B. Bosch, KitchenAid, Karaca, Thermomix) werden nicht übersetzt und dürfen nur verwendet werden, wenn sie zur eindeutigen Identifizierung der Ware erforderlich sind.
- Allgemeine Marketingbegriffe oder Verkaufsbezeichnungen sind in fachlich zutreffende Warenbezeichnungen umzuwandeln.
- Die Warenbezeichnung soll grundsätzlich nach folgendem Schema aufgebaut sein:
Allgemeine Warengruppe, hier: konkrete Ware
- Die allgemeine Warengruppe soll sich am Zolltarif orientieren, jedoch kürzer und fachlich präziser formuliert sein als der KN8-Text.
- Die allgemeine Warengruppe soll die tarifliche Einordnung widerspiegeln und nicht den vollständigen Wortlaut des KN8-Textes übernehmen.
- Die konkrete Ware hinter ', hier: ' bzw. ', here: ' soll möglichst die tatsächliche Handelsbezeichnung oder den konkreten Gegenstand beschreiben und die allgemeine Warengruppe präzisieren.
- Falls der KN8-Text bereits eine konkrete Warenbezeichnung enthält (z. B. 'Küchenmesser', 'Wasserkocher', 'Speiseteller'), darf diese übernommen werden.
- Enthält der KN8-Text lediglich eine allgemeine Warengruppe (z. B. 'Elektrische Haushaltsgeräte', 'Haushaltsgeschirr aus Porzellan', 'Glaswaren für den Haushalt'), ist diese als allgemeine Warengruppe zu verwenden und anhand der übrigen Informationen mit ', hier: ' bzw. ', here: ' zu präzisieren.
- Ziel ist ausdrücklich eine präzisere und zollfachlich treffendere Warenbezeichnung als der KN8-Text.
- Ist keine konkrete Ware eindeutig ableitbar, entfällt der Zusatz ', hier: ' bzw. ', here: ' und es bleibt bei der allgemeinen Warengruppe.
- Verwende nur tatsächlich vorhandene oder eindeutig ableitbare Produktbezeichnungen.
- Keine erfundenen Eigenschaften oder Modellbezeichnungen.
- Die Warenbezeichnung soll möglichst zwischen 3 und 12 Wörtern umfassen, außer eine längere tariftechnische Bezeichnung ist erforderlich.
- Keine Werbesprache.
- Keine bloße Wiederholung des KN8-Textes.
- Keine Maße, Farben, Verpackungsgrößen oder sonstige Eigenschaften aufnehmen, sofern diese für die Tarifierung nicht relevant sind.
Wichtig
- Die deutsche Warenbezeichnung darf keine englischen, türkischen oder sonstigen fremdsprachigen Produktbezeichnungen enthalten.
- Die englische Warenbezeichnung darf keine deutschen, türkischen oder sonstigen fremdsprachigen Produktbezeichnungen enthalten.
- Ausgenommen sind international gebräuchliche Marken-, Firmen- und Modellnamen.
Beispiele DE
- Elektrischer Heißluftgarer
- Elektrischer Haushaltsgrill, hier: Heißluftfritteuse
- Elektrischer Wasserkocher
- Elektrische Küchenmaschine, hier: Standmixer
- Elektrischer Stabmixer
- Haushaltsgeschirr aus Porzellan, hier: Speiseteller
- Haushaltsgeschirr aus Porzellan, hier: Suppenteller
- Küchenmesser, hier: Kochmesser
- Besteck aus nichtrostendem Stahl, hier: Tafelgabel
- Glaswaren für den Haushalt, hier: Trinkglas
- Glaswaren für den Haushalt, hier: Vorratsglas
- Kochgeschirr aus Gusseisen, hier: Kochtopf
- Keramikwaren für den Haushalt, hier: Trinkbecher
Beispiele UK
- Electric hot air cooker
- Electric domestic grill, here: air fryer
- Electric kettle
- Electric food preparation machine, here: countertop blender
- Electric hand blender
- Household tableware of porcelain, here: dinner plate
- Household tableware of porcelain, here: soup plate
- Kitchen knife, here: chef's knife
- Stainless steel cutlery, here: table fork
- Glassware for household use, here: drinking glass
- Glassware for household use, here: storage jar
- Cast iron cookware, here: cooking pot
- Household ceramic ware, here: drinking mug
Klassifizierungsgrund
- Begründe die Einstufung ausschließlich anhand der objektiven Merkmale der Ware.
- Nenne ausschließlich die tarifrelevanten Eigenschaften.
- Maximal zwei kurze Sätze.
JSON-Ausgabe
[
{
""artikelnummer"": ""..."",
""moegliche_eu_tarifnummern"": ""12301234561,12365478911,12365498712"",
""tarifnummer_eu"": ""1234567890"",
""accuracy_eu"": 95,
""warenbezeichnung_de"": ""..."",
""klassifizierungsgrund_eu"": ""..."",
""tarifnummer_uk"": ""1234567890"",
""accuracy_uk"": 93,
""goods_description_uk"": ""..."",
""classification_reason_uk"": ""...""
}
]
Eingabe:
" & inputJson.ToString(Newtonsoft.Json.Formatting.None)
Console.WriteLine(prompt)
Return AskOpenAI(prompt, 25000)
End Function
Public Class ZollArtikelInput
Public Property artikelnummer As String
Public Property kundenwarenbeschreibung As String
Public Property kn8_text As String
Public Property moegliche_eu_tarifnummern As List(Of String)
Public Property tarifnummer_tuerkei As String
End Class
End Class