This commit is contained in:
team 1
2026-05-07 18:14:30 +02:00
parent 0977cec651
commit 8ff06cee2c
8 changed files with 285 additions and 8 deletions

View File

@@ -0,0 +1,83 @@
# RetrieX Patch p60 - Generic Referential Shop Anchor Guard
## Ziel
Stabilisiert referenzielle Shop-Preisfragen, bei denen der Verlauf bereits einen konkreten Geräteanker und danach ein Zubehör-/Reagenz-/Indikator-Detail enthält.
Der konkrete Regressionspfad war sinngemäß:
1. Grenzwert-Frage belegt `Testomat 808`.
2. Indikator-Folgefrage belegt `Indikatortyp 300`.
3. Preis-Folgefrage fragt `was kostet der indikator`.
Die Shop-Query durfte nicht bei einem typcode-lastigen Ausdruck wie `indikatortyp 300 indikator` hängen bleiben, weil Shopware dadurch auch unpassende Geräte wie `Testomat 2000 DUO` liefern kann.
## Änderungen
### Generische Query-Stabilisierung
- `genre.yaml` ergänzt für `context_resolution.history_anchor_enrichment`:
- `query_terms`
- `query_noise_terms`
- RAG-/Historienmarker wie `indikatortyp` bleiben Trigger-/Kontextbegriffe, werden aber nicht dominant als Shop-Suchtoken ausgegeben.
- Typ-/Code-Tokens wie `300` bleiben erhalten.
- Wenn im selben Verlaufsturn ein konkreter Geräte-/Modellanker und ein Zubehör-/Typanker stehen, wird daraus generisch ein qualifizierter Shopanker.
Beispielhaft ergibt sich:
```text
testomat 808 300 indikator
```
statt:
```text
indikatortyp 300 indikator
```
### Generischer Shop-Treffer-Guard
Wenn die finale Shopquery einen konkreten Produkt-/Modellanker enthält, werden Shop-Treffer verworfen, die diesen Anker nicht tragen. Ein fremder Gerätetreffer darf dann nicht mehr als Preisbasis für ein referenziertes Zubehör/Verbrauchsmittel dienen.
### Antwortregel bei fehlendem passendem Shop-Treffer
`prompt.yaml` erhält eine generische Regel:
- Bei Preis-/Kosten-/Verfügbarkeitsfragen ohne passenden Shop-Treffer soll keine fremde RAG-/Shop-Produktliste als Preisersatz ausgegeben werden.
- Stattdessen soll klar gesagt werden, dass der angefragte kommerzielle Wert aus den bereitgestellten Shopdaten nicht ermittelt werden konnte.
## Kein Sonderfall
Der Patch enthält keine harte Sonderlogik für `Testomat 808` oder `Indikator 300`.
Die Logik ist allgemein:
- konkreter Verlauf-Geräteanker
- Zubehör-/Reagenz-/Indikator-/Accessory-Kontext
- technische/RAG-nahe Typwörter als Query-Noise
- Typ-/Code-Tokens bleiben erhalten
- Shop-Treffer müssen zum konkreten Modellanker passen, wenn ein solcher in der Query enthalten ist
## Dateien
- `config/retriex/agent.yaml`
- `config/retriex/genre.yaml`
- `config/retriex/prompt.yaml`
- `src/Agent/AgentRunner.php`
- `src/Config/AgentRunnerConfig.php`
- `src/Config/RetriexEffectiveConfigProvider.php`
## Lokale Prüfungen
- PHP-Lint für geänderte PHP-Dateien grün
- YAML parsebar für geänderte YAML-Dateien
- lokale Query-Simulation: `testomat 808 300 indikator`
## Projektchecks
```bash
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
```