Short-circuit FAQ
Una cache di domande e risposte verificate da esperti di dominio che bypassa l'LLM — protetta da esclusioni conservative, perché si trova a monte della protezione di prevenzione delle risposte inventate.
La cache FAQ restituisce una risposta verificata da esperti di dominio per una domanda nota, bypassando completamente l'LLM, il fact store e il retriever. È un'ottimizzazione di latenza e costi — e un livello ad alto rischio, perché si trova a monte della protezione di prevenzione delle risposte inventate. Uno short-circuit errato salterebbe ogni controllo di sicurezza a valle.
Poiché il livello FAQ si trova a monte della prevenzione delle risposte inventate, le sue
esclusioni sono deliberatamente conservative: gli elementi strutturato-numerici, relativi a concorrenti, in tempo reale, scaduti,
disabilitati e RESTRICTED non attivano mai lo short-circuit.
Dove si colloca
Nella route /v1/ask (service/api/routes.py), il lookup FAQ viene eseguito per primo:
# 1) FAQ short-circuit — on hit, never touches provider / fact store / retriever
hit = faq_cache.lookup(req.question, reference_date=ref)
if hit is not None:
return AskResponse(..., route="faq", answer=hit.answer, sources=[...])
# 2) miss -> normal workflow (anti-fabrication guard, dual channel, ...)
result = answer_question(req.question, store, provider, ...)lookup è una funzione pura (service/faq/faq_cache.py): consulta parse_intent /
clarify_scope per le decisioni di confine ma non raggiunge mai l'LLM, il fact store o il
retriever. La corrispondenza avviene esclusivamente per match esatto normalizzato / alias (NFKC,
casefold, normalizzazione degli spazi e rimozione della punteggiatura finale) — nessuna
corrispondenza fuzzy o basata su embedding.
Le esclusioni conservative
lookup restituisce un miss (None) se una qualsiasi di queste condizioni è vera — le esclusioni vengono verificate
prima di consultare l'indice della cache:
Un elemento FAQ
Gli elementi sono verificati da esperti di dominio e tracciati per versione; l'hit trasporta la propria provenienza
(FAQHit.source):
{
"id": "what-is-ragspine",
"question": "RAGSpine 是什么?",
"aliases": ["What is RAGSpine?"],
"answer": "RAGSpine 是一个无框架的后端 RAG 引擎……",
"source": "internal/faq-handbook.md",
"version": 3,
"enabled": true,
"valid_from": "2026-01-01",
"valid_until": null,
"sensitivity": "INTERNAL"
}Un hit restituisce route: "faq" con un blocco cache (hit, type, faq_id, version, source).
La trace registra solo cache_hit, faq_id e faq_version — mai il testo della risposta. Carica il
JSON delle FAQ tramite la variabile d'ambiente RAGSPINE_FAQ_SOURCE.