This commit is contained in:
team 1
2026-05-10 10:53:05 +02:00
parent 5c09e17f9c
commit b2bd9f89e0
7 changed files with 278 additions and 3 deletions

View File

@@ -0,0 +1,116 @@
# RetrieX Patch 81 - Shop Query Noise Cleanup and Brauwasser Fallback Guard
## Ziel
Direkte Shop-Suchen aus natürlich formulierten Nutzeranfragen sollen keine Füllwörter, Mess-Verben oder Meta-/Think-Tokens in die finale Shopware-Suchquery übernehmen.
Beispiel vor dem Patch:
```text
ich möchte für brauerei das brauwasser messen
Gesendete Suchquery: möchte brauerei brauwasser messen think
```
Zusätzlich soll die Antwortqualität bei breiten Anwendungs-/Medium-Fragen mit nur Shopdaten verbessert werden. Shop-only Treffer dürfen nicht als technisch geprüfte Eignung für eine Branche, Anwendung oder ein Medium wirken, wenn kein konkreter Messparameter genannt ist und die Shopdaten die Anwendung nicht explizit belegen.
## Änderung
### `config/retriex/genre.yaml`
Die bestehende genre-native Shopquery-Bereinigung wurde erweitert:
- `shop_query_runtime.current_input_preservation_terms` schützt jetzt auch anwendungsbezogene Shop-Tokens:
- `brauerei`
- `brauereien`
- `brauwasser`
- `shop_query_runtime.stopword_cleanup.terms` entfernt jetzt typische höfliche Formulierungen, Mess-Verben und den Meta-Token `think`, z. B.:
- `möchte`, `moechte`, `würde`, `wuerde`, `brauche`, `gern`, `gerne`
- `messen`, `messe`, `messung`, `überwachen`, `ueberwachen`, `kontrollieren`
- `think`
- `shop_query_runtime.positive_token_filter.allowed_terms` erlaubt `brauerei`, `brauereien`, `brauwasser` als positive Shop-Tokens, damit der Positive-Filter nicht auf die ungefilterte Query zurückfallen muss.
- `shop_query_runtime.positive_token_filter.blocked_terms` blockt zusätzlich höfliche Formulierungen und `think`, falls sie nach einem Optimizer-Lauf noch in der Query stehen.
### `config/retriex/prompt.yaml`
Die Shop-only-Fallback-Regeln wurden geschärft:
- Bei Branchen-/Anwendungs-/Medium-Fragen ohne konkreten Messparameter soll keine technische Eignung aus generischen Shopdaten abgeleitet werden.
- Produktlisten im Shop-only-Fallback sollen kurz bleiben und keine langen Messbereichs-, Einsatzgebiets-, Vorteil- oder Wiederholungsblöcke ausgeben, solange diese Felder nicht der direkte Beleg für die angefragte Eignung sind.
## Erwartetes Verhalten nach dem Patch
```text
ich möchte für brauerei das brauwasser messen
Gesendete Suchquery: brauerei brauwasser
```
Die Antwort sollte außerdem transparenter bleiben, z. B. sinngemäß:
```text
Für Brauwasser/Brauerei finde ich in den Shopdaten Treffer, aber keine belastbar geprüfte technische Eignung ohne konkreten Messparameter. Bitte grenze ein, ob Härte, Carbonathärte, pH, Leitfähigkeit, Chlor/Desinfektion o. Ä. gemessen werden soll.
Shop-Treffer (technische Eignung nicht sicher belegt): ...
```
## Bewusst nicht geändert
- keine PHP-Core-Änderung
- keine neue Retrieval-, Ranking-, Scoring- oder Shop-Matching-Logik
- keine Änderung an Follow-up-Actions
- keine Änderung an bestehenden Produkt-/Variantentoken-Guards aus v1.5.6/p80
Der Patch bleibt damit YAML-/Prompt-seitig und folgt der bestehenden Konfigurationslinie.
## Lokale Prüfungen
Im ZIP ohne `vendor/` wurden ausführbare lokale Prüfungen gemacht:
```bash
python3 -c "import yaml; yaml.safe_load(open('config/retriex/genre.yaml')); yaml.safe_load(open('config/retriex/prompt.yaml'))"
php -l src/Agent/AgentRunner.php
php -l src/Config/AgentRunnerConfig.php
```
Zusätzlich wurde die Query-Pipeline logisch simuliert:
```text
möchte brauerei brauwasser messen think -> brauerei brauwasser
ich möchte für brauerei das brauwasser messen -> brauerei brauwasser
chlor select sensor -> chlor select sensor
```
## In der Zielumgebung ausführen
```bash
bin/console cache:clear
bin/console mto:agent:config:validate
bin/console mto:agent:regression:test
bin/console mto:agent:config:audit-source --details
bin/console mto:agent:config:audit-patterns --details
```
## Manueller Regressionstest
```text
ich möchte für brauerei das brauwasser messen
```
Erwartung:
- Gesendete Suchquery enthält `brauerei brauwasser`
- `möchte`, `messen` und `think` erscheinen nicht in der gesendeten Shopquery
- Antwort macht transparent, dass ohne konkreten Messparameter keine geprüfte Brauwasser-Eignung abgeleitet werden soll
- Shop-only Ausgabe bleibt kurz und wird nicht durch lange wiederholte Produktprofile abgeschnitten
Zusätzliche kurze Smoke-Checks:
```text
ich suche den chlor select sensor
was kostet der indikator
Testomat 2000 THCL 100276
```
Erwartung:
- `chlor select sensor` bleibt erhalten
- bisherige Zubehör-/Preis-/Variantentoken-Flows aus v1.5.6 bleiben unverändert stabil

View File

@@ -0,0 +1,76 @@
# RetrieX Patch 82 - Follow-up Action Self-loop Guard
## Ziel
Verhindert Folgeaktions-Loops, bei denen nach einem bereits ausgeführten Shoplauf erneut dieselbe Shop-Suche angeboten wird.
Beispiel vor dem Patch:
1. `brauerei brauwasser`
2. Folgeaktion `Nur Zubehör anzeigen`
3. Shopquery `brauerei brauwasser zubehör` liefert `0` Shop-Treffer
4. Folgeaktion `Im Shop suchen` erzeugt wieder `brauerei brauwasser zubehör`
5. Wiederholung ohne fachliche Änderung
## Änderung
- `config/retriex/chat-messages.yaml`
- Die Commerce-Folgeaktion `Im Shop suchen` erhält eine materialisierte Query-Signatur:
- `material_query_template: '{shop_query}'`
- `hide_when_material_query_matches_current: true`
- `src/Agent/AgentRunner.php`
- Ergänzt einen Guard nach dem Rendern der Folgeaktion.
- Wenn die materialisierte Action-Query nach Normalisierung identisch mit der aktuellen Shopquery ist, wird die Action unterdrückt.
- `src/Config/ChatMessagesConfig.php`
- Reicht die neuen optionalen Action-Felder aus `chat-messages.yaml` an den AgentRunner durch.
## Bewusst nicht geändert
- Kein Retrieval-/Scoring-/Ranking-Fix.
- Keine Änderung an Shop-Matching oder Query-Optimierung.
- Keine fachlichen Tokenlisten im PHP-Core.
- Role-Filter-Actions wie `Nur Zubehör anzeigen` bleiben erlaubt, solange sie eine echte fachliche Eingrenzung darstellen.
## Erwartetes Verhalten
Nach einem ergebnislosen Lauf mit:
```text
brauerei brauwasser zubehör
```
wird nicht erneut angeboten:
```text
Im Shop suchen -> Suche im Shop nach brauerei brauwasser zubehör.
```
Die Action wird nur versteckt, wenn ihre materialisierte Query identisch mit der aktuellen Shopquery ist. Andere Actions mit anderer materialisierter Query können weiterhin angezeigt werden.
## Lokale Checks
```bash
php -l src/Agent/AgentRunner.php
php -l src/Config/ChatMessagesConfig.php
python3 - <<'PY'
import yaml
from pathlib import Path
for rel in [
'config/retriex/chat-messages.yaml',
'config/retriex/genre.yaml',
'config/retriex/prompt.yaml',
]:
yaml.safe_load(Path(rel).read_text())
print('yaml ok', rel)
PY
```
## Empfohlene Checks in Zielumgebung
```bash
bin/console cache:clear
bin/console mto:agent:config:validate
bin/console mto:agent:regression:test
bin/console mto:agent:config:audit-source --details
bin/console mto:agent:config:audit-patterns --details
```