[FIX] ARIA: inietta griglia esatta combo Rilevanza NIS2 nel prompt (ticket #429)
ARIA (askWithRag) conosceva solo il nome pagina + KB/fonti, non la griglia reale delle tendine della finestra «Valuta Rilevanza NIS2» (AssetScoringService::GRID): dava risposte generiche non corrispondenti alla finestra. Aggiunto relevanceGridBlock() (6 criteri, opzioni, punteggi, desc dalla fonte di verita') iniettato nel system prompt quando l'utente e nell'Inventario o chiede della rilevanza. Additivo, nessun impatto su altri flussi. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
cf23be9c77
commit
08d4ac0cc4
@@ -80,6 +80,32 @@ class AIService
|
||||
. "4. Se l'utente cerca una funzione che non corrisponde ad alcuna voce, dillo chiaramente e suggerisci la voce piu' vicina, senza inventarne una.\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* Griglia ESATTA delle combo della finestra «Valuta Rilevanza NIS2»
|
||||
* (Inventario asset), generata dalla fonte di verita' AssetScoringService::GRID.
|
||||
* Iniettata nel system prompt di ARIA cosi' che, quando l'utente chiede del
|
||||
* significato di una combo/criterio o dei punteggi, ARIA usi i valori REALI
|
||||
* della finestra invece di inventarne (ticket #429, 2026-06-24: ARIA dava una
|
||||
* risposta sulle combo "non corrispondente alla finestra").
|
||||
*/
|
||||
private function relevanceGridBlock(): string
|
||||
{
|
||||
require_once __DIR__ . '/AssetScoringService.php';
|
||||
if (!class_exists('AssetScoringService')) return '';
|
||||
|
||||
$lines = [];
|
||||
$lines[] = "\n## RILEVANZA NIS2 — combo della finestra «Valuta Rilevanza NIS2» (Inventario asset)";
|
||||
$lines[] = "Questa e' la griglia ESATTA della finestra di valutazione: 6 criteri pesati, punteggio totale 0-100, asset RILEVANTE NIS2 se il totale e' >= "
|
||||
. AssetScoringService::RELEVANCE_THRESHOLD . " (requisito GV.OC-04). Quando l'utente chiede il significato di una combo, di un'opzione o dei punteggi, usa SOLO queste voci e questi valori, NON inventarne altri.";
|
||||
foreach (AssetScoringService::GRID as $crit) {
|
||||
$lines[] = sprintf("\n%s (max %d punti) — %s", $crit['label'], $crit['max'], $crit['help']);
|
||||
foreach ($crit['options'] as $opt) {
|
||||
$lines[] = sprintf(" - %s (%d pt): %s", $opt['label'], $opt['points'], $opt['desc']);
|
||||
}
|
||||
}
|
||||
return implode("\n", $lines) . "\n";
|
||||
}
|
||||
|
||||
/**
|
||||
* Analizza risultati gap analysis e genera raccomandazioni
|
||||
*/
|
||||
@@ -740,6 +766,15 @@ PROMPT;
|
||||
. "Tieni conto di dove si trova quando dai indicazioni di navigazione.\n";
|
||||
}
|
||||
|
||||
// Se l'utente e' nell'Inventario o la domanda riguarda la valutazione di
|
||||
// rilevanza NIS2, inietta la griglia ESATTA delle combo (fonte di verita'
|
||||
// AssetScoringService::GRID) per evitare risposte non corrispondenti alla
|
||||
// finestra reale (ticket #429).
|
||||
$onInventory = stripos($page, 'asset') !== false || stripos($page, 'inventario') !== false;
|
||||
if ($onInventory || preg_match('/rilevanz|combo|criticit|punteggio|scoring|valutazione|gv\.?oc/iu', $question)) {
|
||||
$systemPrompt .= $this->relevanceGridBlock();
|
||||
}
|
||||
|
||||
if (!empty($contextBlock)) {
|
||||
$systemPrompt .= "\n## Contesto documentale (knowledge base)\n" . $contextBlock
|
||||
. "\n\nQuando rispondi, cita esplicitamente i numeri tra parentesi quadre [1], [2], ... che corrispondono ai documenti del contesto.";
|
||||
|
||||
Reference in New Issue
Block a user