~/tools / Embeddingi i wyszukiwanie (RAG) / RAG Citation Checker
RAG Citation Checker — Sprawdź numery źródeł i cytaty w odpowiedzi RAG względem wysłanych źródeł
Sprawdź cytowania w odpowiedzi RAG względem wysłanych źródeł: każdy numer źródła musi istnieć, każdy cytat powinien występować w swoim źródle, a narzędzie wypisuje zdania bez numeru źródła, źródła, na które nikt się nie powołał, i odpowiedzi, które zostały ucięte. Czyta odpowiedzi /api/chat Ollamy (także strumieniowane), odpowiedzi zgodne z OpenAI i zwykły tekst. Nic nie opuszcza twojej przeglądarki.
Przykładowa odpowiedź jest napisana ręcznie, aby pokazać cytat, którego nie ma w jego źródle.
Liczba źródeł: 4 (tablica JSON ze stringami). Odpowiedź rozpoznana jako: odpowiedź /api/chat Ollamy; postać: JSON z cytowaniami.
Tokeny w prompcie (prompt_eval_count): 306
- Cytatu z cytowania #2 nie ma w źródle [4].
Cytowania
| Źródło | Cytat | Wynik |
|---|---|---|
| [2] | hnsw.ef_search is 40 by default | Znaleziono dokładnie |
| [4] | 4 bytes per dimension plus 8 | Nie ma w tym źródle |
To sprawdza tylko, czy numery i cytaty zgadzają się ze źródłami. Nie powie, czy odpowiedź jest prawidłowa ani czy źródło naprawdę potwierdza zdanie.
Format odpowiedzi z dokumentacji API i kodu źródłowego Ollamy, sprawdzony na Ollamie 0.40.11 dnia 2026-11-05. Ollama API: /api/chat
Wszystko dzieje się w twojej przeglądarce. Narzędzie z niczym się nie łączy.
Gdy model odpowiada na podstawie ponumerowanych źródeł, cytowania można sprawdzić mechanicznie. Wklej te same źródła, które wysłano, w tym samym formacie co w RAG Prompt Builder (tablica JSON ze stringami lub obiektami albo tekst rozdzielony liniami --- lub pustymi wierszami; są numerowane od [1] tak samo), i wklej odpowiedź. Odpowiedzią może być cała odpowiedź z /api/chat Ollamy (narzędzie bierze message.content; odpowiedź strumieniowana, z jednym obiektem JSON w wierszu, jest łączona), odpowiedź zgodna z OpenAI (choices[0].message.content) albo sam tekst. Jeśli odpowiedź to JSON z odpowiedzią i listą cytowań, o który prosi RAG Prompt Builder, narzędzie sprawdza każde cytowanie: numer źródła musi być jednym ze źródeł, a cytat powinien występować w tym źródle, dokładnie albo po pominięciu różnic w spacjach, wielkości liter, znakach pełnoszerokich i zakrzywionych cudzysłowach. Jeśli odpowiedź to tekst, narzędzie zbiera numery w nawiasach kwadratowych, takie jak [2] lub [1, 3], zgłasza numery, które nie odpowiadają żadnemu źródłu, i wypisuje zdania bez numeru. W obu przypadkach wypisuje źródła, na które nikt się nie powołał, i ostrzega, gdy nie ma żadnych cytowań albo gdy done_reason to "length", co oznacza, że odpowiedź została ucięta przez num_predict. Czego nie potrafi, to ocenić, czy odpowiedź jest prawidłowa. W naszym teście z qwen2.5:7b jedna odpowiedź zacytowała słowo w słowo prawidłową regułę ze swojego źródła i mimo to podała błędną liczbę, a inna powiedziała, że nie wie, ale powołała się na niezwiązane źródło. Cytowanie, które tu przejdzie, pokazuje tylko, że zacytowany tekst jest w źródle.
Główna logika tego narzędzia jest otwartoźródłowa, na licencji MIT. github.com/seigo5555/toolkitbox-lib/src/rag-citations.ts
Zastosowania
- Sprawdzenie, czy odpowiedź lokalnego modelu powołuje się tylko na źródła, które naprawdę wysłano, z cytatami, które naprawdę w nich są
- Znalezienie zdań w odpowiedzi, które nie mają źródła, zanim pokażesz odpowiedź użytkownikom
- Porównanie promptów lub modeli na tych samych pytaniach według tego, jak często ich cytowania się sprawdzają
Jak używać
- Wklej źródła, które wysłano razem z pytaniem, w tej samej kolejności.
- Wklej odpowiedź: całą odpowiedź /api/chat, odpowiedź zgodną z OpenAI albo sam tekst odpowiedzi.
- Przeczytaj tabelę cytowań, zdania bez numeru źródła i źródła, na które nikt się nie powołał.
FAQ
Cytat jest oznaczony jako nieznaleziony. Czy odpowiedź jest błędna?
Niekoniecznie. Model mógł sparafrazować źródło zamiast je skopiować. Ale cytatu, którego nie ma w źródle, nie da się sprawdzić, więc traktuj to stwierdzenie jako niepotwierdzone, dopóki nie przeczytasz źródła.
Wszystkie cytowania przechodzą. Czy odpowiedź jest prawidłowa?
Niekoniecznie. Narzędzie sprawdza tylko, czy numery i cytaty zgadzają się ze źródłami. W naszym teście model zacytował prawidłową regułę (4 razy liczba wymiarów plus 8 bajtów) i mimo to odpowiedział 1552 bajty zamiast 1,544 dla wektora o 384 wymiarach.
Dlaczego źródła muszą być w tej samej kolejności?
Numery w odpowiedzi odnoszą się do kolejności, w jakiej wysłano źródła. Jeśli kolejność jest inna, [2] wskazuje inny tekst i sprawdzenie nie ma sensu.
Jak narzędzie dzieli odpowiedź na zdania?
Na końcach wierszy, po . ! ? po których jest spacja, i po pełnoszerokich 。!?. Numer stojący zaraz po końcu zdania, taki jak w "… here. [1]", liczy się dla tego zdania. Skróty takie jak e.g. mogą podzielić jedno zdanie na dwa.
Co oznacza done_reason "length"?
W kodzie źródłowym Ollamy to powód podawany, gdy odpowiedź dobiła do limitu tokenów (num_predict), zamiast zakończyć się sama. Brakuje końca odpowiedzi, a być może także jej cytowań.
Czy moje dane są dokądś wysyłane?
Nie. Sprawdzanie działa w twojej przeglądarce. Narzędzie nigdy nie łączy się z Ollamą ani z żadną inną usługą.
Powiązane artykuły
- Przechowywanie i wyszukiwanie embeddingów Ollamy w PostgreSQL z pgvectorEmbeddingi Ollamy w PostgreSQL z pgvector, wyszukiwanie przez HNSW lub IVFFlat i przekazanie wyników do /api/chat, aby odpowiedź podawała źródła.
- Embeddingi w Ollamie: podstawy wyszukiwania i RAGTwórz embeddingi przez /api/embed w Ollamie: modele i ich rozmiary, truncate i dimensions, wektory jednostkowe i podobieństwo cosinusowe, według oficjalnej dokumentacji.