~/tools / Embedding e ricerca (RAG) / RAG Citation Checker
RAG Citation Checker — Verifica numeri di fonte e citazioni di una risposta RAG con le fonti
Verifica le citazioni di una risposta RAG rispetto alle fonti che hai inviato: ogni numero di fonte deve esistere, ogni testo citato dovrebbe comparire nella sua fonte, e lo strumento elenca le frasi senza numero di fonte, le fonti mai citate e le risposte interrotte. Legge risposte di /api/chat di Ollama (anche in streaming), risposte compatibili con OpenAI e testo semplice. Nulla lascia il tuo browser.
La risposta dell'esempio è scritta a mano per mostrare un testo citato che non è nella sua fonte.
4 fonti (un array JSON di stringhe). Risposta letta come una risposta di /api/chat di Ollama, nella forma di JSON con citazioni.
Token del prompt (prompt_eval_count): 306
- Il testo citato della citazione #2 non è nella fonte [4].
Citazioni
| Fonte | Testo citato | Risultato |
|---|---|---|
| [2] | hnsw.ef_search is 40 by default | Trovato così com'è |
| [4] | 4 bytes per dimension plus 8 | Non è in questa fonte |
Questo verifica solo che i numeri e i testi citati corrispondano alle fonti. Non può dire se la risposta è corretta né se una fonte sostiene davvero una frase.
Formato della risposta dalla documentazione di riferimento dell'API e dal codice sorgente di Ollama, verificato su Ollama 0.40.11 il 2026-11-05. Ollama API: /api/chat
Tutto avviene nel tuo browser. Lo strumento non si collega a nulla.
Quando un modello risponde in base a fonti numerate, le citazioni si possono verificare in modo meccanico. Incolla le stesse fonti che hai inviato, nello stesso formato del RAG Prompt Builder (un array JSON di stringhe o di oggetti, oppure testo separato da righe con --- o da righe vuote; vengono numerate a partire da [1] allo stesso modo), e incolla la risposta. La risposta può essere la risposta completa di /api/chat di Ollama (lo strumento prende message.content; una risposta in streaming con un oggetto JSON per riga viene unita), una risposta compatibile con OpenAI (choices[0].message.content) oppure solo il testo. Se la risposta è JSON con una risposta e un elenco di citazioni, come lo chiede il RAG Prompt Builder, lo strumento verifica ogni citazione: il numero della fonte deve essere uno di quelli delle fonti, e il testo citato dovrebbe comparire in quella fonte, così com'è oppure ignorando le differenze di spazi, maiuscole e minuscole, caratteri a larghezza piena e virgolette tipografiche. Se la risposta è testo, lo strumento raccoglie i numeri tra parentesi quadre, come [2] o [1, 3], segnala i numeri che non corrispondono a nessuna fonte ed elenca le frasi che non hanno un numero. In entrambi i casi elenca le fonti mai citate e avvisa quando non ci sono citazioni, o quando done_reason è "length", il che significa che la risposta è stata interrotta da num_predict. Quello che non può fare è giudicare se la risposta è giusta. Nel nostro test con qwen2.5:7b, una risposta citava parola per parola la regola corretta della sua fonte e dava comunque un numero sbagliato, e un'altra risposta diceva di non saperlo ma citava una fonte senza attinenza. Una citazione che passa qui mostra soltanto che il testo citato è nella fonte.
La logica principale di questo strumento è open source, con licenza MIT. github.com/seigo5555/toolkitbox-lib/src/rag-citations.ts
Casi d'uso
- Verificare che la risposta di un modello locale citi solo fonti che sono state davvero inviate, con testi citati che ci sono davvero
- Trovare le frasi di una risposta che non hanno una fonte, prima di mostrare la risposta agli utenti
- Confrontare prompt o modelli sulle stesse domande in base a quanto spesso le loro citazioni reggono
Utilizzo
- Incolla le fonti che hai inviato insieme alla domanda, nello stesso ordine.
- Incolla la risposta: la risposta completa di /api/chat, una risposta compatibile con OpenAI o il testo della risposta.
- Leggi la tabella delle citazioni, le frasi senza numero di fonte e le fonti che non sono state citate.
FAQ
Un testo citato è segnato come non trovato. La risposta è sbagliata?
Non necessariamente. Il modello potrebbe aver parafrasato la fonte invece di copiarla. Ma un testo che non è nella fonte non si può verificare, quindi considera quell'affermazione non sostenuta finché non hai letto la fonte.
Tutte le citazioni passano. La risposta è corretta?
Non necessariamente. Lo strumento verifica solo che i numeri e i testi citati corrispondano alle fonti. Nel nostro test, il modello ha citato la regola corretta (4 volte le dimensioni più 8 byte) e ha comunque risposto 1552 byte invece di 1,544 per un vettore a 384 dimensioni.
Perché le fonti devono essere nello stesso ordine?
I numeri nella risposta si riferiscono all'ordine in cui le fonti sono state inviate. Se l'ordine è diverso, [2] punta a un altro testo e la verifica non ha senso.
Come divide lo strumento la risposta in frasi?
Agli a capo, dopo . ! ? seguiti da uno spazio, e dopo i caratteri a larghezza piena 。!?. Un numero che segue subito la fine di una frase, come "… here. [1]", vale per quella frase. Abbreviazioni come e.g. possono dividere una frase in due.
Cosa significa done_reason "length"?
Nel codice sorgente di Ollama, è il motivo indicato quando la risposta ha raggiunto il limite di token (num_predict) invece di fermarsi da sola. La fine della risposta, e forse le sue citazioni, manca.
I miei dati vengono inviati da qualche parte?
No. La verifica avviene nel tuo browser. Lo strumento non si collega mai a Ollama né a nessun altro servizio.
Articoli correlati
- Salvare e cercare gli embedding di Ollama in PostgreSQL con pgvectorConserva gli embedding di Ollama in PostgreSQL con pgvector, cercali con HNSW o IVFFlat e passa i risultati a /api/chat perché la risposta citi le sue fonti.
- Embedding con Ollama: le basi per ricerca e RAGCrea embedding con l'/api/embed di Ollama: i modelli e le loro dimensioni, truncate e dimensions, vettori di lunghezza unitaria e similarità del coseno, secondo la documentazione ufficiale.