Files

152 lines
4.1 KiB
Markdown
Raw Permalink 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.
# 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.
Bei Completed-Berichten werden die Zeilennummern und Rechnungsnummern
der KI-Befunde mit dem ursprünglichen Prüfbericht abgeglichen.
Befunde für dort gültige Zeilen werden zurückgewiesen.
Vertragsverletzungen führen zu Exitcode 2 und keiner Analyse auf stdout.