feat: soglia di sicurezza in qmem_correct con query (correctMinScore default 0.60)
- rifiuta il supersede se lo score del top-1 è sotto soglia (evidenza debole/rumorosa) - messaggio guida: verifica con qmem_search e riprova con memory_id esplicito - soglia configurabile in ~/.config/pi-qmem/config.json
This commit is contained in:
+19
-1
@@ -29,12 +29,14 @@ interface MemoryConfig {
|
||||
url: string;
|
||||
apiKey: string;
|
||||
timeoutMs?: number;
|
||||
correctMinScore?: number;
|
||||
}
|
||||
|
||||
const CONFIG_DEFAULTS: MemoryConfig = {
|
||||
url: "http://10.8.0.3:8082",
|
||||
apiKey: "",
|
||||
timeoutMs: 30_000,
|
||||
correctMinScore: 0.6,
|
||||
};
|
||||
|
||||
// Retry su errori transitori (429/5xx/timeout): backoff esponenziale + jitter
|
||||
@@ -343,7 +345,9 @@ export default function qmemExtension(pi: ExtensionAPI) {
|
||||
"in archivio marcato superseded, mai eliminato). Passa memory_id se lo conosci (dalla risposta di " +
|
||||
"qmem_search), oppure query per individuare automaticamente il record attivo più rilevante. Il testo " +
|
||||
"corretto sostituisce quello vecchio nella ricerca semantica. Usalo quando hai evidenza verificata che " +
|
||||
"una memoria è falsa: contraddizione con fonte autorevole, conferma dell'utente o esito di un'azione.",
|
||||
"una memoria è falsa: contraddizione con fonte autorevole, conferma dell'utente o esito di un'azione. " +
|
||||
"Con query: rifiuta se lo score del top-1 è sotto la soglia (correctMinScore, default 0.60) per evitare " +
|
||||
"di supersedere il record sbagliato — in quel caso verifica e riprova con memory_id esplicito.",
|
||||
promptGuidelines: [
|
||||
"qmem_correct: correggi solo con evidenza verificata (fonte autorevole, conferma utente, esito di azione) — mai per semplice dubbio o opinione.",
|
||||
"qmem_correct: il vecchio record resta in archivio marcato superseded — mai eliminare (tranne duplicati esatti).",
|
||||
@@ -402,6 +406,20 @@ export default function qmemExtension(pi: ExtensionAPI) {
|
||||
details: { error: "not_found" },
|
||||
};
|
||||
}
|
||||
// Soglia di sicurezza: rifiuta correzioni su record deboli/rumorosi
|
||||
const minScore = cfg.correctMinScore ?? 0.6;
|
||||
if (results[0].score < minScore) {
|
||||
return {
|
||||
content: [
|
||||
{
|
||||
type: "text",
|
||||
text: `Correzione rifiutata: il record più rilevante ha score ${results[0].score} < soglia ${minScore} (evidenza debole/rumorosa). ` +
|
||||
`Verifica il record con qmem_search (include_superseded=true per la lineage) e riprova con memory_id esplicito, oppure abbassa correctMinScore nella config.`,
|
||||
},
|
||||
],
|
||||
details: { error: "low_score", score: results[0].score, min_score: minScore },
|
||||
};
|
||||
}
|
||||
memoryId = results[0].memory_id;
|
||||
orig = results[0];
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user