~/tools / Embedding dan pencarian (RAG) / RAG Citation Checker
RAG Citation Checker — Periksa nomor sumber dan kutipan dalam jawaban RAG terhadap sumber yang dikirim
Periksa sitasi dalam jawaban RAG terhadap sumber yang Anda kirim: setiap nomor sumber harus ada, setiap kutipan seharusnya muncul di sumbernya, dan alat ini mendaftar kalimat tanpa nomor sumber, sumber yang tidak pernah dikutip, dan jawaban yang terpotong. Membaca respons /api/chat Ollama (termasuk yang di-stream), respons yang kompatibel dengan OpenAI, dan teks biasa. Tidak ada data yang keluar dari browser Anda.
Contoh jawaban ditulis tangan untuk menunjukkan kutipan yang tidak ada di sumbernya.
4 sumber (array JSON berisi string). Jawaban dibaca sebagai respons /api/chat Ollama, dalam bentuk JSON dengan sitasi.
Token dalam prompt (prompt_eval_count): 306
- Kutipan pada sitasi #2 tidak ada di sumber [4].
Sitasi
| Sumber | Kutipan | Hasil |
|---|---|---|
| [2] | hnsw.ef_search is 40 by default | Ditemukan persis |
| [4] | 4 bytes per dimension plus 8 | Tidak ada di sumber ini |
Ini hanya memeriksa bahwa nomor dan kutipan cocok dengan sumber. Ini tidak dapat menentukan apakah jawabannya benar atau apakah sebuah sumber benar-benar mendukung suatu kalimat.
Format respons dari referensi API dan kode sumber Ollama, diperiksa pada Ollama 0.40.11 pada 2026-11-05. Ollama API: /api/chat
Semuanya dilakukan di browser Anda. Alat ini tidak terhubung ke mana pun.
Ketika model menjawab dari sumber bernomor, sitasinya dapat diperiksa secara mekanis. Tempelkan sumber yang sama dengan yang Anda kirim, dalam format yang sama seperti di RAG Prompt Builder (array JSON berisi string atau objek, atau teks yang dipisahkan baris --- atau baris kosong; sumbernya diberi nomor mulai dari [1] dengan cara yang sama), lalu tempelkan jawabannya. Jawaban bisa berupa seluruh respons dari /api/chat milik Ollama (alat ini mengambil message.content; respons yang di-stream dengan satu objek JSON per baris digabungkan), respons yang kompatibel dengan OpenAI (choices[0].message.content), atau hanya teksnya. Jika jawabannya berupa JSON berisi jawaban dan daftar sitasi, seperti yang diminta RAG Prompt Builder, alat ini memeriksa setiap sitasi: nomor sumbernya harus salah satu dari sumber yang ada, dan kutipannya seharusnya muncul di sumber itu, secara persis atau setelah mengabaikan perbedaan spasi, huruf besar-kecil, karakter lebar penuh, dan tanda kutip lengkung. Jika jawabannya berupa teks, alat ini mengumpulkan nomor dalam tanda kurung siku, seperti [2] atau [1, 3], melaporkan nomor yang tidak cocok dengan sumber mana pun, dan mendaftar kalimat yang tidak memiliki nomor. Dalam kedua kasus, alat ini mendaftar sumber yang tidak pernah dikutip dan memberi peringatan bila tidak ada sitasi sama sekali, atau bila done_reason adalah "length", yang berarti jawabannya terpotong oleh num_predict. Yang tidak dapat dilakukannya adalah menilai apakah jawabannya benar. Pada uji kami dengan qwen2.5:7b, satu jawaban mengutip aturan yang benar dari sumbernya kata demi kata dan tetap memberi angka yang salah, dan jawaban lain mengatakan tidak tahu tetapi mengutip sumber yang tidak terkait. Sitasi yang lolos di sini hanya menunjukkan bahwa teks yang dikutip ada di sumbernya.
Logika utama alat ini bersifat sumber terbuka dengan lisensi MIT. github.com/seigo5555/toolkitbox-lib/src/rag-citations.ts
Kapan dipakai
- Memeriksa bahwa jawaban model lokal hanya mengutip sumber yang benar-benar dikirim, dengan kutipan yang benar-benar ada di dalamnya
- Menemukan kalimat dalam jawaban yang tidak memiliki sumber, sebelum Anda menampilkan jawaban itu kepada pengguna
- Membandingkan prompt atau model pada pertanyaan yang sama berdasarkan seberapa sering sitasi mereka terbukti benar
Cara pakai
- Tempelkan sumber yang Anda kirim bersama pertanyaan, dalam urutan yang sama.
- Tempelkan jawabannya: seluruh respons /api/chat, respons yang kompatibel dengan OpenAI, atau teks jawabannya.
- Baca tabel sitasi, kalimat tanpa nomor sumber, dan sumber yang tidak dikutip.
Tanya jawab
Sebuah kutipan ditandai tidak ditemukan. Apakah jawabannya salah?
Belum tentu. Model mungkin memparafrasekan sumbernya, bukan menyalinnya. Namun kutipan yang tidak ada di sumber tidak dapat diperiksa, jadi anggap pernyataan itu tidak terdukung sampai Anda membaca sumbernya.
Semua sitasi lolos. Apakah jawabannya benar?
Belum tentu. Alat ini hanya memeriksa bahwa nomor dan kutipan cocok dengan sumber. Pada uji kami, model mengutip aturan yang benar (4 kali jumlah dimensi ditambah 8 byte) dan tetap menjawab 1552 byte, bukan 1,544, untuk vektor 384 dimensi.
Mengapa sumber harus dalam urutan yang sama?
Nomor dalam jawaban merujuk pada urutan pengiriman sumber. Jika urutannya berbeda, [2] menunjuk teks yang lain dan pemeriksaannya tidak berarti.
Bagaimana alat ini memecah jawaban menjadi kalimat?
Pada pergantian baris, setelah . ! ? yang diikuti spasi, dan setelah 。!? lebar penuh. Nomor yang muncul tepat setelah akhir kalimat, seperti "… here. [1]", dihitung untuk kalimat itu. Singkatan seperti e.g. dapat memecah satu kalimat menjadi dua.
Apa arti done_reason "length"?
Di kode sumber Ollama, itu adalah alasan yang diberikan ketika jawaban mencapai batas token (num_predict) alih-alih berhenti sendiri. Bagian akhir jawaban, dan mungkin sitasinya, hilang.
Apakah data saya dikirim ke suatu tempat?
Tidak. Pemeriksaan berjalan di browser Anda. Alat ini tidak pernah terhubung ke Ollama atau layanan lain mana pun.
Artikel terkait
- Simpan dan cari embedding Ollama di PostgreSQL dengan pgvectorSimpan embedding Ollama di PostgreSQL dengan pgvector, cari dengan HNSW atau IVFFlat, dan teruskan hasilnya ke /api/chat agar jawabannya menyebut sumbernya.
- Embedding dengan Ollama: dasar untuk pencarian dan RAGMembuat embedding dengan /api/embed milik Ollama: model dan ukurannya, truncate dan dimensions, vektor berpanjang satuan dan kemiripan kosinus, dari dokumentasi resmi.