Auto-Auswahl der Systemprompts: schneller und zuverlässiger #193

Closed
opened 2026-10-27 11:49:32 +00:00 by alf · 5 comments
Owner

Warum

Die Auto-Auswahl (Kategorizer, #188) ist nicht zuverlässig und mit dem Agent-LLM langsam (~14 s je Nachricht).

Gewünscht

  1. Schnell und strikt (Punkt 1): Klassifikation ohne Reasoning (chat_template_kwargs.enable_thinking=false, max_tokens 64, Temperatur 0); Antwort nur aus einer reinen Zahlenzeile lesen, Zahlen in Fließtext zählen nicht.
  2. Bessere „Wann einsetzen“-Texte der Systemprompts (Einsetzen / Nicht einsetzen, Abgrenzung zu Nachbarn, Beispielsätze) — Liste der vagen Prompts, Umformulierungen zur Freigabe.
  3. Testsatz (~20 echte Nachrichten mit erwartetem Prompt) zum Messen der Varianten.
  4. Danach nur bei Bedarf: Chat-Kontext mitgeben, Embedding-Vorfilter, eigenes kleines Modell für die Auto-Auswahl, Prüfung parallel statt blockierend.

Bezug

Folgt aus iris/Iris#188.

## Warum Die Auto-Auswahl (Kategorizer, #188) ist nicht zuverlässig und mit dem Agent-LLM langsam (~14 s je Nachricht). ## Gewünscht 1. **Schnell und strikt (Punkt 1):** Klassifikation ohne Reasoning (`chat_template_kwargs.enable_thinking=false`, `max_tokens` 64, Temperatur 0); Antwort nur aus einer reinen Zahlenzeile lesen, Zahlen in Fließtext zählen nicht. 2. **Bessere „Wann einsetzen“-Texte** der Systemprompts (Einsetzen / Nicht einsetzen, Abgrenzung zu Nachbarn, Beispielsätze) — Liste der vagen Prompts, Umformulierungen zur Freigabe. 3. **Testsatz** (~20 echte Nachrichten mit erwartetem Prompt) zum Messen der Varianten. 4. Danach nur bei Bedarf: Chat-Kontext mitgeben, Embedding-Vorfilter, eigenes kleines Modell für die Auto-Auswahl, Prüfung parallel statt blockierend. ## Bezug Folgt aus iris/Iris#188.
Author
Owner

PR #194 gemergt: feat(auto-prompts): Klassifikation ohne Reasoning, strikter Antwort-Parser (iris/Iris#193)
#194

Commits:

  • feat(auto-prompts): Klassifikation ohne Reasoning, strikter Antwort-Parser (iris/Iris#193)

Stand (Punkt 1: schnell und strikt, iris/Iris#193)

Befund: Die Auto-Prüfung dauerte ~14 s je Nachricht; das Agent-LLM (Reasoning-Modell) denkt vor der einzeiligen Antwort. Der Parser las jede Zahl der Antwort, auch aus Fließtext.

Geändert:

  • LocalLLMAPI.analyzeImageStreaming(quickAnswer:): im OpenAI-Stil max_tokens 64, Temperatur 0 und chat_template_kwargs.enable_thinking=false; nur die Auto-Prompt-Klassifikation setzt es (Template-Matcher unverändert).
  • parseAutoPromptSelectionResponse: gilt nur die letzte Zeile, die ausschließlich aus Zahlen und Trennzeichen besteht; Zahlen in Fließtext zählen nicht, keine solche Zeile = keine Auswahl.

Geprüft: Direktaufruf gegen das Agent-LLM (127.0.0.1:18200): mit abgeschaltetem Reasoning 0,7 s statt 3 s, Antwort 1, kein Reasoning-Text. Parser als eigenständiges Skript mit 10 Fällen (1,3, 2, 0, 1., Fließtext, Überlegung + Zahlenzeile, leer, außerhalb des Bereichs, Duplikat) ok. Xcode-Build Iris und IrisClient erfolgreich.

Nicht geprüft: Ablauf in der App (Dauer der Prüfung, Trefferqualität); andere Server als llama.cpp (LM Studio, OpenRouter) mit dem Feld chat_template_kwargs; kein Swift-Test im Projekt.

Offen: Punkte 2–4 des Issues (Texte der Systemprompts, Testsatz, Vorfilter/Zweitmodell). Dem Issue fehlt das Label typ/enhancement (im Repo nicht auffindbar).

PR #194 gemergt: feat(auto-prompts): Klassifikation ohne Reasoning, strikter Antwort-Parser (iris/Iris#193) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/194 Commits: - feat(auto-prompts): Klassifikation ohne Reasoning, strikter Antwort-Parser (iris/Iris#193) --- **Stand (Punkt 1: schnell und strikt, iris/Iris#193)** **Befund:** Die Auto-Prüfung dauerte ~14 s je Nachricht; das Agent-LLM (Reasoning-Modell) denkt vor der einzeiligen Antwort. Der Parser las jede Zahl der Antwort, auch aus Fließtext. **Geändert:** - `LocalLLMAPI.analyzeImageStreaming(quickAnswer:)`: im OpenAI-Stil `max_tokens` 64, Temperatur 0 und `chat_template_kwargs.enable_thinking=false`; nur die Auto-Prompt-Klassifikation setzt es (Template-Matcher unverändert). - `parseAutoPromptSelectionResponse`: gilt nur die letzte Zeile, die ausschließlich aus Zahlen und Trennzeichen besteht; Zahlen in Fließtext zählen nicht, keine solche Zeile = keine Auswahl. **Geprüft:** Direktaufruf gegen das Agent-LLM (`127.0.0.1:18200`): mit abgeschaltetem Reasoning 0,7 s statt 3 s, Antwort `1`, kein Reasoning-Text. Parser als eigenständiges Skript mit 10 Fällen (`1,3`, `2`, `0`, `1.`, Fließtext, Überlegung + Zahlenzeile, leer, außerhalb des Bereichs, Duplikat) ok. Xcode-Build `Iris` und `IrisClient` erfolgreich. **Nicht geprüft:** Ablauf in der App (Dauer der Prüfung, Trefferqualität); andere Server als llama.cpp (LM Studio, OpenRouter) mit dem Feld `chat_template_kwargs`; kein Swift-Test im Projekt. **Offen:** Punkte 2–4 des Issues (Texte der Systemprompts, Testsatz, Vorfilter/Zweitmodell). Dem Issue fehlt das Label `typ/enhancement` (im Repo nicht auffindbar).
Author
Owner

PR #195 gemergt: feat(auto-prompts): Testsatz und Messskript für die Auto-Auswahl (iris/Iris#193)
#195

Commits:

  • feat(auto-prompts): Testsatz und Messskript für die Auto-Auswahl (iris/Iris#193)

Stand (Testsatz, Punkt 3, iris/Iris#193)

Geändert: scripts/auto-prompt-eval/ — cases.json (53 Nachrichten mit erwartetem Prompt: 33 eindeutige, 20 schwerere mit indirekter Formulierung, Mehrfachtreffern und „kein Prompt“) und run.py. Das Skript baut Katalog und Anfrage wie CompanionManager.resolveAutoSystemPrompts (gespeicherte Systemprompts aus den Einstellungen, ohne „immer aktiv“, strikter Parser, Reasoning aus) und meldet Treffer und Zeit je Anfrage. Optionen: --prompts <Sicherung.json> (Vorher-Vergleich), --think (Reasoning an), --url.

Messung (Agent-LLM Qwen3.8-Flash-Next Q8, 127.0.0.1:18200):

  • Vorher (alte „Wann einsetzen“-Texte, 45 Kandidaten): 51/53. Fehler: „200-Seiten-PDF auf Deutsch“ (nur Dokument-Übersetzer statt Marker + Übersetzer), „Figur für mein Spiel, 3D, beweglich“ (keine Auswahl).
  • Nachher (neue Texte, 44 Kandidaten): 50/53. Dieselben zwei Fehler, dazu „Karte meldet Out of Memory beim Sampling“ → LTX statt ComfyUI-Konfigurieren (neu, Rückschritt); bei der „Figur“ wählt es nun Godot statt nichts.
  • Dauer ohne Reasoning ~1,4 s je Anfrage bei warmem Cache; kalt und bei Last 10–50 s.

Grenzen: Die Nachrichten habe ich geschrieben; viele benutzen Wörter, die im Prompt-Text stehen. Der Test misst damit eher die Untergrenze der Zuverlässigkeit als den Alltag. Er unterscheidet die zwei Textfassungen kaum (±1 Fall). Der Fehler vom Nutzertest (Pille fehlte) lag an Backend-Verwechslung und Parser (#192, #194), nicht an den Texten.

Nicht geprüft: Reasoning an (--think) als Vergleich; echte Nachrichten aus dem Alltag; Wiederholbarkeit (Temperatur 0, ein Lauf je Fassung).

Offen: Echte Nachrichten aus den Chats in cases.json aufnehmen; den Rückschritt „Out of Memory“ prüfen (Text von ComfyUI-Konfigurieren/LTX); Plugin-Texte (Marker, Dokument-Übersetzer, PdfCraft, Pandoc, Buchhaltung, Plugins entwickeln).

PR #195 gemergt: feat(auto-prompts): Testsatz und Messskript für die Auto-Auswahl (iris/Iris#193) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/195 Commits: - feat(auto-prompts): Testsatz und Messskript für die Auto-Auswahl (iris/Iris#193) --- **Stand (Testsatz, Punkt 3, iris/Iris#193)** **Geändert:** `scripts/auto-prompt-eval/` — `cases.json` (53 Nachrichten mit erwartetem Prompt: 33 eindeutige, 20 schwerere mit indirekter Formulierung, Mehrfachtreffern und „kein Prompt“) und `run.py`. Das Skript baut Katalog und Anfrage wie `CompanionManager.resolveAutoSystemPrompts` (gespeicherte Systemprompts aus den Einstellungen, ohne „immer aktiv“, strikter Parser, Reasoning aus) und meldet Treffer und Zeit je Anfrage. Optionen: `--prompts <Sicherung.json>` (Vorher-Vergleich), `--think` (Reasoning an), `--url`. **Messung (Agent-LLM Qwen3.8-Flash-Next Q8, `127.0.0.1:18200`):** - Vorher (alte „Wann einsetzen“-Texte, 45 Kandidaten): 51/53. Fehler: „200-Seiten-PDF auf Deutsch“ (nur Dokument-Übersetzer statt Marker + Übersetzer), „Figur für mein Spiel, 3D, beweglich“ (keine Auswahl). - Nachher (neue Texte, 44 Kandidaten): 50/53. Dieselben zwei Fehler, dazu „Karte meldet Out of Memory beim Sampling“ → LTX statt ComfyUI-Konfigurieren (neu, Rückschritt); bei der „Figur“ wählt es nun Godot statt nichts. - Dauer ohne Reasoning ~1,4 s je Anfrage bei warmem Cache; kalt und bei Last 10–50 s. **Grenzen:** Die Nachrichten habe ich geschrieben; viele benutzen Wörter, die im Prompt-Text stehen. Der Test misst damit eher die Untergrenze der Zuverlässigkeit als den Alltag. Er unterscheidet die zwei Textfassungen kaum (±1 Fall). Der Fehler vom Nutzertest (Pille fehlte) lag an Backend-Verwechslung und Parser (#192, #194), nicht an den Texten. **Nicht geprüft:** Reasoning an (`--think`) als Vergleich; echte Nachrichten aus dem Alltag; Wiederholbarkeit (Temperatur 0, ein Lauf je Fassung). **Offen:** Echte Nachrichten aus den Chats in `cases.json` aufnehmen; den Rückschritt „Out of Memory“ prüfen (Text von ComfyUI-Konfigurieren/LTX); Plugin-Texte (Marker, Dokument-Übersetzer, PdfCraft, Pandoc, Buchhaltung, Plugins entwickeln).
Author
Owner

PR #197 gemergt: feat(auto-prompts): run.py --usage zum probeweisen Ersetzen von Texten (iris/Iris#193)
#197

Commits:

  • feat(auto-prompts): run.py --usage zum probeweisen Ersetzen von Texten (iris/Iris#193)

Stand (echte Nachrichten, iris/Iris#193)

Vorgehen: Aus agent_jobs.json die ersten Nachrichten von 248 Chats gezogen (216 Auto, 32 Handwahl), davon 50 mit von mir korrigierter Erwartung als lokalen Testsatz zusammengestellt. Er bleibt lokal (workspace/prompt-usage/, enthält Pfade und Namen Dritter) und wird nicht eingecheckt. Die Handwahl ist kein verlässlicher Maßstab (z. B. wählte der Nutzer „Iris-Dev“ als Projektkontext auch für eine eBay-Suche), die frühere Auto-Auswahl auch nicht (LTX wurde oft zu Unrecht gewählt); die Erwartungen sind deshalb meine Beurteilung.

Messung (Agent-LLM, ohne Reasoning):

  • Echte Nachrichten, aktuelle Texte: 30/50. Schwächen: Fragen zum eigenen Projekt finden Iris-Dev nicht (6), Mail-Suche im Vault findet E-Mail nicht (6), DOS-Spiele aus Dateien landen bei macApp-aus-github statt Retro-Spiele (2), Blender-Tutorials im Vault und „Szene ansehen“ (Freecad) (2).
  • Mit vier geänderten Texten (Iris-Dev, E-Mail, Retro-Spiele, Blender): 44/50; synthetischer Satz bleibt bei 50/53 (der „Out of Memory“-Rückschritt ist behoben, „YouTube-Video in den Vault“ → Whisper neu).

Geändert: scripts/auto-prompt-eval/run.py bekommt --usage "Titel=Text", um Texte probeweise zu ersetzen, ohne Iris zu ändern.

Nicht geprüft: Die vier Texte sind noch nicht in Iris eingespielt; E-Mail und Retro-Spiele stammen aus Plugins (system_prompt_usage in der plugin.json) und brauchen eine neue Plugin-Version. Kein Lauf mit Reasoning an; ein Lauf je Fassung.

Offen: Texte einspielen (Iris-Dev, Blender direkt; E-Mail, Retro-Spiele per Plugin-Version); die übrigen 6 Fehler (Browser-Suche → Web-Automation, „Memory von Claude Code“, „Plugins zuletzt“ → Plugins entwickeln u. a.).

PR #197 gemergt: feat(auto-prompts): run.py --usage zum probeweisen Ersetzen von Texten (iris/Iris#193) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/197 Commits: - feat(auto-prompts): run.py --usage zum probeweisen Ersetzen von Texten (iris/Iris#193) --- **Stand (echte Nachrichten, iris/Iris#193)** **Vorgehen:** Aus `agent_jobs.json` die ersten Nachrichten von 248 Chats gezogen (216 Auto, 32 Handwahl), davon 50 mit von mir korrigierter Erwartung als lokalen Testsatz zusammengestellt. Er bleibt **lokal** (`workspace/prompt-usage/`, enthält Pfade und Namen Dritter) und wird nicht eingecheckt. Die Handwahl ist kein verlässlicher Maßstab (z. B. wählte der Nutzer „Iris-Dev“ als Projektkontext auch für eine eBay-Suche), die frühere Auto-Auswahl auch nicht (LTX wurde oft zu Unrecht gewählt); die Erwartungen sind deshalb meine Beurteilung. **Messung (Agent-LLM, ohne Reasoning):** - Echte Nachrichten, aktuelle Texte: **30/50**. Schwächen: Fragen zum eigenen Projekt finden Iris-Dev nicht (6), Mail-Suche im Vault findet E-Mail nicht (6), DOS-Spiele aus Dateien landen bei macApp-aus-github statt Retro-Spiele (2), Blender-Tutorials im Vault und „Szene ansehen“ (Freecad) (2). - Mit vier geänderten Texten (Iris-Dev, E-Mail, Retro-Spiele, Blender): **44/50**; synthetischer Satz bleibt bei 50/53 (der „Out of Memory“-Rückschritt ist behoben, „YouTube-Video in den Vault“ → Whisper neu). **Geändert:** `scripts/auto-prompt-eval/run.py` bekommt `--usage "Titel=Text"`, um Texte probeweise zu ersetzen, ohne Iris zu ändern. **Nicht geprüft:** Die vier Texte sind noch nicht in Iris eingespielt; E-Mail und Retro-Spiele stammen aus Plugins (`system_prompt_usage` in der `plugin.json`) und brauchen eine neue Plugin-Version. Kein Lauf mit Reasoning an; ein Lauf je Fassung. **Offen:** Texte einspielen (Iris-Dev, Blender direkt; E-Mail, Retro-Spiele per Plugin-Version); die übrigen 6 Fehler (Browser-Suche → Web-Automation, „Memory von Claude Code“, „Plugins zuletzt“ → Plugins entwickeln u. a.).
Author
Owner

PR #198 gemergt: test(auto-prompts): Fälle zur Iris-Entwicklung im Testsatz (iris/Iris#193)
#198

Commits:

  • test(auto-prompts): Fälle zur Iris-Entwicklung im Testsatz (iris/Iris#193)

Stand (Iris-Entwicklung wird nicht als Iris-Dev erkannt, iris/Iris#193)

Befund (Nutzer): „Ich möchte mit dir die Iris Software weiterentwickeln“ / „Ich brauche dich für die Iris-Entwicklung“ wählte nicht Iris-Dev. Die Kurzformen gehen mit dem seit heute neuen Iris-Dev-Text durch (8 von 8 im Messskript). Die längere echte Nachricht erwähnt den Systemprompt-Dialog der App und landet bei „Systemprompt verwalten“ (Antwort 2).

Geändert: scripts/auto-prompt-eval/cases.json um neun Fälle zur Iris-Entwicklung erweitert (acht Formulierungen plus die lange mit Systemprompt-Bezug).

Geprüft: Mit probeweise geändertem Text für „Systemprompt verwalten“ („… Nicht, wenn die Iris-App selbst weiterentwickelt wird, auch wenn es um die Systemprompt-Oberfläche geht (→ Iris-Dev)“) besteht auch der lange Fall; echte Nachrichten 37/50 unverändert (die 6 Mail-Fälle und 2 Spiel-Fälle warten auf die Plugin-Updates), synthetischer Satz 50/53.

Nicht geprüft: Der neue Text steht noch nicht in Iris (Iris lief beim Versuch); Ablauf in der App.

Offen: Text „Systemprompt verwalten“ einspielen; Wirkung im Alltag beobachten.

PR #198 gemergt: test(auto-prompts): Fälle zur Iris-Entwicklung im Testsatz (iris/Iris#193) https://forgejo.lewerken.duckdns.org/iris/Iris/pulls/198 Commits: - test(auto-prompts): Fälle zur Iris-Entwicklung im Testsatz (iris/Iris#193) --- **Stand (Iris-Entwicklung wird nicht als Iris-Dev erkannt, iris/Iris#193)** **Befund (Nutzer):** „Ich möchte mit dir die Iris Software weiterentwickeln“ / „Ich brauche dich für die Iris-Entwicklung“ wählte nicht Iris-Dev. Die Kurzformen gehen mit dem seit heute neuen Iris-Dev-Text durch (8 von 8 im Messskript). Die längere echte Nachricht erwähnt den Systemprompt-Dialog der App und landet bei „Systemprompt verwalten“ (Antwort `2`). **Geändert:** `scripts/auto-prompt-eval/cases.json` um neun Fälle zur Iris-Entwicklung erweitert (acht Formulierungen plus die lange mit Systemprompt-Bezug). **Geprüft:** Mit probeweise geändertem Text für „Systemprompt verwalten“ („… Nicht, wenn die Iris-App selbst weiterentwickelt wird, auch wenn es um die Systemprompt-Oberfläche geht (→ Iris-Dev)“) besteht auch der lange Fall; echte Nachrichten 37/50 unverändert (die 6 Mail-Fälle und 2 Spiel-Fälle warten auf die Plugin-Updates), synthetischer Satz 50/53. **Nicht geprüft:** Der neue Text steht noch nicht in Iris (Iris lief beim Versuch); Ablauf in der App. **Offen:** Text „Systemprompt verwalten“ einspielen; Wirkung im Alltag beobachten.
Author
Owner

Abgeschlossen auf Anweisung des Nutzers. Gebaut: Klassifikation ohne Reasoning, strikter Antwort-Parser (#194), Messskript scripts/auto-prompt-eval (#195, #197), neue Texte für Iris-Dev, Blender, Systemprompt verwalten (lokal), Plugin-Texte für E-Mail, Retro-Spiele und Web-Automation (iris/iris-plugins#316). Gemessen: echte Nachrichten 30 → 46 von 50, Iris-Dev wird bei „Iris weiterentwickeln“ gewählt (Test des Nutzers). Offen: 4 Fälle des echten Testsatzes (Claude-Code-Memory, Plugins zuletzt, Handbuch-Webseite, Chats zur Planerstellung), Plugin-Texte von Marker, Dokument-Übersetzer, PdfCraft, Pandoc, Buchhaltung, Plugins entwickeln unverändert, Latenz in der App (parallele Hermes-Läufe) nicht untersucht.

**Abgeschlossen auf Anweisung des Nutzers.** Gebaut: Klassifikation ohne Reasoning, strikter Antwort-Parser (#194), Messskript `scripts/auto-prompt-eval` (#195, #197), neue Texte für Iris-Dev, Blender, Systemprompt verwalten (lokal), Plugin-Texte für E-Mail, Retro-Spiele und Web-Automation (iris/iris-plugins#316). Gemessen: echte Nachrichten 30 → 46 von 50, Iris-Dev wird bei „Iris weiterentwickeln“ gewählt (Test des Nutzers). Offen: 4 Fälle des echten Testsatzes (Claude-Code-Memory, Plugins zuletzt, Handbuch-Webseite, Chats zur Planerstellung), Plugin-Texte von Marker, Dokument-Übersetzer, PdfCraft, Pandoc, Buchhaltung, Plugins entwickeln unverändert, Latenz in der App (parallele Hermes-Läufe) nicht untersucht.
alf closed this issue 2026-10-27 13:36:43 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
iris/Iris#193
No description provided.