This commit is contained in:
team 1
2026-05-06 12:14:13 +02:00
parent 1229437ab9
commit 10dd7922a2

View File

@@ -292,6 +292,26 @@ final readonly class AgentRunner
$optimizedShopQuery = '';
}
$referentialAnchoredShopSearchQuery = $this->guardReferentialShopQueryFallbackWithHistoryAnchor(
prompt: $originalPrompt,
shopSearchQuery: $shopSearchQuery,
commerceHistoryContext: $shopQueryHistoryContext
);
if ($referentialAnchoredShopSearchQuery !== $shopSearchQuery) {
$this->agentLogger->info('Enriched referential shop fallback query with history anchor', [
'userId' => $userId,
'prompt' => $prompt,
'routingPrompt' => $routingPrompt,
'optimizedShopQuery' => $optimizedShopQuery,
'shopSearchQuery' => $shopSearchQuery,
'referentialAnchoredShopSearchQuery' => $referentialAnchoredShopSearchQuery,
]);
$shopSearchQuery = $referentialAnchoredShopSearchQuery;
$optimizedShopQuery = '';
}
$ragAnchoredShopSearchQuery = $this->enrichShopSearchQueryWithRagAnchor(
prompt: $originalPrompt,
shopSearchQuery: $shopSearchQuery,
@@ -2581,6 +2601,83 @@ final readonly class AgentRunner
return trim($query);
}
private function guardReferentialShopQueryFallbackWithHistoryAnchor(
string $prompt,
string $shopSearchQuery,
string $commerceHistoryContext
): string {
if (!$this->agentRunnerConfig->isShopQueryContextAnchorEnrichmentEnabled()) {
return $shopSearchQuery;
}
if (trim($commerceHistoryContext) === '') {
return $shopSearchQuery;
}
if (!$this->shouldUseCommerceHistoryForShopQuery($prompt)) {
return $shopSearchQuery;
}
$combined = trim($shopSearchQuery . ' ' . $prompt);
if (!$this->containsConfiguredShopQueryAnchorTrigger($combined)) {
return $shopSearchQuery;
}
$anchor = $this->normalizeShopQueryAnchor(
$this->extractLatestConfiguredShopQueryContextAnchor($commerceHistoryContext)
);
if ($anchor === '' || $this->queryAlreadyContainsAllAnchorTokens($shopSearchQuery, $anchor)) {
return $shopSearchQuery;
}
$referentialQuery = $this->extractReferentialShopQueryTriggerTerms($combined);
if ($referentialQuery === '') {
return $shopSearchQuery;
}
$template = $this->agentRunnerConfig->getShopQueryContextAnchorEnrichmentTemplate();
$enriched = $this->renderAgentTemplate($template, [
'anchor' => $anchor,
'query' => $referentialQuery,
]);
$enriched = preg_replace('/\s+/u', ' ', $enriched) ?? $enriched;
$enriched = trim($enriched);
return $enriched !== '' ? $enriched : $shopSearchQuery;
}
private function extractReferentialShopQueryTriggerTerms(string $text): string
{
$tokens = $this->tokenizeShopQueryCandidate($text);
if ($tokens === []) {
return '';
}
$triggerTokens = [];
foreach ($this->agentRunnerConfig->getShopQueryContextAnchorEnrichmentTriggerTerms() as $term) {
foreach ($this->tokenizeShopQueryCandidate($term) as $termToken) {
$triggerTokens[$termToken] = true;
}
}
if ($triggerTokens === []) {
return '';
}
$out = [];
foreach ($tokens as $token) {
if (!isset($triggerTokens[$token]) || isset($out[$token])) {
continue;
}
$out[$token] = $token;
}
return implode(' ', array_values($out));
}
private function enrichReferentialShopQueryFromHistory(
string $query,
string $sourcePrompt,