patch 20o

This commit is contained in:
team 1
2026-05-03 18:12:52 +02:00
parent 1a24590863
commit 98447703ac
4 changed files with 2 additions and 693 deletions

View File

@@ -14,7 +14,7 @@ parameters:
max_output_chars: 700
max_added_tokens: 2
max_length_ratio_percent: 150
heartbeat_message: 'Ich prüfe die Eingabe auf Tippfehler…'
heartbeat_message: 'Ich prüfe die Eingabe…'
output_prefix_pattern: '/^(?:normalisiert|korrigiert|corrected|normalized)\s*:\s*/iu'
skip_patterns:
- '/https?:\/\//iu'

View File

@@ -58,6 +58,7 @@ parameters:
- bitte
- preiswerte
- gern
- lösung
- eine
- größer
- würde

View File

@@ -1,369 +0,0 @@
# Commerce / Shopware Store API configuration.
# The existing Commerce and Shopware services stay unchanged; these values only centralize wiring.
parameters:
retriex.commerce.enabled: true
retriex.commerce.max_shop_results: '%env(SHOPWARE_STORE_API_MAX_RESULT)%'
retriex.commerce.shop_timeout: 15
retriex.commerce.store_api_base_url: '%env(SHOPWARE_STORE_API_BASE_URL)%'
retriex.commerce.sales_channel_access_key: '%env(SHOPWARE_SALES_CHANNEL_ACCESS_KEY)%'
retriex.commerce.search_repair.enabled: true
retriex.commerce.search_repair.max_queries: 2
retriex.commerce.search_repair.min_primary_results_without_repair: 2
# Commerce query parser configuration.
# YAML is the only operative source of truth; PHP must not contain parser defaults.
retriex.commerce_query.config:
known_brands:
- heyl
- horiba
- neomeris
phrases_to_remove:
- ich suche
- suche
- habt ihr
- gibt es
- gebe mir
- gib mir
- zeige mir
- welches gerät
- welche gerät
- welches modell
- welches ist besser
- welches ist am besten
- alternative
- alternativen
- unter anderem
- u a
- welche
- welcher
- welches
- welchen
- sind
- ist
- geeignet
- geeigent
- verfügbarkeit
- verfuegbarkeit
filter_search_tokens:
- auch
- noch
- nochmal
- zusätzlich
- dazu
- davon
- größer
- stattdessen
- bitte
- gern
- preiswerte
- zur
- mein
- eine
- würde
- ich
- gerne
- zeige
- zeig
- such
- suche
- finde
- find
- mir
- mal
- von
- im
- in
- für
- fuer
- welche
- welcher
- welches
- welchen
- sind
- ist
- geeignet
- geeigent
- verfügbarkeit
- verfuegbarkeit
- prüfe
- pruefe
- den
- die
- das
- der
- dem
- des
- und
- oder
- sowie
- seine
- seinen
- seiner
- seinem
- seines
- siene
- sienen
- siener
- sienem
- sienes
- gebe
- gib
- nenne
- nenn
- preis
- preise
- preisen
- kostet
- kpstet
- ksotet
- kosten
- ua
- also
- gut
- gute
- guten
- guter
- gutes
- passen
- passend
search_control_tokens:
- shop
- store
- produkt
- produkte
- artikel
- kaufen
- kaufe
- bestellen
- bestelle
- online
search_token_corrections:
siene: seine
sienen: seinen
siener: seiner
sienem: seinem
sienes: seines
indicatoren: indikatoren
schwinnbad: schwimmbad
schwimbad: schwimmbad
kpstet: kostet
ksotet: kostet
search_token_canonical_map:
indikatoren: indikator
indicators: indikator
indicator: indikator
reagenzien: reagenz
reagents: reagenz
reagent: reagenz
produkte: produkt
semantic_shop_search_tokens:
- indikator
- indicator
- reagenz
- reagent
- zubehör
- zubehor
- ersatzteil
- anschlusskabel
- kabel
- sensorkabel
- elektrodenkabel
- verbrauchsmaterial
- chemie
- indikatorchemie
- reagenzchemie
- kit
- set
- filter
- pumpe
- pumpenkopf
- motorblock
- lösung
- loesung
- solution
- teststreifen
- gerät
- geraet
- messgerät
- messgeraet
- analysegerät
- analysegeraet
- analysator
- monitor
- controller
- system
normalization:
search: ['€']
replace: [' euro ']
text:
trim_characters:
- space
- tab
- lf
- cr
- nul
- vertical_tab
- '-'
- '.'
- ','
limits:
min_search_token_length: 1
min_direct_product_token_length: 1
direct_product_max_tokens: 4
model_context_token_window: 4
min_meaningful_alpha_token_length: 2
max_shop_search_tokens: 6
patterns:
history_context: 'chat|auch|noch|nochmal|zusätzlich|dazu|davon|stattdessen|alternative|alternativen|größer|groesser|kleiner|gleich(?:e|en|er|es)?|derselbe|dieselbe|dasselbe|wie oben|wie zuvor|wie gehabt'
history_context_value_template: '/\b({fragment})\b/u'
prompt_sanitize: '/[^\p{L}\p{N}\s.,\-]/u'
whitespace_collapse: '/\s+/u'
whitespace_split: '/\s+/u'
history_question: '/^Question:\s*(.+)$/m'
price_between: '/\bzwischen\s+(\d+(?:[.,]\d+)?)\s+und\s+(\d+(?:[.,]\d+)?)\s+euro\b/u'
price_max: '/\b(?:unter|bis|max(?:imal)?)\s+(\d+(?:[.,]\d+)?)\s+euro\b/u'
price_min: '/\b(?:ab|mindestens|min)\s+(\d+(?:[.,]\d+)?)\s+euro\b/u'
price_removal_between: '/\bzwischen\s+\d+(?:[.,]\d+)?\s+und\s+\d+(?:[.,]\d+)?\s*euro\b/u'
price_removal_minmax: '/\b(?:unter|bis|max(?:imal)?|ab|mindestens|min)\s+\d+(?:[.,]\d+)?\s*euro\b/u'
price_removal_intent_template: '/\b(?:{price_pattern})\b/u'
direct_product_digit: '/\d/u'
model_like: '/\b[a-zäöüß][a-zäöüß®\-]*(?:\s+[a-zäöüß][a-zäöüß®\-]*){0,2}\s+\d{2,5}[a-z0-9\-]*\b/u'
accessory_like: '/\b(?:indikator|indicator|reagenz|reagent|kit|set)\s+\d{1,5}[a-z0-9\-]*\b/u'
contains_digit: '/\d/u'
model_number_token: '/^(?:\d{2,5}[a-z0-9\-]*|[a-z]{1,6}\d{1,5}[a-z0-9\-]*)$/u'
model_context_token: '/^[\p{L}][\p{L}0-9®\-]{2,}$/u'
model_suffix_token: '/^[a-z]{1,4}\d{0,3}$/u'
instruction_or_presentation_token: '/^(?:zeig(?:e)?|such(?:e)?|find(?:e)?|gib|gebe|nenn(?:e)?|liefer(?:e)?|erstelle?|mach(?:e)?|brauch(?:e)?|will|möchte|moechte|hätte|haette|kannst|bitte|mal|alle|alles|komplett|vollständig|vollstaendig|gesamt|ganze|ganzen|liste|listung|auflistung|tabelle|tabellarisch|übersicht|uebersicht|anzeigen?|ausgeben?|darstellen?|antwort(?:e)?|erklär(?:e)?|erklaer(?:e)?|info|infos|informationen|dazu|hierzu|damit|davon|an|als|mit|ohne|inkl|inklusive|also|gut|gute|guten|guter|gutes|passend|passen)$/u'
measurement_value_token: '/^\d+[.,]\d+$/u'
exact_token_removal_template: '/\b{token}\b/u'
brand_part_of_model_template: '/\b{brand}\s+\d{2,5}[a-z0-9\-]*\b/u'
# Commerce reference resolver configuration.
# YAML is the only operative source of truth for conversation product and focus-term patterns.
retriex.commerce_reference_resolver.config:
conversation_product_patterns:
- '/\b(Testomat\s+2000\s+THCL)\b/ui'
- '/\b(Testomat\s+808)\b/ui'
- '/\b(Testomat\s+EVO\s+TH)\b/ui'
- '/\b(Testomat\s+EVO\s+CALC)\b/ui'
- '/\b(Testomat\s+ECO\s+PLUS)\b/ui'
- '/\b(Testomat\s+ECO\s+C)\b/ui'
- '/\b(Testomat\s+ECO)\b/ui'
- '/\b(Testomat\s+LAB\s+CL)\b/ui'
- '/\b(Testomat\s+LAB\s+MONO)\b/ui'
- '/\b(Testomat\s+2000)\b/ui'
focus_term_patterns:
indikator: '/\bindikator(?:en)?\b/u'
indikatoren: '/\bindikator(?:en)?\b/u'
reagenz: '/\breagenz(?:ien)?\b/u'
reagenzien: '/\breagenz(?:ien)?\b/u'
zubehör: '/\bzubeh[oö]r\b/u'
ersatzteil: '/\bersatzteile?\b/u'
ersatzteile: '/\bersatzteile?\b/u'
service-set: '/\bservice(?:\s|-)?set\b/u'
filter: '/\bfilter\b/u'
pumpenkopf: '/\bpumpenkopf\b/u'
motorblock: '/\bmotorblock\b/u'
mehrwertpaket: '/\bmehrwertpaket\b/u'
neotecmaster: '/\bneotecmaster\b/u'
# Shop matching and presentation configuration.
# YAML is the only operative source of truth; PHP must not contain shop matching defaults.
retriex.shop_matching.config:
top_product_log_limit: 3
# Shop role and focus lists are resolved from config/retriex/vocabulary.yaml.
# Direct list overrides may still be added to this parameter if a project needs them.
vocabulary_views:
device_focus_keywords: shop.device_focus
accessory_focus_keywords: shop.accessory_focus
device_query_keywords: shop.device_query
accessory_query_keywords: shop.accessory_query
accessory_product_keywords: shop.accessory_product
device_product_keywords: shop.device_product
vocabulary_maps:
accessory_focus_variant_map: shop.accessory_focus_variants
role_guard:
filter_accessory_products_for_device_queries: true
keep_ambiguous_products_for_device_queries: true
scores:
exact_product_number_phrase: 160
exact_product_name_phrase: 90
exact_manufacturer_match: 40
brand_contained_in_name: 20
name_token_overlap_weight: 6
product_number_token_overlap_weight: 10
corpus_token_overlap_weight: 2
name_number_overlap_weight: 18
product_number_number_overlap_weight: 28
corpus_number_overlap_weight: 8
size_match: 12
availability_bonus: 1
device_query_device_product_bonus: 60
device_query_accessory_penalty: 120
accessory_query_accessory_product_bonus: 30
accessory_query_device_product_bonus: 10
patterns:
contains_digit: '/\d/u'
matching_cleanup: '/[^\p{L}\p{N}]+/u'
whitespace_collapse: '/\s+/u'
token_split: '/[^\p{L}\p{N}]+/u'
padding:
prefix: ' '
suffix: ' '
price:
normalization_search: ['€', ' ', '.']
normalization_replace: ['', '', '']
decimals: 2
decimal_separator: ','
thousands_separator: '.'
suffix: ' €'
custom_fields:
primary: migration_Backup_product_attr1
secondary: migration_Backup_product_attr2
use_cases: migration_Backup_product_attr4
languages: migration_Backup_product_attr5
text:
primary_secondary_separator: ': '
use_cases_label: 'Einsatzgebiete: '
languages_label: 'Sprachen: '
custom_field_join_separator: ' | '
description:
empty_line_pattern: '/^[ \t]*\R/m'
whitespace_cleanup_pattern: '/[ \t]{2,}/'
max_length: 1500
seo:
relative_prefix: '/'
highlight:
available_label: Verfügbar
unavailable_label: Nicht verfügbar
product_number_prefix: 'Produktnummer: '
image:
missing_placeholder: no-image
deduplication:
separator: '|'

View File

@@ -1,323 +0,0 @@
# Intent vocabulary and pattern configuration.
# Lists and thresholds mirror the previous PHP defaults exactly.
# Migrated config areas are YAML-only; remaining areas are migrated incrementally.
parameters:
retriex.intent.commerce.config:
strong_signals:
- shop
- alle
- preis
- kunde
- online
- produkt
- artikel
- sku
- kaufen
- kostet
- kpstet
- ksotet
- suche
- such
- finde
- finden
- analysegerät
- analysegeraet
- messgerät
- messgeraet
- pockettester
- pocket tester
- handmessgerät
- handmessgeraet
- analysator
- analyzer
- puffer
- kalibrierpuffer
- kalibrierlösung
- kalibrierloesung
- kalibrierung
- chemie
- reagenz
- reagenzien
- verbrauchsmaterial
- zubehör
- zubehoer
- ersatzteil
- anschlusskabel
- kabel
- sensorkabel
- elektrode
- elektrodenkabel
non_product_commerce_signals:
- shop
- alle
- kunde
- online
- kaufen
- kostet
- kpstet
- ksotet
- suche
- such
- finde
- finden
advisory_signals:
- passt
- eignet
- besser
- besten
- gut
- gut für
- gut fuer
- passend für
- passend fuer
- geeignet
- geeigent
- empfiehl
- empfehl
advisory_product_selection_patterns:
- '/\bmit\s+welche(?:m|n|r|s)?\s+(?:testomat(?:en)?|pockettester|pocket\s+tester|analysegerät|analysegeraet|messgerät|messgeraet|analysator|analyzer)\b.*\b(?:messen|messung|überwach(?:en|ung)?|ueberwach(?:en|ung)?)\b/u'
- '/\bwelche(?:r|s|n|m)?\s+(?:testomat(?:en)?|pockettester|pocket\s+tester|analysegerät|analysegeraet|messgerät|messgeraet|analysator|analyzer)\b.*\b(?:kann|können|koennen|misst|messen|überwacht|ueberwacht|eignet|geeignet|passt|gut|empfehl)\b.*\b(?:messen|messung|überwach(?:en|ung)?|ueberwach(?:en|ung)?)\b/u'
- '/\b(?:testomat(?:en)?|pockettester|pocket\s+tester|analysegerät|analysegeraet|messgerät|messgeraet|analysator|analyzer)\b.*\b(?:für|fuer)\b.*\b(?:messung|messen|überwachung|ueberwachung)\b/u'
- '/\b(?:ich\s+)?(?:würde|wuerde|möchte|moechte|will|brauche|benötige|benoetige)\b.{0,80}\b(?:messen|messung|überwachen|ueberwachen|kontrollieren)\b/u'
- '/\b(?:messen|messung|überwachen|ueberwachen|kontrollieren)\b.{0,80}\b(?:schwimmbad|pool|becken|wasseranalyse)\b/u'
price_terms:
- euro
-
- eur
- teuer
- preis
- kosten
- kostet
- kpstet
- ksotet
color_terms:
- schwarz
- weiß
- weis
- blau
- grau
- beige
- rosa
- pink
- gruen
- orange
- braun
size_token_terms:
- xs
- s
- m
- l
- xl
- xxl
- xxxxl
size_terms:
- größe
- groesse
- grösse
support_diagnostic_patterns:
- '/\bfehler\b/u'
- '/\bfehlercode\b/u'
- '/\berror\b/u'
- '/\bstörung\b/u'
- '/\bstoerung\b/u'
- '/\balarm\b/u'
- '/\bstörungsmeldung\b/u'
- '/\bstoerungsmeldung\b/u'
- '/\bmeldung\b/u'
- '/\bwarnung\b/u'
- '/\bwarncode\b/u'
- '/\bcode\b/u'
- '/\bwas bedeutet\b/u'
- '/\bwarum\b/u'
- '/\bblinkt\b/u'
- '/\bzeigt\b/u'
- '/\bzeigt an\b/u'
- '/\bursache\b/u'
- '/\bdiagnose\b/u'
- '/\bservicefall\b/u'
- '/\bproblem\b/u'
- '/\bstörung beheben\b/u'
- '/\bstoerung beheben\b/u'
- '/\be\d{1,3}\b/u'
explicit_commerce_intent_patterns:
- '/\bshop\b/u'
- '/\bpreis\b/u'
- '/\bkosten\b/u'
- '/\bkostet\b/u'
- '/\bkpstet\b/u'
- '/\bksotet\b/u'
- '/\bkaufen\b/u'
- '/\bbestellen\b/u'
- '/\bprodukt\b/u'
- '/\bartikel\b/u'
- '/\bsku\b/u'
- '/\bonline\b/u'
- '/\bchemie\b/u'
- '/\breagenz(?:ien)?\b/u'
- '/\bverbrauchsmaterial(?:ien)?\b/u'
- '/\bzubehör\b/u'
- '/\bzubehoer\b/u'
- '/\bersatzteil(?:e)?\b/u'
- '/\banschlusskabel\b/u'
- '/\bkabel\b/u'
- '/\bsensorkabel\b/u'
- '/\belektrodenkabel\b/u'
technical_factual_knowledge:
signal_label: technical_factual_knowledge_query
question_marker_patterns:
- '/\bwas\s+ist\b/u'
- '/\bwelche?r?s?\b/u'
- '/\bwie\s+(hoch|niedrig|klein|gross|groß)\b/u'
- '/\bniedrigste[rsn]?\b/u'
- '/\bkleinste[rsn]?\b/u'
- '/\bhöchste[rsn]?\b/u'
- '/\bhoechste[rsn]?\b/u'
fact_patterns:
- '/\bgrenzwert(?:e|en|es)?\b/u'
- '/\bmessbereich(?:e|en|s)?\b/u'
- '/\bwasserhärte\b/u'
- '/\bwasserhaerte\b/u'
- '/\bresthärte\b/u'
- '/\bresthaerte\b/u'
- '/\bgesamthärte\b/u'
- '/\bgesamthaerte\b/u'
- '/\bauflösung\b/u'
- '/\baufloesung\b/u'
- '/\bindikator(?:en|s)?\b/u'
- '/\btestomat(?:en|s)?\b/u'
- '/\büberwach(?:t|en|ung)\b/u'
- '/\bueberwach(?:t|en|ung)\b/u'
- '/\bmess(?:en|ung|bar|wert)\b/u'
patterns:
sku_like: '/\b\d{4,10}\b/u'
price_value_template: '/\b\d+(?:[.,]\d+)?\s*(?:{price_pattern})\b/u'
size_extraction_template: '/\b(?:{size_pattern})\s*([a-z0-9.-]+)\b/u'
size_value_template: '/\b(?:{size_pattern})\s*[a-z0-9.-]+\b/u'
size_token_value_template: '/\b(?:{size_token_pattern})\b/u'
color_value_template: '/\b(?:{color_pattern})\b/u'
model_like_product: '/\b[a-zäöüß][a-zäöüß®\-]*(?:\s+[a-zäöüß][a-zäöüß®\-]*){0,2}\s+\d{2,5}[a-z0-9\-]*\b/u'
labels:
support_or_diagnostic_signal: support_or_diagnostic
sku_signal: sku
price_signal: price
size_signal: size
size_token_signal: size_token
color_signal: color
advisory_signal_prefix: 'advisory:'
advisory_product_selection_signal: advisory_product_selection
model_like_product_signal: model_like_product
scores:
product_search_min_score: 3
advisory_product_search_min_score: 2
strong_signal_score: 3
sku_signal_score: 2
price_signal_score: 2
size_signal_score: 2
size_token_signal_score: 1
color_signal_score: 1
advisory_signal_score: 1
advisory_product_selection_signal_score: 3
model_like_product_signal_score: 3
retriex.intent.catalog.config:
min_score: 0.72
ambiguity_delta: 0.02
intent_search_limit: 6
list_search_limit: 3
min_allowed_score: 0.0
max_allowed_score: 1.0
retriex.intent.light.config:
list_threshold: 4
quantity_words:
- alle
- sämtliche
- saemtliche
- mehrere
- verschiedene
- einige
- viele
- optionen
- möglichkeiten
- moeglichkeiten
- varianten
- arten
- modelle
- funktionen
- punkte
- schritte
- kategorien
- übersicht
- uebersicht
strong_patterns:
- '/\bliste(n)?\b/u'
- '/\bauflisten\b/u'
- '/\baufz(a|ä)hl(en)?\b/u'
- '/\bnenn(e)?\b/u'
- '/\bzeig(e)?\b/u'
- '/\bwelche\s+sind\b/u'
- '/\bwelche\s+gibt\s+es\b/u'
- '/\bwas\s+sind\b/u'
- '/\bwie\s+viele\b/u'
- '/\branking\b/u'
- '/\btop\s*\d+\b/u'
retriex.intent.sales.config:
dominance_delta: 2
min_score_threshold: 3
sales_signals:
- preis
- preise
- kosten
- lizenz
- lizenzmodell
- tarif
- tarife
- gebuehr
- gebühr
- monatlich
- jaehrlich
- jährlich
- abo
- subscription
comparison_signals:
- '/\bvergleich(en)?\b/u'
- '/\bvs\b/u'
- '/\bgegenueber\b/u'
- '/\balternative(n)?\b/u'
- '/\bunterschied(e)?\b/u'
- '/\bbesser\b/u'
objection_signals:
- problem
- risiko
- nachteil
- datenschutz
- dsgvo
- sicherheit
- compliance
- kritik
- zweifel
- unsicher
implementation_signals:
- implementierung
- implementieren
- integration
- integrieren
- einführung
- einfuehrung
- aufwand
- setup
- rollout
- migration
- installation
- api
- schnittstelle
roi_signals:
- roi
- rentabilitaet
- rentabilität
- business case
- einsparung
- kosten senken
- umsatz steigern
- effizienz steigern