3.8 KiB
ImportAssist
Eigenprojekt zur Weiterbildung in C#, Azure und KI-Integration.
ImportAssist prüft synthetische Rechnungsdaten. Die lokale Verarbeitung läuft über eine Konsole, einen HTTP-Endpunkt oder einen Blob-Trigger mit Azurite.
Voraussetzungen
- .NET-10-SDK gemäß global.json
- Azure Functions Core Tools 4
- Azurite
- Unter Arch Linux: aspnet-targeting-pack
Alle folgenden relativen Pfade beziehen sich auf das Repository.
Lokal starten
Terminal 1 — Azurite:
"$HOME/.local/bin/azurite" \
--location "$HOME/.local/share/ImportAssist/azurite"
Terminal 2 — Functions-Host:
cd src/ImportAssist.Functions
func start
In local.settings.json werden folgende Values benötigt:
{
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
}
CSV prüfen
Direkt über die Konsole:
dotnet run --project src/ImportAssist.Cli -- samples/invoices.csv
Über einen Blob-Upload:
dotnet run --project tools/ImportAssist.Upload -- samples/invoices.csv
Nach abgeschlossener Verarbeitung den Bericht lesen. BLOBNAME.csv durch den Namen aus der Upload-Ausgabe ersetzen:
dotnet run --project tools/ImportAssist.Upload -- result "BLOBNAME.csv"
Eingaben liegen im Container imports, Berichte in results.
CSV-Format
- Kopfzeile: InvoiceId;CustomerId;Amount;Currency
- Vier durch Semikolon getrennte Felder pro Zeile
- Keine Anführungszeichen oder Zeilenumbrüche innerhalb eines Feldes
- Beträge mit Dezimalpunkt, ohne Tausendertrennzeichen
Prüfregeln: Rechnungsnummer und Kundennummer müssen vorhanden sein; der Betrag muss eine gültige positive Zahl sein. Die Währung wird bislang nicht fachlich geprüft.
Prüfberichte
- Completed: Alle Zeilen wurden fachlich geprüft. Einzelne Rechnungen können fehlerhaft sein.
- Rejected: CSV-Struktur ungültig; keine fachliche Prüfung. Die Ursache steht in fileErrors.
samples/invoices.csv ergibt eine gültige und vier fehlerhafte Rechnungen.
samples/invoices-invalid-structure.csv wird wegen einer fehlenden Spalte in Zeile 3 abgewiesen.
Beenden
Functions-Host und Azurite jeweils mit Strg+C beenden. Azurite speichert seine Daten im angegebenen lokalen Verzeichnis.
Aktueller Umfang
Lokaler Prototyp mit synthetischen Daten. Cloud-Deployment und KI-Anbindung stehen noch aus.
KI-Analyse aus C#
ImportAssist.Analyze liest Analyseprompt, Schnittstellenbeschreibung
und einen gespeicherten JSON-Prüfbericht ein und ruft Azure OpenAI auf.
Lokale Konfiguration
User Secrets für das Projekt initialisieren:
dotnet user-secrets init --project tools/ImportAssist.Analyze
Folgende Konfigurationswerte im zugehörigen User-Secrets-Speicher setzen:
- AzureOpenAI:Endpoint – Azure-OpenAI-Basisadresse der Ressource
- AzureOpenAI:Deployment – importassist-analysis
- AzureOpenAI:ApiKey – Schlüssel der Ressource
API-Schlüssel ausschließlich lokal hinterlegen. User Secrets liegen außerhalb des Repositorys, sind aber unverschlüsselt.
Ausführen
Alle Befehle aus dem Repository-Hauptverzeichnis ausführen:
dotnet run --project tools/ImportAssist.Analyze -- \
samples/invoices-report.json
dotnet run --no-build --project tools/ImportAssist.Analyze -- \
samples/invoices-rejected-report.json
Azurite und der Functions-Host werden für diese gespeicherten Berichte nicht benötigt. Der Modellaufruf benötigt eine Internetverbindung.
Die Analyse erscheint auf stdout; Statusmeldungen und Tokenverbrauch erscheinen auf stderr.
Exitcodes:
- 0: Modellantwort regulär abgeschlossen; keine fachliche Qualitätsgarantie.
- 1: Konfigurations-, Datei- oder Aufruffehler.
- 2: Modellantwort nicht regulär abgeschlossen.
Die Antwort ist Freitext. Eine automatische fachliche Bewertung und ein verbindliches JSON-Ausgabeformat sind noch nicht implementiert.