~/tools / Embedding'ler ve arama (RAG) / RAG Citation Checker

RAG Citation Checker — Bir RAG yanıtındaki kaynak numaralarını ve alıntıları gönderilen kaynaklarla denetleyin

Bir RAG yanıtındaki atıfları gönderdiğiniz kaynaklarla karşılaştırarak denetleyin: her kaynak numarası var olmalı, her alıntı kendi kaynağında geçmeli; araç kaynak numarası olmayan cümleleri, hiç atıf yapılmayan kaynakları ve kesilmiş yanıtları listeler. Ollama /api/chat yanıtlarını (akışlı olanlar dahil), OpenAI uyumlu yanıtları ve düz metni okur. Hiçbir şey tarayıcınızdan çıkmaz.

Örnek yanıt, kendi kaynağında olmayan bir alıntıyı göstermek için elle yazılmıştır.

4 kaynak (string'lerden oluşan bir JSON dizisi). Yanıt, bir Ollama /api/chat yanıtı olarak okundu; biçimi: atıflı JSON.

İstemdeki token sayısı (prompt_eval_count): 306

  • #2. atıfın alıntısı [4] numaralı kaynakta yok.

Atıflar

KaynakAlıntıSonuç
[2]hnsw.ef_search is 40 by defaultYazıldığı gibi bulundu
[4]4 bytes per dimension plus 8Bu kaynakta yok

Bu yalnızca numaraların ve alıntıların kaynaklarla eşleştiğini denetler. Yanıtın doğru olup olmadığını ya da bir kaynağın bir cümleyi gerçekten destekleyip desteklemediğini söyleyemez.

Yanıt biçimi Ollama'nın API başvurusundan ve kaynak kodundan alınmıştır; Ollama 0.40.11 üzerinde 2026-11-05 tarihinde denetlendi. Ollama API: /api/chat

Her şey tarayıcınızda yapılır. Araç hiçbir yere bağlanmaz.

Bir model numaralı kaynaklara dayanarak yanıt verdiğinde atıflar mekanik olarak denetlenebilir. Gönderdiğiniz kaynakların aynısını, RAG Prompt Builder'daki biçimde (string'lerden veya nesnelerden oluşan bir JSON dizisi, ya da --- satırlarıyla veya boş satırlarla ayrılmış metin; aynı şekilde [1]'den başlayarak numaralandırılırlar) yapıştırın ve yanıtı yapıştırın. Yanıt, Ollama'nın /api/chat uç noktasından gelen yanıtın tamamı (araç message.content alanını alır; satır başına bir JSON nesnesi içeren akışlı bir yanıt birleştirilir), OpenAI uyumlu bir yanıt (choices[0].message.content) ya da yalnızca metin olabilir. Yanıt, RAG Prompt Builder'ın istediği gibi bir yanıt ve bir atıf listesi içeren JSON ise araç her atıfı denetler: kaynak numarası kaynaklardan biri olmalı ve alıntı o kaynakta, aynen ya da boşluk, harf büyüklüğü, tam genişlikli karakter ve kıvrık tırnak farkları yok sayılarak geçmelidir. Yanıt metinse araç [2] ya da [1, 3] gibi köşeli parantez içindeki numaraları toplar, hiçbir kaynakla eşleşmeyen numaraları bildirir ve numarası olmayan cümleleri listeler. Her iki durumda da hiç atıf yapılmayan kaynakları listeler; hiç atıf yoksa ya da done_reason "length" ise, yani yanıt num_predict yüzünden kesilmişse uyarır. Yapamadığı şey, yanıtın doğru olup olmadığına karar vermektir. qwen2.5:7b ile yaptığımız testte bir yanıt, kaynağındaki doğru kuralı kelimesi kelimesine alıntıladı ve yine de yanlış bir sayı verdi; bir başkası bilmediğini söyledi ama ilgisiz bir kaynağa atıf yaptı. Burada geçen bir atıf yalnızca alıntılanan metnin kaynakta olduğunu gösterir.

Bu aracın temel mantığı MIT lisansıyla açık kaynaktır. github.com/seigo5555/toolkitbox-lib/src/rag-citations.ts

Kullanım örnekleri

  • Yerel bir modelin yanıtının yalnızca gerçekten gönderilmiş kaynaklara, gerçekten onlarda geçen alıntılarla atıf yaptığını denetlemek
  • Yanıtı kullanıcılara göstermeden önce yanıttaki kaynaksız cümleleri bulmak
  • Aynı sorularda istemleri veya modelleri, atıflarının ne sıklıkla tuttuğuna göre karşılaştırmak

Nasıl kullanılır

  1. Soruyla birlikte gönderdiğiniz kaynakları aynı sırayla yapıştırın.
  2. Yanıtı yapıştırın: /api/chat yanıtının tamamını, OpenAI uyumlu bir yanıtı ya da yanıtın metnini.
  3. Atıf tablosunu, kaynak numarası olmayan cümleleri ve atıf yapılmayan kaynakları okuyun.

SSS

Bir alıntı bulunamadı olarak işaretlendi. Yanıt yanlış mı?

Mutlaka değil. Model kaynağı kopyalamak yerine başka sözcüklerle anlatmış olabilir. Ama kaynakta olmayan bir alıntı denetlenemez; bu yüzden kaynağı okuyana kadar o ifadeyi desteksiz sayın.

Tüm atıflar geçiyor. Yanıt doğru mu?

Mutlaka değil. Araç yalnızca numaraların ve alıntıların kaynaklarla eşleştiğini denetler. Testimizde model doğru kuralı (boyut sayısının 4 katı artı 8 bayt) alıntıladı ve yine de 384 boyutlu bir vektör için 1,544 yerine 1552 bayt yanıtladı.

Kaynaklar neden aynı sırada olmalı?

Yanıttaki numaralar, kaynakların gönderildiği sıraya karşılık gelir. Sıra farklıysa [2] başka bir metni gösterir ve denetimin anlamı kalmaz.

Araç yanıtı cümlelere nasıl böler?

Satır sonlarında, ardından boşluk gelen . ! ? işaretlerinden sonra ve tam genişlikli 。!? işaretlerinden sonra. Bir cümlenin sonundan hemen sonra gelen numara, örneğin "… here. [1]", o cümleye sayılır. e.g. gibi kısaltmalar bir cümleyi ikiye bölebilir.

done_reason "length" ne demek?

Ollama'nın kaynak kodunda bu, yanıt kendiliğinden bitmek yerine token sınırına (num_predict) ulaştığında verilen nedendir. Yanıtın sonu ve muhtemelen atıfları eksiktir.

Verilerim bir yere gönderiliyor mu?

Hayır. Denetim tarayıcınızda çalışır. Araç Ollama'ya ya da başka herhangi bir hizmete hiç bağlanmaz.

İlgili makaleler

İlgili