This commit is contained in:
team 1
2026-05-02 17:27:34 +02:00
parent e4c05d6ad5
commit 0f89c5c0f6
6 changed files with 66 additions and 7 deletions

View File

@@ -354,7 +354,8 @@ final readonly class AgentRunner
isCommerceIntent: true,
shopSearchAttempted: $shopSearchAttempted,
hasShopResults: $shopResults !== [],
shopSearchHadSystemFailure: $primaryShopSearchHadSystemFailure
shopSearchHadSystemFailure: $primaryShopSearchHadSystemFailure,
knowledgeEvidenceState: $knowledgeEvidenceState
)
),
'meta'
@@ -419,7 +420,8 @@ final readonly class AgentRunner
isCommerceIntent: $this->isCommerceIntent($commerceIntent),
shopSearchAttempted: $shopSearchAttempted,
hasShopResults: $shopResults !== [],
shopSearchHadSystemFailure: $primaryShopSearchHadSystemFailure
shopSearchHadSystemFailure: $primaryShopSearchHadSystemFailure,
knowledgeEvidenceState: $knowledgeEvidenceState
)
),
'meta'
@@ -458,7 +460,8 @@ final readonly class AgentRunner
isCommerceIntent: $this->isCommerceIntent($commerceIntent),
shopSearchAttempted: $shopSearchAttempted,
hasShopResults: $shopResults !== [],
shopSearchHadSystemFailure: $primaryShopSearchHadSystemFailure
shopSearchHadSystemFailure: $primaryShopSearchHadSystemFailure,
knowledgeEvidenceState: $knowledgeEvidenceState
),
completed: true
),
@@ -1652,12 +1655,20 @@ final readonly class AgentRunner
}
$haystack = $this->normalizeRagEvidenceText(implode("\n\n", array_map('strval', $knowledgeChunks)));
$isAggregateQuery = $this->isAggregateRagEvidenceQuery($prompt);
if (
$this->isAggregateRagEvidenceQuery($prompt)
$isAggregateQuery
&& !$this->containsAnyRagEvidencePattern($haystack, $this->agentRunnerConfig->getRagEvidenceAggregateAnswerEvidencePatterns())
) {
return 'aggregate_missing';
}
if (
$isAggregateQuery
&& !$this->containsAnyRagEvidenceTerm($haystack, $this->agentRunnerConfig->getRagEvidenceAggregateEvidenceTerms())
) {
return 'weak';
return 'aggregate_missing';
}
foreach ($needles as $needleGroup) {
@@ -1680,6 +1691,7 @@ final readonly class AgentRunner
{
return match ($knowledgeEvidenceState) {
'direct' => 'fachlich belegt',
'aggregate_missing' => 'geprüfte Quellen, keine passende Zählinformation',
'weak' => 'RAG-Näherungstreffer, kein direkter Fachbeleg',
default => 'noch keine belastbaren Treffer',
};
@@ -1689,6 +1701,7 @@ final readonly class AgentRunner
{
return match ($knowledgeEvidenceState) {
'direct' => 'fachlich belegt; Shopdaten werden geprüft',
'aggregate_missing' => 'geprüfte Quellen ohne Zählinformation; Shopdaten werden geprüft',
'weak' => 'RAG-Näherungstreffer; Shopdaten werden geprüft',
default => 'Shopdaten werden geprüft',
};
@@ -1725,6 +1738,20 @@ final readonly class AgentRunner
return false;
}
/**
* @param string[] $patterns
*/
private function containsAnyRagEvidencePattern(string $haystack, array $patterns): bool
{
foreach ($patterns as $pattern) {
if (@preg_match($pattern, $haystack) === 1) {
return true;
}
}
return false;
}
/**
* @return array<int, string[]>
*/
@@ -1968,8 +1995,15 @@ final readonly class AgentRunner
bool $isCommerceIntent,
bool $shopSearchAttempted,
bool $hasShopResults,
bool $shopSearchHadSystemFailure
bool $shopSearchHadSystemFailure,
string $knowledgeEvidenceState = 'unknown'
): string {
if ($knowledgeEvidenceState === 'aggregate_missing' && !$hasShopResults) {
return $shopSearchHadSystemFailure
? 'geprüfte Quellen ohne Zählinformation; Shopdaten nicht verfügbar'
: 'geprüfte Quellen, keine passende Zählinformation';
}
if ($shopSearchHadSystemFailure) {
return $hasKnowledge ? 'fachlich belegt; Shopdaten nicht verfügbar' : 'Shopdaten nicht verfügbar';
}