This commit is contained in:
team 1
2026-05-03 21:33:57 +02:00
parent 427dfe9987
commit c5e212f8f2
5 changed files with 60 additions and 1 deletions

View File

@@ -0,0 +1,14 @@
# RetrieX Patch p24 - Agent RAG Evidence Cleanup Profile
## Goal
Wire the Agent RAG evidence guard to the central `rag_evidence` cleanup profile from `language.yaml`.
## Scope
- Adds `rag_evidence_guard.cleanup_profile: rag_evidence` to `config/retriex/agent.yaml`.
- Merges profile stopwords with existing legacy `rag_evidence_guard.stop_terms` at runtime.
- Keeps all legacy stop terms in place.
- Adds config validation for the referenced cleanup profile.
## Safety
No legacy lists are removed in this patch.
No Commerce, Shop fallback, Retrieval scoring, or Prompt logic is changed.

View File

@@ -207,6 +207,7 @@ parameters:
debug_internal_error_prefix: '❌ Interner Fehler: ' debug_internal_error_prefix: '❌ Interner Fehler: '
rag_evidence_guard: rag_evidence_guard:
cleanup_profile: rag_evidence
stop_terms: stop_terms:
- suche - suche
- suchen - suchen

View File

@@ -8,6 +8,7 @@ use App\Commerce\Dto\ShopProductResult;
use App\Commerce\SearchRepairService; use App\Commerce\SearchRepairService;
use App\Commerce\ShopSearchService; use App\Commerce\ShopSearchService;
use App\Config\AgentRunnerConfig; use App\Config\AgentRunnerConfig;
use App\Config\LanguageCleanupConfig;
use App\Context\ContextService; use App\Context\ContextService;
use App\Context\UrlAnalyzer; use App\Context\UrlAnalyzer;
use App\Infrastructure\OllamaClient; use App\Infrastructure\OllamaClient;
@@ -33,6 +34,7 @@ final readonly class AgentRunner
private OllamaClient $ollamaClient, private OllamaClient $ollamaClient,
private LoggerInterface $agentLogger, private LoggerInterface $agentLogger,
private AgentRunnerConfig $agentRunnerConfig, private AgentRunnerConfig $agentRunnerConfig,
private LanguageCleanupConfig $languageCleanupConfig,
private bool $debug, private bool $debug,
private bool $logPrompt, private bool $logPrompt,
private bool $logContext, private bool $logContext,
@@ -2710,7 +2712,7 @@ final readonly class AgentRunner
$normalizedPrompt = $this->normalizeRagEvidenceText($prompt); $normalizedPrompt = $this->normalizeRagEvidenceText($prompt);
$stopTerms = []; $stopTerms = [];
foreach ($this->agentRunnerConfig->getRagEvidenceStopTerms() as $term) { foreach ($this->getRagEvidenceCleanupStopTerms() as $term) {
$term = $this->normalizeRagEvidenceText($term); $term = $this->normalizeRagEvidenceText($term);
if ($term !== '') { if ($term !== '') {
$stopTerms[$term] = true; $stopTerms[$term] = true;
@@ -2743,6 +2745,35 @@ final readonly class AgentRunner
return $groups; return $groups;
} }
/** @return string[] */
private function getRagEvidenceCleanupStopTerms(): array
{
return $this->mergeUniqueStrings(
$this->languageCleanupConfig->getStopWordsForProfile($this->agentRunnerConfig->getRagEvidenceCleanupProfile()),
$this->agentRunnerConfig->getRagEvidenceStopTerms()
);
}
/**
* @param string[] $left
* @param string[] $right
* @return string[]
*/
private function mergeUniqueStrings(array $left, array $right): array
{
$out = [];
foreach (array_merge($left, $right) as $item) {
$item = trim((string) $item);
if ($item === '' || isset($out[$item])) {
continue;
}
$out[$item] = $item;
}
return array_values($out);
}
/** /**
* @return array<string, string[]> * @return array<string, string[]>
*/ */

View File

@@ -503,6 +503,11 @@ final class AgentRunnerConfig
return $this->getRequiredInt('no_llm_fallback.max_shop_results'); return $this->getRequiredInt('no_llm_fallback.max_shop_results');
} }
public function getRagEvidenceCleanupProfile(): string
{
return $this->getRequiredString('rag_evidence_guard.cleanup_profile');
}
/** /**
* @return string[] * @return string[]
*/ */

View File

@@ -496,6 +496,7 @@ final readonly class RetriexEffectiveConfigProvider
'debug_internal_error_prefix' => $this->agentRunnerConfig->getDebugInternalErrorPrefix(), 'debug_internal_error_prefix' => $this->agentRunnerConfig->getDebugInternalErrorPrefix(),
], ],
'rag_evidence_guard' => [ 'rag_evidence_guard' => [
'cleanup_profile' => $this->agentRunnerConfig->getRagEvidenceCleanupProfile(),
'stop_terms' => $this->agentRunnerConfig->getRagEvidenceStopTerms(), 'stop_terms' => $this->agentRunnerConfig->getRagEvidenceStopTerms(),
'synonyms' => $this->agentRunnerConfig->getRagEvidenceSynonyms(), 'synonyms' => $this->agentRunnerConfig->getRagEvidenceSynonyms(),
'aggregate_query_patterns' => $this->agentRunnerConfig->getRagEvidenceAggregateQueryPatterns(), 'aggregate_query_patterns' => $this->agentRunnerConfig->getRagEvidenceAggregateQueryPatterns(),
@@ -1076,6 +1077,13 @@ final readonly class RetriexEffectiveConfigProvider
} }
$ragEvidence = is_array($agent['rag_evidence_guard'] ?? null) ? $agent['rag_evidence_guard'] : []; $ragEvidence = is_array($agent['rag_evidence_guard'] ?? null) ? $agent['rag_evidence_guard'] : [];
$ragEvidenceCleanupProfile = $ragEvidence['cleanup_profile'] ?? null;
if (!is_string($ragEvidenceCleanupProfile) || trim($ragEvidenceCleanupProfile) === '') {
$errors[] = 'agent.rag_evidence_guard.cleanup_profile must be a non-empty string.';
} elseif (!in_array($ragEvidenceCleanupProfile, $this->languageCleanupConfig->getCleanupProfileNames(), true)) {
$errors[] = 'agent.rag_evidence_guard.cleanup_profile references unknown language cleanup profile: ' . $ragEvidenceCleanupProfile . '.';
}
$this->validateStringList($this->toList($ragEvidence['stop_terms'] ?? []), 'agent.rag_evidence_guard.stop_terms', $errors, $warnings); $this->validateStringList($this->toList($ragEvidence['stop_terms'] ?? []), 'agent.rag_evidence_guard.stop_terms', $errors, $warnings);
$this->validateStringListMap($ragEvidence['synonyms'] ?? [], 'agent.rag_evidence_guard.synonyms', $errors, $warnings); $this->validateStringListMap($ragEvidence['synonyms'] ?? [], 'agent.rag_evidence_guard.synonyms', $errors, $warnings);
$this->validateRegexPatternList($ragEvidence['aggregate_query_patterns'] ?? [], 'agent.rag_evidence_guard.aggregate_query_patterns', $errors); $this->validateRegexPatternList($ragEvidence['aggregate_query_patterns'] ?? [], 'agent.rag_evidence_guard.aggregate_query_patterns', $errors);