Files
MtoRagSystem/config/retriex/agent.yaml
2026-05-02 17:27:34 +02:00

415 lines
15 KiB
YAML

# Agent orchestration limits, user-visible status/source labels and Shopware query prompt wording.
# Values mirror the current stable defaults; PHP fallbacks remain in AgentRunnerConfig.
parameters:
retriex.agent.config:
commerce_history_budget_chars: 1000
product_search_knowledge_chunk_limit: 6
advisory_product_search_knowledge_chunk_limit: 9
optimized_shop_query_prefix_pattern: '/^(?:keywords?|suchquery|search\s*query|query)\s*:\s*/iu'
optimized_shop_query_trim_characters: " \t\n\r\0\x0B\"'`"
follow_up_context:
strong_reference_patterns:
- '/\bder\s+wert\b/u'
- '/\bdieser\s+wert\b/u'
- '/\bdiesen\s+wert\b/u'
- '/\bdem\s+wert\b/u'
- '/\bmit\s+welche(?:m|n|r)?\b/u'
- '/\bwomit\b/u'
- '/\bdamit\b/u'
- '/\bdafuer\b/u'
- '/\bdafür\b/u'
- '/\bdazu\b/u'
- '/\bdaraus\b/u'
- '/\bwelche(?:r|s|m|n)?\s+indikator\b/u'
- '/\bwelche(?:r|s|m|n)?\s+indikatortyp\b/u'
- '/\bindikator\s+(?:dafuer|dafür|dazu|hierfuer|hierfür)\b/u'
- '/\bwelche(?:r|s|m|n)?\s+bereich\b/u'
- '/\bwelche(?:r|s|m|n)?\s+messbereich\b/u'
- '/\bwelche(?:r|s|m|n)?\s+grenzwert\b/u'
explicit_commercial_signal_terms:
- shop
- preis
- preise
- kostet
- kosten
- kaufen
- bestellen
- warenkorb
- lieferzeit
- verfuegbar
- verfügbar
- lager
- url
- link
- artikelnummer
- sku
- produktnummer
history_question_pattern: '/^Question:\s*(.+)$/mi'
history_turn_split_pattern: '/(?=^Question:\s)/m'
history_question_strip_pattern: '/^Question:\s*.*(?:\R|$)/u'
reference_anchor:
testomat_model_pattern: '/\bTestomat(?:®)?\s+(?:\d{3,4}|EVO(?:\s+[A-Z]{2,6})?|ECO(?:[-\s]?(?:PLUS|C))?|DUO(?:\s+\d{3,4})?|LAB(?:\s+[A-Z]{2,6})?)\b/iu'
hardness_value_pattern: '/\b\d+(?:[,.]\d+)?\s*°\s*dH\b/iu'
messages:
empty_prompt: '❌ Empty prompt.'
analyze_request: 'Ich analysiere deine Anfrage...'
check_internet_sources: 'Ich prüfe auf Internetquellen...'
retrieve_knowledge: 'Ich hole relevante Daten aus meinem RAG-Wissen...'
optimize_search: 'Ich optimiere die Recherche...'
no_concrete_shop_query: 'Ich kann die Shop-Suche noch nicht belastbar auflösen. Bitte nenne das Produkt, den Messparameter oder das Zubehör etwas konkreter.'
fetch_search_data_template: 'Ich rufe Recherchedaten ab (type: %s)'
analyze_all_information: 'Ich analysiere alle Informationen...'
thinking_while_streaming: 'Denke nach...'
no_llm_data_received: '❌ Es wurden keine Daten vom LLM empfangen.'
generic_internal_error: '❌ Bei der Verarbeitung der Anfrage ist ein interner Fehler aufgetreten.'
debug_internal_error_prefix: '❌ Interner Fehler: '
rag_evidence_guard:
stop_terms:
- suche
- suchen
- finde
- finden
- zeige
- einen
- eine
- einem
- einer
- der
- die
- das
- den
- dem
- des
- für
- fuer
- mit
- ohne
- und
- oder
- kann
- können
- koennen
- messen
- messung
- tester
- testgerät
- testgeraet
- gerät
- geraet
- messgerät
- messgeraet
- produkt
- produkte
- artikel
- shop
aggregate_query_patterns:
- '/\bwie\s+viele\b/u'
- '/\bwieviele\b/u'
- '/\banzahl\b/u'
- '/\bcount\b/u'
- '/\bgesamtzahl\b/u'
aggregate_evidence_terms:
- anzahl
- gesamtzahl
- stückzahl
- stueckzahl
- count
- portfolio
- sortiment
- bestand
- bestände
- bestaende
- lieferprogramm
aggregate_answer_evidence_patterns:
- '/\b(?:anzahl|gesamtzahl|stückzahl|stueckzahl|count)\b.{0,80}\b\d+\b/u'
- '/\b\d+\s+(?:[a-z0-9+\-]+\s+){0,3}(?:produkte|artikel|geräte|geraete|messgeräte|messgeraete)\b/u'
- '/\b(?:insgesamt|gesamt|total)\b.{0,80}\b\d+\b/u'
- '/\b(?:sortiment|portfolio|lieferprogramm)\b.{0,120}\b(?:umfasst|enthält|enthaelt|besteht\s+aus|beinhaltet)\b.{0,80}\b\d+\b/u'
synonyms:
salinität:
- salinität
- salinitaet
- salinity
- salzgehalt
- tds
- leitfähigkeit
- leitfaehigkeit
salinitaet:
- salinität
- salinitaet
- salinity
- salzgehalt
- tds
- leitfähigkeit
- leitfaehigkeit
salinity:
- salinität
- salinitaet
- salinity
- salzgehalt
- tds
- leitfähigkeit
- leitfaehigkeit
redox:
- redox
- orp
- oxidations-reduktionspotential
- oxidations reduktionspotential
orp:
- redox
- orp
- oxidations-reduktionspotential
- oxidations reduktionspotential
ph:
- ph
- ph-wert
- ph wert
chlor:
- chlor
- freies chlor
- gesamtchlor
- chlorine
no_llm_fallback:
max_shop_results: 5
messages:
shop_only: 'Ich finde dazu im RAG-Wissen keine belastbare Fachinformation. Aus den Shopdaten ergeben sich folgende Treffer; technische Eignung bitte prüfen:'
shop_with_knowledge: 'Es liegen RAG-/Kontexttreffer und Shopdaten vor. Ohne LLM leite ich daraus keine technische Eignung ab. Die Shopdaten zeigen folgende Treffer; technische Eignung bitte prüfen:'
accessory_only_for_main_device: 'Die Shop-Treffer wirken wie Zubehör/Verbrauchsmaterial und nicht wie eine angefragte Messanlage oder ein Hauptgerät. Ich werte sie deshalb nicht als passende Hauptlösung.'
escalation: 'Für eine verbindliche Produktauswahl sollte der konkrete Anwendungsfall durch Vertrieb oder Support geprüft werden.'
knowledge_only: 'Ich habe Treffer im RAG-Wissen gefunden, aber ohne LLM kann ich daraus keine belastbare fachliche Antwort synthetisieren. Ich gebe deshalb keine sichere Produktaussage aus. Bitte aktiviere das LLM oder konkretisiere die Frage für eine gezielte Prüfung.'
no_data: 'Ich finde dazu keine belastbaren Daten in den vorliegenden Quellen. Bitte nenne Produkt, Messparameter, Zubehör oder Anwendungsfall genauer.'
no_shop_results_with_knowledge: 'Ich finde RAG-/Kontexttreffer, aber keine passenden Shop-Treffer zur aktuellen Suchanfrage. Das ist keine Aussage, dass es das Produkt nicht gibt. Ohne LLM gebe ich keine technische Negativaussage aus; bitte prüfe den Suchbegriff oder den Anwendungsfall gezielter.'
no_shop_results_no_knowledge: 'Ich finde weder belastbares RAG-Wissen noch passende Shop-Treffer zur aktuellen Suchanfrage. Das ist keine sichere Negativaussage. Bitte nenne Produkt, Messparameter oder Zubehör konkreter.'
shop_unavailable_with_knowledge: 'Live-Shopdaten konnten nicht geladen werden. Ich kann keine Aussage zu aktueller Verfügbarkeit, Preis oder Shop-Portfolio treffen. Wenn das RAG-Wissen einen direkten Fachbeleg enthält, wird die fachliche Antwort davon getrennt betrachtet.'
shop_unavailable_no_knowledge: 'Live-Shopdaten konnten nicht geladen werden und die RAG-Treffer enthalten keinen direkten Fachbeleg zur Anfrage. Ich kann daraus keine verlässliche Produkt-, Verfügbarkeits- oder Portfolioaussage ableiten.'
product_roles:
main_device_request_keywords:
- anlage
- messanlage
- gerät
- geraet
- messgerät
- messgeraet
- analysegerät
- analysegeraet
- analysator
- analyzer
- system
- testomat
- testomaten
- testoamt
- testomate
- pockettester
accessory_product_keywords:
- indikator
- indicator
- indikatortyp
- reagenz
- reagent
- reagenzsatz
- kalibrierlösung
- kalibrierloesung
- pufferlösung
- pufferloesung
- reinigungslösung
- reinigungsloesung
- kalibrier
- puffer
- zubehör
- zubehor
- accessory
- ersatzteil
- verbrauch
- consumable
- kit
- set
- flasche
- bottle
- 100 ml
- 500 ml
- 100ml
- 500ml
source_labels:
external_url: 'Externe URL'
rag_knowledge: 'RAG Wissen'
conversation_history: 'Chatverlauf'
shop_system: 'Shopsystem'
extended_shop_search: 'Erweiterte Shopsuche'
used_sources_prefix: 'Genutzte Quellen: '
sources_prefix: 'Quellen: '
html:
source_badge_template: '<span class="badge bg-info text-black">%s</span>'
error_template: |
<div class="retriex-alert retriex-alert--error"><div class="retriex-alert__icon">❌</div><div class="retriex-alert__content"><div class="retriex-alert__title">Hinweis</div><div class="retriex-alert__text">%s</div></div></div>
think_template: |
<span class="text-info think">%s</span>
info_template: "\n\n<span class=\"text-info fw-bolder\">%s</span>\n"
debug_template: "\n\nDEBUG: <code>%s</code>\n"
shop_prompt:
intro: 'Generate a short search query for Shopware 6 from the following user input text.'
output_format_block: |-
Output format:
Keyword1 Keyword2 Keyword3
recent_conversation_context_label: 'RECENT CONVERSATION CONTEXT'
current_user_input_label: 'CURRENT USER INPUT'
rules:
- '- Output only the final search query.'
- '- Always convert relevant search terms to their singular form.'
- '- No introduction, no explanation, no quotation marks.'
- '- Use only shop-relevant search terms from the user input for a shop search.'
- '- Maximum 6 search terms, preferably fewer.'
- '- Remove filler words, polite phrases, and irrelevant words.'
- '- Preserve product names, brands, model numbers, and compound terms exactly if they are relevant.'
- '- Preserve the language of the CURRENT USER INPUT for generic product/search terms; do not translate German search terms into English.'
- '- For German user input, output German shop terms, for example "freies Chlor Messung" instead of "free chlorine measurement".'
- '- Preserve domain terms from the current user input or resolved context in their original language.'
- '- Numbers that belong to a product name or model must be preserved (e.g. Indikator 300, Testomat 808, Testomat 2000).'
- '- Separate terms using spaces only.'
- '- If a relevant product name is present, it must be placed at the beginning of the final search query.'
- '- Try to always identify all products mentioned in the user input text, even in long prompts.'
- '- Look for terms such as Testomat, Horiba, Tritromat, Pockettester, Redox, ORP, or words like indicator/Indikator.'
- '- If the current user input is vague or referential, use the recent conversation context only as support.'
- '- Do not output words that only describe conversation flow, such as "same", "again", "also", or "like above".'
conversation_context_rules:
- '- The current user input has highest priority.'
- '- Use the recent conversation context only to resolve omitted references.'
- '- Use it only for product carry-over, brand carry-over, model carry-over, or variant follow-ups.'
- '- Do not revive older products unless the current user input clearly refers to them.'
- '- If the current input starts a new topic, ignore older product context.'
- '- Prefer the most recent product reference over older ones.'
context_anchor_enrichment:
enabled: true
max_query_terms: 2
template: '{anchor} {query}'
trigger_terms:
- indikator
- indikatortyp
- indicator
- reagenz
- reagenzsatz
- reagent
- zubehör
- zubehor
- accessory
anchor_patterns:
- '/\b(?:indikator(?:typ)?|indicator(?:\s+type)?|reagenz(?:satz|typ)?|reagent(?:\s+set|\s+type)?|typ|type)\s+[A-Za-zÄÖÜäöüß]{0,8}\s*\d{1,5}(?:\s*[A-ZÄÖÜ]{1,4})?(?:\s*%)?\b/iu'
meta_query_guard:
enabled: true
context_fallback_enabled: true
context_fallback_question_limit: 12
context_fallback_history_budget_chars: 20000
context_fallback_use_full_history: true
context_fallback_max_terms: 6
context_fallback_filter_terms:
- mit
- welche
- welcher
- welches
- welchem
- welchen
- ist
- sind
- gut
- geeignet
- was
- wie
- wo
- kann
- koennen
- können
- konnte
- könnte
- ich
- mir
- wir
- man
- nutzen
- benutzen
- verwenden
- verwende
- nehmen
- zur
- zum
- für
- fuer
- messen
- gemessen
meta_only_terms:
- shop
- shopsuche
- shop-suche
- suche
- suchen
- such
- finde
- find
- zeige
- zeig
- bitte
- mal
- im
- in
- nach
- danach
- dazu
- damit
- dafür
- dafuer
- hierzu
- den
- die
- das
- der
- dem
language_preservation:
enabled: true
language_markers:
de:
- ' ä '
- ' ö '
- ' ü '
- ' ß '
- ' der '
- ' die '
- ' das '
- ' ein '
- ' eine '
- ' einer '
- ' einen '
- ' welchem '
- ' welchen '
- ' welche '
- ' welcher '
- ' kann '
- ' nutzen '
- ' zur '
- ' für '
- ' fuer '
- ' messung '
- ' indikator '
- ' reagenz '
- ' chlor '
translation_replacements:
de:
free chlorine: 'freies chlor'
free chlor: 'freies chlor'
total chlorine: 'gesamtchlor'
chlorine measurement: 'chlor messung'
water hardness: 'wasserhärte'
measurement: 'messung'
measuring: 'messung'
chlorine: 'chlor'
indicator: 'indikator'
indicators: 'indikatoren'
reagent: 'reagenz'
reagents: 'reagenzien'
accessory: 'zubehör'
accessories: 'zubehör'