KI: Inventar-Vervollständigung via Copilot Chat + REST Edit-Endpoint #56

Closed
opened 2026-05-16 15:17:12 +00:00 by jreinemann-euris · 0 comments
jreinemann-euris commented 2026-05-16 15:17:12 +00:00 (Migrated from github.com)

Ziel

KI-gestützte Vervollständigung lückenhafter Artikelinformationen – gesteuert über Copilot Chat statt direkt aus der App.
Der Chatbot (Copilot) fragt das REST-API des Servers ab, analysiert das Inventar, schlägt Ergänzungen vor und schreibt akzeptierte Änderungen über eine neue Edit-API zurück.

Kostengrund: Kein Claude-API-Key in der App, kein In-App-AI-Workflow.
Die KI-Vervollständigung wird manuell aus einem Chatfenster (z.B. Copilot Chat in VS Code) ausgelöst.


Architektur-Überblick

Copilot Chat ──GET /api/inventory──▶ REST Server ──▶ DB
     │                                    ▲
     │  (KI analysiert Lücken,            │
     │   zeigt Vorschläge im Chat)        │
     │                                    │
     └──PATCH /api/inventory/items/{id}───┘
            (akzeptierte Änderungen)

REST-Server Änderungen

1. Neuer Endpoint: Einzelnen Artikel updaten

PATCH /api/inventory/items/{id} (API-Key-geschützt)

  • Akzeptiert ein partielles ItemDto-JSON (nur geänderte Felder + id)
  • Aktualisiert die übergebenen Felder in der DB
  • Gibt den aktualisierten Artikel als vollständiges ItemDto zurück
  • Fehler: 404 wenn Item nicht existiert, 400 bei ungültigem Body

2. Bestehende Endpoints bleiben

Endpoint Methode Beschreibung
/api/health GET Health Check
/api/inventory GET Gesamtes Inventar abrufen
/api/inventory PUT Inventar komplett ersetzen (Sync)
/api/inventory/items/{id} PATCH NEU: Einzelnen Artikel updaten

Copilot-Chat Workflow (Gesamt-Inventar)

  1. Inventar laden: Chatbot ruft GET /api/inventory auf → erhält JSON mit allen Items, Kategorien, Orten
  2. Lücken identifizieren: KI scannt alle Items und identifiziert fehlende/unvollständige Daten (kein kcalPerKg, keine notes, fehlende Kategorie etc.)
  3. Items ohne Lücken werden übersprungen
  4. Strukturierte Vorschläge pro Artikel: Für jeden lückenhaften Artikel zeigt der Chatbot eine Maske:
    📦 Artikel: „Corned Beef" (ID: abc-123)
    Vorgeschlagene Vervollständigungen:
      • notes: „Haltbar bis zu 5 Jahre, proteinreich"
      • kcalPerKg: 2500
    
    Optionen: [Einzeln anwenden] [Alle anwenden] [Überspringen] [Abbrechen]
    
  5. User-Interaktion:
    • Einzeln anwenden: User wählt einzelne Felder zur Übernahme
    • Alle anwenden: Alle Vorschläge für diesen Artikel übernehmen
    • Überspringen: Artikel wird nicht geändert, weiter zum nächsten
    • Abbrechen: Vorgang wird gestoppt, bisherige Änderungen bleiben erhalten
  6. Speichern: Bei Übernahme ruft der Chatbot PATCH /api/inventory/items/{id} auf und bestätigt das Update
  7. Nächster Artikel: Weiter mit dem nächsten lückenhaften Artikel

Copilot-Chat Workflow (Einzelartikel)

Identischer Ablauf, aber nur für einen bestimmten Artikel (z.B. User nennt den Artikelnamen oder die ID).


App-Änderungen

Entfernen

  • Button „Inventar vervollständigen" (Optionen-Screen) → entfällt komplett
  • Button „Mit KI vervollständigen" (Artikel-Detailseite) → entfällt komplett
  • Claude API Key in Einstellungen → entfällt komplett
  • In-App Review-UI für KI-Vorschläge → entfällt komplett

Diese Funktionen existieren aktuell noch nicht in der App – es müssen also keine UI-Elemente gelöscht werden, sondern sie werden einfach nicht implementiert.


Technische Anforderungen

  • PATCH-Endpoint: Im bestehenden Ktor-Server (InventoryRoutes.kt) implementieren
  • Repository: InventoryRepository um updateItem(id, partialItem) erweitern
  • Shared DTO: ggf. partielles Update-DTO oder nullable Felder in ItemDto nutzen
  • Auth: Gleiche API-Key-Authentifizierung wie bestehende Endpoints
  • Validierung: Item-ID muss existieren, Feldtypen müssen stimmen
  • Tests: Unit-Tests für den neuen Endpoint (Repository + Route)

User-Konzept (Vorgriff)

Aktuell gibt es noch kein User-Konzept am Server. Der Chatbot arbeitet mit dem gesamten Inventar des Servers.
Sobald User-IDs existieren (zukünftiges Ticket), wird der Inventar-Abruf auf GET /api/users/{userId}/inventory umgestellt.


Akzeptanzkriterien

  • PATCH /api/inventory/items/{id} implementiert und API-Key-geschützt
  • Partielles Update: nur übergebene Felder werden geändert
  • 404-Response wenn Item nicht existiert
  • Aktualisiertes Item wird als Response zurückgegeben
  • Bestehende Endpoints (GET /api/inventory, PUT /api/inventory) unverändert
  • Unit-Tests für neuen Endpoint (Happy Path + Fehlerfälle)
  • Kein Claude-API-Key, keine In-App-KI-UI implementiert
  • Copilot-Chat kann Inventar per REST abrufen und Artikel updaten
  • Review-Workflow im Chat: strukturierte Maske pro Artikel mit Einzeln/Alle/Überspringen/Abbrechen
## Ziel KI-gestützte Vervollständigung lückenhafter Artikelinformationen – **gesteuert über Copilot Chat** statt direkt aus der App. Der Chatbot (Copilot) fragt das REST-API des Servers ab, analysiert das Inventar, schlägt Ergänzungen vor und schreibt akzeptierte Änderungen über eine neue Edit-API zurück. > **Kostengrund:** Kein Claude-API-Key in der App, kein In-App-AI-Workflow. > Die KI-Vervollständigung wird manuell aus einem Chatfenster (z.B. Copilot Chat in VS Code) ausgelöst. --- ## Architektur-Überblick ``` Copilot Chat ──GET /api/inventory──▶ REST Server ──▶ DB │ ▲ │ (KI analysiert Lücken, │ │ zeigt Vorschläge im Chat) │ │ │ └──PATCH /api/inventory/items/{id}───┘ (akzeptierte Änderungen) ``` --- ## REST-Server Änderungen ### 1. Neuer Endpoint: Einzelnen Artikel updaten **`PATCH /api/inventory/items/{id}`** (API-Key-geschützt) - Akzeptiert ein partielles `ItemDto`-JSON (nur geänderte Felder + `id`) - Aktualisiert die übergebenen Felder in der DB - Gibt den aktualisierten Artikel als vollständiges `ItemDto` zurück - Fehler: 404 wenn Item nicht existiert, 400 bei ungültigem Body ### 2. Bestehende Endpoints bleiben | Endpoint | Methode | Beschreibung | |---|---|---| | `/api/health` | GET | Health Check | | `/api/inventory` | GET | Gesamtes Inventar abrufen | | `/api/inventory` | PUT | Inventar komplett ersetzen (Sync) | | `/api/inventory/items/{id}` | PATCH | **NEU:** Einzelnen Artikel updaten | --- ## Copilot-Chat Workflow (Gesamt-Inventar) 1. **Inventar laden:** Chatbot ruft `GET /api/inventory` auf → erhält JSON mit allen Items, Kategorien, Orten 2. **Lücken identifizieren:** KI scannt alle Items und identifiziert fehlende/unvollständige Daten (kein `kcalPerKg`, keine `notes`, fehlende Kategorie etc.) 3. **Items ohne Lücken werden übersprungen** 4. **Strukturierte Vorschläge pro Artikel:** Für jeden lückenhaften Artikel zeigt der Chatbot eine Maske: ``` 📦 Artikel: „Corned Beef" (ID: abc-123) Vorgeschlagene Vervollständigungen: • notes: „Haltbar bis zu 5 Jahre, proteinreich" • kcalPerKg: 2500 Optionen: [Einzeln anwenden] [Alle anwenden] [Überspringen] [Abbrechen] ``` 5. **User-Interaktion:** - **Einzeln anwenden:** User wählt einzelne Felder zur Übernahme - **Alle anwenden:** Alle Vorschläge für diesen Artikel übernehmen - **Überspringen:** Artikel wird nicht geändert, weiter zum nächsten - **Abbrechen:** Vorgang wird gestoppt, bisherige Änderungen bleiben erhalten 6. **Speichern:** Bei Übernahme ruft der Chatbot `PATCH /api/inventory/items/{id}` auf und bestätigt das Update 7. **Nächster Artikel:** Weiter mit dem nächsten lückenhaften Artikel ## Copilot-Chat Workflow (Einzelartikel) Identischer Ablauf, aber nur für einen bestimmten Artikel (z.B. User nennt den Artikelnamen oder die ID). --- ## App-Änderungen ### Entfernen - ~~Button „Inventar vervollständigen" (Optionen-Screen)~~ → entfällt komplett - ~~Button „Mit KI vervollständigen" (Artikel-Detailseite)~~ → entfällt komplett - ~~Claude API Key in Einstellungen~~ → entfällt komplett - ~~In-App Review-UI für KI-Vorschläge~~ → entfällt komplett > Diese Funktionen existieren aktuell noch nicht in der App – es müssen also keine UI-Elemente gelöscht werden, sondern sie werden einfach **nicht implementiert**. --- ## Technische Anforderungen - **PATCH-Endpoint:** Im bestehenden Ktor-Server (`InventoryRoutes.kt`) implementieren - **Repository:** `InventoryRepository` um `updateItem(id, partialItem)` erweitern - **Shared DTO:** ggf. partielles Update-DTO oder nullable Felder in `ItemDto` nutzen - **Auth:** Gleiche API-Key-Authentifizierung wie bestehende Endpoints - **Validierung:** Item-ID muss existieren, Feldtypen müssen stimmen - **Tests:** Unit-Tests für den neuen Endpoint (Repository + Route) --- ## User-Konzept (Vorgriff) Aktuell gibt es noch kein User-Konzept am Server. Der Chatbot arbeitet mit dem gesamten Inventar des Servers. Sobald User-IDs existieren (zukünftiges Ticket), wird der Inventar-Abruf auf `GET /api/users/{userId}/inventory` umgestellt. --- ## Akzeptanzkriterien - [ ] `PATCH /api/inventory/items/{id}` implementiert und API-Key-geschützt - [ ] Partielles Update: nur übergebene Felder werden geändert - [ ] 404-Response wenn Item nicht existiert - [ ] Aktualisiertes Item wird als Response zurückgegeben - [ ] Bestehende Endpoints (`GET /api/inventory`, `PUT /api/inventory`) unverändert - [ ] Unit-Tests für neuen Endpoint (Happy Path + Fehlerfälle) - [ ] Kein Claude-API-Key, keine In-App-KI-UI implementiert - [ ] Copilot-Chat kann Inventar per REST abrufen und Artikel updaten - [ ] Review-Workflow im Chat: strukturierte Maske pro Artikel mit Einzeln/Alle/Überspringen/Abbrechen
Sign in to join this conversation.
No description provided.