146 lines
3.8 KiB
Markdown
146 lines
3.8 KiB
Markdown
# 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:
|
||
|
||
```bash
|
||
"$HOME/.local/bin/azurite" \
|
||
--location "$HOME/.local/share/ImportAssist/azurite"
|
||
```
|
||
|
||
Terminal 2 — Functions-Host:
|
||
|
||
```bash
|
||
cd src/ImportAssist.Functions
|
||
func start
|
||
```
|
||
|
||
In local.settings.json werden folgende Values benötigt:
|
||
|
||
```json
|
||
{
|
||
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
|
||
"FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated"
|
||
}
|
||
```
|
||
|
||
## CSV prüfen
|
||
|
||
Direkt über die Konsole:
|
||
|
||
```bash
|
||
dotnet run --project src/ImportAssist.Cli -- samples/invoices.csv
|
||
```
|
||
|
||
Über einen Blob-Upload:
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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:
|
||
|
||
```bash
|
||
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. |