RAG टेस्टिंग: Retrieval, Grounding और Citations
Retrieval-augmented generation (RAG) किसी सवाल का जवाब पहले डॉक्यूमेंट संग्रह से passages retrieve करके और फिर language model से उन्हीं passages के आधार पर जवाब लिखवाकर देता है। RAG सिस्टम टेस्ट करने का मतलब है दोनों हिस्सों और उनके जोड़ को टेस्ट करना: क्या सही passages मिले, क्या जवाब उनके प्रति faithful रहा, क्या उसने उन्हें सही cite किया, क्या जवाब न होने पर उसने यह माना, और क्या उसने सिर्फ़ वही डॉक्यूमेंट इस्तेमाल किए जिन्हें यूज़र देख सकता है?
यह गाइड चरण-दर-चरण टेस्ट तरीक़ा, test set का फ़ॉर्मेट और वे defects देती है जिनके साथ RAG सिस्टम अक्सर शिप होते हैं। आर्किटेक्चर रिसर्च से आया है (Lewis et al., 2020); Ragas पेपर के मेट्रिक्स रिसर्च प्रस्ताव हैं; टेस्टिंग अनुशासन — लेबल वाले test sets, अलग component tests, हर बदलाव पर regression, access-control tests — स्थापित प्रैक्टिस है।
RAG pipeline कैसे काम करती है — और कहाँ फ़ेल होती है
सामान्य pipeline का एक ingestion हिस्सा और एक query हिस्सा होता है। Ingestion डॉक्यूमेंट लोड करता है, टेक्स्ट निकालता है, उसे chunks में बाँटता है, हर chunk का embedding (संख्यात्मक vector) बनाता है और chunks, vectors और metadata — स्रोत, तारीख़, मालिक, permissions — को index में रखता है। Query के समय सिस्टम सवाल का embedding बनाता है, सबसे मिलते-जुलते chunks retrieve करता है (अक्सर keyword search और re-ranking के साथ), metadata से उन्हें फ़िल्टर करता है, और टॉप नतीजे सवाल के साथ मॉडल को देता है, जो जवाब लिखता है और, आदर्श रूप में, अपने स्रोत cite करता है।
- Ingestion — tables, scanned PDF या दाएँ-से-बाएँ लिपियों से टेक्स्ट खो जाना; ऐसे chunks जो वाक्य तोड़ दें या heading को उसकी सामग्री से अलग कर दें; ग़ायब या ग़लत metadata।
- Retrieval — सही chunk मौजूद है पर टॉप नतीजों में नहीं; सटीक identifiers (SKU A-100, policy 7.2) semantic search से छूट जाते हैं; अरबी सवाल अंग्रेज़ी डॉक्यूमेंट नहीं ढूँढ पाते या उल्टा।
- Filtering — permission या तारीख़ के फ़िल्टर top-k कटने के बाद लगते हैं (तो नतीजे ग़ायब) या लगते ही नहीं (तो नतीजे लीक)।
- Generation — जवाब retrieve किए context को नज़रअंदाज़ करता है, उसे मॉडल की अपनी धारणाओं से मिलाता है, या दो विरोधी डॉक्यूमेंट को मिलाकर एक गढ़ा नियम बना देता है।
- Citation — citations ग़लत chunk की ओर, ऐसे chunk की ओर जो वाक्य का समर्थन नहीं करता, या न खुलने वाले लिंक की ओर इशारा करते हैं।
Ingestion हिस्सा
- डॉक्यूमेंट लोड करना
- टेक्स्ट निकालना(1)
- Chunks में बाँटना(1)
- हर chunk का embeddingएक संख्यात्मक vector
- Index में रखना(1)Chunks, vectors और metadata: स्रोत, तारीख़, मालिक, permissions
Query हिस्सा
सवाल के समय, उसी index पर
- सवाल का embedding
- मिलते-जुलते chunks retrieve करना(2)सबसे मिलते-जुलते; अक्सर keyword search और re-ranking के साथ
- Metadata से फ़िल्टर(3)Permissions और तारीख़, top-k कटने से पहले
- मॉडल जवाब लिखता है(4)सवाल के साथ दिए गए टॉप नतीजों से
- अपने स्रोत cite करता है(5)आदर्श रूप में, chunk या डॉक्यूमेंट IDs की सूची
एक सामान्य pipeline; components अलग हो सकते हैं। निशान 1–5 दिखाते हैं कि ऊपर लिखी पाँच फ़ेलियर कहाँ होती हैं: ingestion, retrieval, filtering, generation, citation।
Retrieval को generation से अलग evaluate करें
End-to-end स्कोर ("जवाब 82% बार सही था") नहीं बता सकता कि क्या ठीक करना है। हर test case के retrieve किए chunk IDs लॉग करें और जवाब grade करने से पहले retrieval को अलग से grade करें। दोनों का मेल बताता है कि defect कहाँ है।
- सही chunks retrieve हुए, सही जवाब — pass।
- सही chunks retrieve हुए, ग़लत जवाब — generation defect: prompt, मॉडल, context का क्रम या लंबाई।
- ग़लत chunks retrieve हुए, ग़लत जवाब — retrieval या ingestion defect; prompt बदलने से ठीक नहीं होगा।
- ग़लत chunks retrieve हुए, सही जवाब — मॉडल ने अपने ज्ञान से जवाब दिया; जोखिम भरा, क्योंकि वह तब भी ऐसा करेगा जब उसका ज्ञान ग़लत या पुराना हो।
Retrieval टेस्ट करना: recall, precision और ranking
हर टेस्ट सवाल के लिए लेबल करें कि कौन-से chunks या डॉक्यूमेंट relevant हैं — वे जो डोमेन विशेषज्ञ को जवाब देने के लिए चाहिए। फिर retrieve की गई सूची पर मानक information-retrieval मेट्रिक्स मापें: recall@k (relevant chunks का कितना हिस्सा टॉप k में है), precision@k (टॉप k का कितना हिस्सा relevant है) और mean reciprocal rank जैसा rank माप (पहला relevant chunk कितना ऊपर आता है)। जिस k को आप सच में मॉडल को देते हैं उस पर recall सबसे अहम संख्या है: जो chunk retrieve ही न हो, वह इस्तेमाल नहीं हो सकता।
Retrieval केस वैसे डिज़ाइन करें जैसे boundary केस करते हैं: सटीक identifiers और codes, पर्यायवाची और paraphrase, अंग्रेज़ी डॉक्यूमेंट पर अरबी और हिंदी सवाल और उल्टा, ऐसे सवाल जिनका जवाब table में है, बहुत छोटे और बहुत लंबे सवाल, और लगभग डुप्लिकेट डॉक्यूमेंट जिनमें सिर्फ़ सबसे नया वर्ज़न सही है।
{"id":"rt-031","question":"What is the warranty on the X200 charger?","relevant":["doc-117#c4"],"k":5,"lang":"en"}
{"id":"rt-032","question":"ما مدة ضمان شاحن X200؟","relevant":["doc-117#c4"],"k":5,"lang":"ar"}
{"id":"rt-040","question":"Refund rules for policy 7.2","relevant":["doc-009#c1","doc-009#c2"],"k":5,"lang":"en"}आज़माएँ: JSON Lines वैलिडेटर आज़माएँ: बहुभाषी टेस्ट डेटा जनरेटर
Generation टेस्ट करना: groundedness और answer relevance
Groundedness (जिसे faithfulness भी कहते हैं) पूछता है कि जवाब का हर तथ्यात्मक दावा retrieve किए context से समर्थित है या नहीं। Context को तय करके इसे टेस्ट करें: मॉडल को chunks का ज्ञात सेट दें और हर दावा उनके विरुद्ध जाँचें, rubric और मानवीय रिव्यू से (स्थापित) या calibrate किए model grader से (उभरती प्रैक्टिस)। ऐसे contexts शामिल करें जहाँ सामान्य ज्ञान वाला लुभावना जवाब डॉक्यूमेंट से अलग हो — जैसे कंपनी की नीति जो आम प्रचलन से सख़्त है — और जाँचें कि जवाब डॉक्यूमेंट का पालन करे।
Ragas पेपर (एक रिसर्च प्रस्ताव, 2023) RAG के लिए reference-free मेट्रिक्स परिभाषित करता है — faithfulness, answer relevance और context relevance — जो language model की मदद से गणना होते हैं। बड़े पैमाने पर ट्रेंड monitor करने के लिए ये उपयोगी हैं, पर ये grader मॉडल की ग़लतियाँ विरासत में लेते हैं, और स्कोर तब तक pass/fail मानदंड नहीं है जब तक आपने अपने डेटा पर उसे मानवीय निर्णय से न जाँचा हो।
- जवाब की हर संख्या, तारीख़ और नाम किसी retrieve किए chunk में मौजूद है।
- जब दो retrieve किए chunks टकराते हैं, जवाब यह बताता है या तय precedence (जैसे सबसे नया वर्ज़न) का पालन करता है।
- जवाब पूछे गए सवाल को संबोधित करता है और असंबंधित retrieve की गई सामग्री से भरा नहीं होता।
- स्रोत डॉक्यूमेंट दूसरी भाषा में हो तब भी जवाब यूज़र की भाषा में हो, और उद्धृत शब्दों का ग़लत अनुवाद न हो।
Citation की सटीकता
Citations यूज़र के लिए जवाब जाँचने का ज़रिया हैं, इसलिए ग़लत citation किसी citation के न होने से भी बुरी है। Citations को structured फ़ील्ड (chunk या डॉक्यूमेंट IDs की सूची) में माँगें ताकि कोड उन्हें जाँच सके।
- हर cited ID मौजूद है और इस अनुरोध के retrieve किए सेट में थी (deterministic जाँच)।
- हर cited chunk सच में उस वाक्य का समर्थन करता है जिससे वह जुड़ा है (rubric या मानवीय जाँच)।
- समर्थन माँगने वाले हर तथ्यात्मक वाक्य के साथ citation है।
- Citations के लिंक और page anchors खुलते हैं, और ऐसे डॉक्यूमेंट वर्ज़न की ओर इशारा करते हैं जिसे यूज़र खोल सकता है।
जब जवाब corpus में न हो
RAG सिस्टम तभी भरोसेमंद है जब डॉक्यूमेंट में जवाब न होने पर वह "मुझे नहीं पता" कहे। Unanswerable सवालों का सेट बनाएँ: प्रोडक्ट, नीतियों या तारीख़ों पर ऐसे विश्वसनीय सवाल जो corpus में नहीं हैं, ऐसे सवाल जिनका सिर्फ़ आंशिक जवाब है, और डिलीट हुए डॉक्यूमेंट के बारे में सवाल। अपेक्षित व्यवहार साफ़ कथन है कि जानकारी उपलब्ध नहीं है, वैकल्पिक रूप से किसी इंसान तक जाने के रास्ते के साथ — सामान्य ज्ञान से गढ़ा जवाब नहीं। दोनों तरफ़ ट्रैक करें: जवाब गढ़ना फ़ेलियर है, और उन सवालों से इनकार करना भी जिनका जवाब corpus में है।
- Unanswerable सवाल → स्पष्ट "उपलब्ध डॉक्यूमेंट में नहीं मिला", कोई गढ़ी नीति नहीं, कोई citation नहीं।
- आंशिक रूप से answerable सवाल → कवर हिस्से का जवाब और यह बताना कि क्या ग़ायब है।
- Answerable सवाल → जवाब दिया जाए, इनकार नहीं; यहाँ फ़ेलियर को अनुचित इनकार गिनें।
Freshness, अपडेट और डिलीट
Corpus बदलता है, और index को उसके पीछे चलना चाहिए। Ingestion pipeline को किसी भी data pipeline की तरह टेस्ट करें: टेस्ट डॉक्यूमेंट का नया वर्ज़न प्रकाशित करें और जाँचें कि अगला जवाब नई सामग्री इस्तेमाल करे और नया वर्ज़न cite करे; एक डॉक्यूमेंट डिलीट करें और जाँचें कि वह अब retrieve या cite न हो सके; किसी डॉक्यूमेंट की permissions बदलें और जाँचें कि बदलाव query के समय लागू हो। मापें कि हर बदलाव को दिखने में कितना समय लगता है और उसे तय लक्ष्य से तुलना करें।
- अपडेट हुआ डॉक्यूमेंट → पुराने chunks index से हटें, नए के बगल में न छूटें।
- डिलीट हुआ डॉक्यूमेंट → अब retrieve, cite या quote न हो, cache से भी नहीं।
- Effective dates वाले डॉक्यूमेंट → अगर requirement हो, तो जवाब पूछी गई तारीख़ पर लागू वर्ज़न इस्तेमाल करें।
Access control: यूज़र वह retrieve न करे जो वह देख नहीं सकता
ज़्यादातर बिज़नेस RAG सिस्टम में डॉक्यूमेंट के मालिक और permissions होते हैं, और असिस्टेंट को सिर्फ़ उन्हीं डॉक्यूमेंट से जवाब देना चाहिए जिन्हें मौजूदा यूज़र खोल सकता है। यह security requirement है, और यह OWASP Top 10 for LLM Applications की Vector and Embedding Weaknesses (LLM08:2025) से जुड़ी है। यह control retrieval में होना चाहिए — chunks मॉडल तक पहुँचने से पहले यूज़र की permissions से फ़िल्टर — prompt में कभी नहीं, क्योंकि जो टेक्स्ट मॉडल को दिया जा चुका है उसे रोकने के लिए मॉडल पर भरोसा नहीं किया जा सकता।
इसे permission matrix से टेस्ट करें: अलग-अलग roles और tenants के टेस्ट यूज़र बनाएँ, और ऐसे डॉक्यूमेंट जिनमें अलग पहचान वाली काल्पनिक सामग्री हो (किसी प्रोजेक्ट का codename, गढ़ा हुआ सैलरी आँकड़ा) और जो सिर्फ़ एक यूज़र को दिखें। हर यूज़र से ऐसे सवाल पूछें जो हर डॉक्यूमेंट retrieve करें, सीधे और अप्रत्यक्ष रूप से, और assert करें कि प्रतिबंधित सामग्री जवाब, citations, यूज़र को दिखने वाले retrieved-chunk लॉग या API response में कभी न आए।
User Role / tenant Doc HR-SAL-01 (HR only) Doc PRJ-ORCHID (tenant B)
noura.a HR, tenant A may retrieve must not retrieve
omar.k Sales, tenant A must not retrieve must not retrieve
priya.s Sales, tenant B must not retrieve may retrieve
Probe questions: "What is the salary band for level 5?"
"Summarise project Orchid"
"List all documents mentioning Orchid"
Assert: restricted text, title and ID absent from answer, citations and API body.RAG test set, CI और आम defects
एक वर्ज़न वाला test set रखें जिसमें हर केस के लिए सवाल, relevant chunk IDs, अपेक्षित जवाब के बिंदु या अपेक्षित "नहीं मिला", भाषा और टेस्ट यूज़र हो। Chunking, embedding मॉडल, index सेटिंग, prompt या generation मॉडल के हर बदलाव पर retrieval मेट्रिक्स और deterministic जाँचें (schema, citation IDs, access-control assertions) चलाएँ; groundedness का rubric और model-graded evaluation रात में या रिलीज़ से पहले चलाएँ। Embedding मॉडल या chunk size बदलने पर re-indexing और पूरा retrieval रन ज़रूरी है: यह regression रिस्क है, tuning का ब्योरा नहीं।
- Defect उदाहरण: "Embedding मॉडल बदलने के बाद अरबी सवालों का Recall@5 गिरा; अंग्रेज़ी में बदलाव नहीं"।
- Defect उदाहरण: "v2 प्रकाशित होने के बाद भी जवाब doc-117 v1 cite करता है; पुराने chunks अब भी index में"।
- Defect उदाहरण: "‘लेवल 5 पे’ पूछने पर Sales यूज़र को जवाब में HR का सैलरी बैंड मिलता है"।
- Defect उदाहरण: "जिस प्रोडक्ट की corpus में कोई refund नीति नहीं, उसके लिए असिस्टेंट 14 दिन की refund अवधि गढ़ता है"।
- Defect उदाहरण: "Scanned PDF की tables खाली टेक्स्ट के रूप में ingest होती हैं; कीमत वाले सवालों पर कुछ relevant retrieve नहीं होता"।
आज़माएँ: JSON Lines वैलिडेटर आज़माएँ: Unicode डेटासेट जनरेटर
अक्सर पूछे जाने वाले सवाल
RAG testing क्या है?
Retrieval-augmented generation सिस्टम की टेस्टिंग: यह जाँचना कि वह सही passages retrieve करता है, जवाब उनके प्रति faithful है और उन्हें सही cite करता है, जवाब उपलब्ध न होने पर वह यह बताता है, अपडेट index तक पहुँचते हैं, और यूज़र्स को सिर्फ़ उन्हीं डॉक्यूमेंट से जवाब मिलते हैं जिन्हें वे देख सकते हैं।
Retrieval को generation से अलग क्यों evaluate करें?
क्योंकि end-to-end स्कोर नहीं दिखाता कि defect कहाँ है। अगर सही chunks retrieve हुए और जवाब ग़लत है, तो generation ठीक करें; अगर सही chunks retrieve नहीं हुए, तो prompt बदलने से मदद नहीं मिलेगी — ingestion, chunking, embeddings या filters ठीक करें।
कौन-से retrieval मेट्रिक्स इस्तेमाल करूँ?
लेबल वाले सवालों पर मानक information-retrieval मेट्रिक्स: मॉडल को दिए जाने वाले k पर recall@k, precision@k, और mean reciprocal rank जैसा rank माप। इन्हें हर भाषा और हर सवाल-प्रकार के लिए रिपोर्ट करें, सिर्फ़ एक औसत के रूप में नहीं।
क्या Ragas मेट्रिक्स कोई मानक हैं?
नहीं। ये एक रिसर्च पेपर से हैं जो faithfulness, answer relevance और context relevance जैसे reference-free मेट्रिक्स प्रस्तावित करता है, जिनकी गणना language model से होती है। ट्रेंड के लिए उपयोगी हैं, पर रिलीज़ मानदंड बनाने से पहले अपने डेटा पर मानवीय निर्णय से इन्हें जाँचें।
कैसे टेस्ट करूँ कि RAG असिस्टेंट permissions का सम्मान करता है?
अलग roles और tenants वाले टेस्ट यूज़र बनाएँ और ऐसे डॉक्यूमेंट जिनमें अलग पहचान वाली काल्पनिक सामग्री हो और जो सिर्फ़ एक को दिखें। हर यूज़र से हर डॉक्यूमेंट retrieve करने वाले सवाल पूछें और assert करें कि प्रतिबंधित सामग्री जवाब, citations या API responses में कभी न आए। Filtering retrieval में होनी चाहिए, prompt में नहीं।
जवाब डॉक्यूमेंट में न हो तो RAG सिस्टम को क्या करना चाहिए?
साफ़ बताना चाहिए कि जानकारी उसके स्रोतों में उपलब्ध नहीं है, बिना जवाब गढ़े या असंबंधित डॉक्यूमेंट cite किए, और वैकल्पिक रूप से किसी इंसान तक जाने का रास्ता देना चाहिए। इसे unanswerable और आंशिक रूप से answerable सवालों के अलग सेट से टेस्ट करें।
संदर्भ
- OWASP Top 10 for LLM Applications 2025LLM एप्लिकेशन के दस सबसे गंभीर सुरक्षा जोखिम (LLM01:2025–LLM10:2025), prompt injection और संवेदनशील जानकारी के खुलासे से शुरू।
- Artificial Intelligence Risk Management Framework: Generative Artificial Intelligence Profile (NIST AI 600-1)AI RMF का generative-AI प्रोफ़ाइल: generative मॉडल के विशेष जोखिम, जैसे confabulation और सूचना की अखंडता, और उन्हें संभालने के सुझाए क़दम।
- Define success criteria and build evaluationsएक मॉडल प्रदाता की गाइडेंस: मापने योग्य success criteria और ऐसे evaluation सेट लिखना जिन्हें कोड, exact match या मॉडल ग्रेड करे।
- Working with evalsएक मॉडल प्रदाता की गाइडेंस: मॉडल आउटपुट को तय मानदंड और डेटासेट से टेस्ट करना, और prompt व मॉडल बदलने पर evals दोबारा चलाना।
- Certified Tester AI Testing (CT-AI) v2.0AI-आधारित सिस्टम की टेस्टिंग पर ISTQB का specialist पाठ्यक्रम, machine learning और generative AI सिस्टम सहित।
- Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (Lewis et al.)वह शोध पत्र जिसने retrieval-augmented generation पेश किया: एक generator जो इंडेक्स से निकाले गए अंशों पर आधारित होता है।
- Ragas: Automated Evaluation of Retrieval Augmented Generation (Es et al.)RAG पाइपलाइन के लिए reference-free मेट्रिक्स प्रस्तावित करने वाला शोध, जैसे faithfulness, answer relevance और context relevance।
अभ्यास
कैंपस असिस्टेंट का RAG test run चरण-दर-चरण grade करें
आप एक निजी यूनिवर्सिटी (काल्पनिक) के campus assistant को टेस्ट करते हैं: student portal में एक chat, जो छात्रों और स्टाफ़ के सवालों के जवाब अंग्रेज़ी और अरबी में यूनिवर्सिटी के डॉक्यूमेंट से देता है, जिनमें से ज़्यादातर अंग्रेज़ी में हैं। 1 अक्टूबर 2026 को staging index पर हुए test run से आठ केस निकले, जिन्हें टीम ने अपने notes के साथ आपको भेजा है। नीचे के material में pipeline और तय नियम, हर chunk के access level के साथ corpus का एक अंश, run log (सवाल, लेबल किए relevant chunks, retrieve हुए टॉप 5 chunks, जवाब और उसकी citations) और टीम के notes हैं।
Run को वैसे grade करें जैसे गाइड सुझाती है: पहले retrieval, फिर जवाब, फिर citations, फिर ख़ास केस, और ऐसे findings लिखें जिन पर developer काम कर सके। काग़ज़ पर काम करें; आख़िरी चरण में JSON Lines वैलिडेटर मदद करता है। इसके लिए 45–60 मिनट रखें।
Campus assistant - एक निजी यूनिवर्सिटी (काल्पनिक) का student portal
छात्रों और स्टाफ़ के सवालों के जवाब अंग्रेज़ी और अरबी में देता है। यूनिवर्सिटी के
ज़्यादातर डॉक्यूमेंट अंग्रेज़ी में हैं; नीचे chunks का टेक्स्ट अनुवाद में दिखाया गया है।
Ingestion: डॉक्यूमेंट chunks में बँटते हैं, हर chunk का embedding बनता है, और सब
index में जाते हैं। हर सवाल पर: hybrid search (vector + keyword), फिर permission
filter, फिर टॉप 5 chunks मॉडल को जाते हैं।
Response का रूप (JSON):
{"answer": "...", "citations": ["<chunk id>", ...]}
तय नियम: डॉक्यूमेंट का नया वर्ज़न 24 घंटे के भीतर index में पुराने की जगह लेता है;
दो वर्ज़न टकराएँ तो सबसे नया प्रकाशित वर्ज़न लागू होता है।
Test run: गुरुवार 1 अक्टूबर 2026, build 2.3.0, staging index।
टेस्ट यूज़र: stu.lina (Student, undergraduate), fac.omar (Faculty)।
Corpus का अंश (access "all" = हर signed-in यूज़र)
lib-01#c1 - Library loans (all): undergraduate छात्र एक बार में 10 किताबें तक,
21 दिन के लिए ले सकते हैं।
lib-01#c2 - Library loans (all): loan को दो बार online renew किया जा सकता है,
जब तक किसी दूसरे यूज़र ने किताब reserve न की हो।
exm-03#c4 - Exam regulations (all): जो छात्र मान्य excuse के साथ final exam में
नहीं आ पाता, वह make-up exam दे सकता है। Excuse exam के 3 working days के
भीतर जमा करना होगा।
exm-03#c5 - Exam regulations (all): make-up exams अगले semester के पहले हफ़्ते
में होते हैं।
fee-02v1#c1 - Tuition refunds v1, 2025 (all): हफ़्ता 2 के अंत तक withdrawal:
100% refund। हफ़्ता 4 के अंत तक: 50%। हफ़्ता 4 के बाद: कोई refund नहीं।
fee-02v2#c1 - Tuition refunds v2, 20 सितंबर 2026 को प्रकाशित (all): हफ़्ता 2 के
अंत तक withdrawal: 100% refund। हफ़्ता 6 के अंत तक: 50%। हफ़्ता 6 के बाद:
कोई refund नहीं।
hsg-05#c1 - Student housing (all): spring semester के housing आवेदन 1 नवंबर को
खुलते हैं और 30 नवंबर को बंद होते हैं।
hsg-05#c3 - Student housing (all): scanned PDF पेज पर table "Room rates per
semester"। पेज पर: shared room 4,500 SAR; single room 7,000 SAR।
Index हुआ टेक्स्ट: (ख़ाली)।
stf-07#c2 - Marking guidelines (सिर्फ़ Faculty): moderation panel KESTREL हर उस
section की review करता है जिसमें 30% से ज़्यादा छात्र final exam में fail हों।
1 अक्टूबर को index में खोज: index में न कोई डॉक्यूमेंट fee-03 है, न chunk fee-03#c2।
Test set फ़ॉर्मेट (JSON Lines, हर लाइन में एक केस): id, question, relevant
(chunk ids), k, lang, user, expect ("answer" या "not_found"), points (अपेक्षित
जवाब के बिंदु, सिर्फ़ जब expect "answer" हो), must_not_contain (वैकल्पिक: ऐसा
टेक्स्ट जो response में कहीं नहीं आना चाहिए)।
1 अक्टूबर का run log (relevant = डॉक्यूमेंट के owner offices के लेबल किए chunks;
retrieved = rank के क्रम में टॉप 5)
ct-01 (en, user stu.lina)
question: How many books can I borrow, for how long, and can I renew them online?
relevant: lib-01#c1, lib-01#c2; expect: answer
retrieved: 1 lib-01#c1, 2 lib-01#c2, 3 hsg-05#c1, 4 exm-03#c5, 5 fee-02v2#c1
answer: Up to 10 books at a time, for 21 days. You can renew a loan online twice,
unless someone has reserved the book.
citations: lib-01#c1, lib-01#c2
ct-02 (ar, user stu.lina)
question: كم يوماً تستمر إعارة الكتاب من المكتبة؟
relevant: lib-01#c1; expect: answer
retrieved: 1 hsg-05#c1, 2 exm-03#c4, 3 exm-03#c5, 4 fee-02v2#c1, 5 fee-02v1#c1
answer: مدة إعارة الكتاب 14 يوماً
citations: (none)
ct-03 (en, user stu.lina)
question: I missed my final exam because I was ill. How long do I have to submit
an excuse?
relevant: exm-03#c4; expect: answer
retrieved: 1 exm-03#c4, 2 exm-03#c5, 3 lib-01#c2, 4 fee-02v2#c1, 5 hsg-05#c1
answer: You must submit your excuse within 5 working days of the exam.
citations: exm-03#c4
ct-04 (en, user stu.lina)
question: When are make-up exams held?
relevant: exm-03#c5; expect: answer
retrieved: 1 exm-03#c4, 2 fee-02v2#c1, 3 fee-02v1#c1, 4 lib-01#c2, 5 hsg-05#c1
answer: Make-up exams are held in the first week of the following semester.
citations: exm-03#c4
ct-05 (en, user stu.lina)
question: If I withdraw from all my courses in week 5, do I get any tuition back?
relevant: fee-02v2#c1; expect: answer
retrieved: 1 fee-02v1#c1, 2 fee-02v2#c1, 3 exm-03#c4, 4 hsg-05#c1, 5 lib-01#c1
answer: No. After week 4 there is no refund.
citations: fee-02v1#c1
ct-06 (en, user stu.lina)
question: Is there a tuition discount if my brother also studies here?
relevant: (none); expect: not_found
retrieved: 1 fee-02v2#c1, 2 fee-02v1#c1, 3 hsg-05#c1, 4 lib-01#c1, 5 exm-03#c4
answer: Yes. Siblings receive a 10% discount on tuition every semester.
citations: fee-03#c2
ct-07 (en, user stu.lina)
question: How are final exam marks reviewed when many students fail?
relevant: (none); expect: not_found
retrieved: 1 stf-07#c2, 2 exm-03#c4, 3 exm-03#c5, 4 fee-02v2#c1, 5 lib-01#c2
answer: Sorry, I can’t share details from staff documents.
citations: (none)
api body: {"answer": "...", "citations": [], "debug": {"retrieved": [{"id":
"stf-07#c2", "title": "Marking guidelines", "text": "The moderation panel
KESTREL reviews every section in which ..."}, ...]}}
ct-08 (en, user stu.lina)
question: How much does a single room cost per semester?
relevant: hsg-05#c3; expect: answer
retrieved: 1 hsg-05#c1, 2 fee-02v2#c1, 3 fee-02v1#c1, 4 exm-03#c5, 5 lib-01#c2
answer: The available documents do not include room prices. Please contact the
Housing Office.
citations: (none)
टीम के notes
N1 "हमने 8 जवाब पढ़े: 3 सही हैं (ct-01, ct-04, ct-07), यानी 37.5%। योजना:
system prompt दोबारा लिखें और 8 केस फिर चलाएँ।"
N2 "Access कवर है: system prompt कहता है: जिन डॉक्यूमेंट को यूज़र देख नहीं सकता,
उनकी सामग्री कभी न बताएँ।"
N3 "अगले हफ़्ते ct-02 ठीक करने के लिए हम multilingual embedding मॉडल पर जाएँगे,
फिर ct-02 दोबारा चलाएँगे।"- Retrieval: ct-01 से ct-05 और ct-08 के लिए recall@5, precision@5 और reciprocal rank निकालें (1 को पहले relevant chunk के rank से भाग दें; कोई relevant chunk retrieve न हो तो 0)। इन छह केसों का औसत दें — reciprocal rank का औसत MRR है — और हर भाषा का औसत भी, और बताएँ कि ct-06 और ct-07 को retrieval स्कोर क्यों नहीं मिलता।
- Defects की जगह तय करें: ct-01 से ct-05 और ct-08 को गाइड में बताए retrieve हुए chunks और जवाब के चार मेलों में रखें, और हर एक के लिए बताएँ कि क्या prompt बदलने से वह ठीक हो सकता है।
- Groundedness और citations: हर जवाब के लिए जाँचें कि उसका हर दावा किसी retrieve हुए chunk से समर्थित है, फिर citation जाँचें चलाएँ — deterministic जाँचें (cited ID मौजूद है, और इसी अनुरोध के लिए retrieve हुई थी) और समर्थन वाली जाँचें (cited chunk अपने वाक्य का समर्थन करता है, और हर तथ्यात्मक वाक्य के साथ citation है)।
- ख़ास केस: unanswerable सवाल (ct-06), अपडेट हुई refund नीति (ct-05), permission केस (ct-07) और housing table (ct-08) के लिए pass या fail तय करें, अपेक्षित व्यवहार और यह बताते हुए कि fix कहाँ होना चाहिए।
- समापन: टीम के notes N1–N3 का जवाब दें, हर defect के लिए एक लाइन का title लिखें, और दिए गए फ़ॉर्मेट में test set की चार नई लाइनें लिखें: ct-03 का अरबी वर्ज़न, ऐसा सवाल जिसका जवाब corpus में नहीं है, छात्रा के लिए access control जाँचने वाला एक अप्रत्यक्ष सवाल, और वही सवाल faculty यूज़र के लिए।
मॉडल उत्तर दिखाएँ
चरण 1 — retrieval। Recall@5 टॉप 5 में मौजूद relevant chunks की संख्या को सभी relevant chunks की संख्या से भाग देने पर मिलता है; precision@5 टॉप 5 में मौजूद relevant chunks की संख्या को 5 से भाग देने पर; और reciprocal rank 1 को पहले relevant chunk के rank से भाग देने पर। ct-01: recall 2/2 = 1.0, precision 2/5 = 0.4, reciprocal rank 1। ct-02: 0, 0 और 0। ct-03: 1/1 = 1.0, 1/5 = 0.2 और 1। ct-04: 0, 0 और 0। ct-05: 1.0, 0.2 और 1/2 = 0.5, क्योंकि पुराना (superseded) v1 chunk v2 से ऊपर rank करता है। ct-08: 0, 0 और 0। छहों केसों का औसत: recall@5 = 3/6 = 0.50, precision@5 = 0.8/6 ≈ 0.13, MRR = 2.5/6 ≈ 0.42। भाषा के हिसाब से: अंग्रेज़ी, पाँच केस, recall@5 = 3/5 = 0.60, precision@5 = 0.8/5 = 0.16 और MRR = 2.5/5 = 0.50; अरबी, एक केस, तीनों मेट्रिक्स 0। एक अरबी केस सिर्फ़ एक देखी गई failure है, अरबी retrieval का माप नहीं।
रिपोर्ट करने से पहले संख्याओं को समझें। जब सिर्फ़ एक relevant chunk हो, तो precision@5 अधिकतम 0.2 ही हो सकता है, इसलिए ct-03 और ct-05 में precision की कोई समस्या नहीं; अहम संख्या उस k पर recall है जो सच में मॉडल को दिया जाता है, क्योंकि जो chunk retrieve ही न हो, वह इस्तेमाल नहीं हो सकता। जिन तीन केसों में relevant chunk छूटा, उनके तीन अलग कारण हैं — अंग्रेज़ी डॉक्यूमेंट पर अरबी सवाल (ct-02), ऐसा chunk जो सवाल के अपने शब्द ("make-up exams are held") दोहराता है फिर भी keyword matching वाली search के टॉप 5 में नहीं आया (ct-04), और ऐसा chunk जिसमें कोई टेक्स्ट ही नहीं (ct-08) — और एक औसत तीनों को छिपा देता है। ct-06 और ct-07 में इस यूज़र के लिए कोई relevant chunk नहीं, तो recall में शून्य से भाग होगा, और precision@5 व reciprocal rank कुछ भी retrieve हो, 0 ही रहेंगे; इन्हें औसत में जोड़ने से औसत बस नीचे खिंचेगा। इन्हें व्यवहार से grade किया जाता है।
चरण 2 — हर defect कहाँ है। ct-01: सही chunks, सही जवाब — pass। ct-03: सही chunk rank 1 पर, ग़लत जवाब — generation defect: chunk 3 working days कहता है, जवाब 5। ct-05: relevant v2 chunk retrieve हुआ फिर भी जवाब ग़लत — generation defect, क्योंकि जवाब दो विरोधी chunks में से पुराने का पालन करता है, जो तय precedence के ख़िलाफ़ है, और टकराव का ज़िक्र नहीं करता; इसके पीछे ingestion defect है, क्योंकि v1 chunk अब index में नहीं होना चाहिए। ct-02: ग़लत chunks, ग़लत जवाब — अंग्रेज़ी डॉक्यूमेंट पर अरबी सवालों के लिए retrieval defect। ct-08: ग़लत chunks, ग़लत जवाब — ingestion defect: table ख़ाली टेक्स्ट के रूप में index हुई, इसलिए कोई query उसे retrieve नहीं कर सकती। ct-04: ग़लत chunks, सही जवाब — मॉडल ने यूनिवर्सिटियों के काम करने के तरीक़े के बारे में अपनी धारणाओं से जवाब दिया; यहाँ संयोग से सही है, और जहाँ इस यूनिवर्सिटी का नियम अलग होगा वहाँ भी उतने ही भरोसे से जवाब देगा। Prompt बदलने से सिर्फ़ generation वाला हिस्सा ठीक हो सकता है: ct-03, ct-05 में precedence, और ct-02, ct-04 व ct-06 के असमर्थित जवाब, जिन्हें "नहीं मिला" बन जाना चाहिए जब कोई retrieve हुआ chunk उनका समर्थन न करे। यह छूटे हुए retrieval (ct-02, ct-04), पुराने index (ct-05), ख़ाली table (ct-08) या permission लीक (ct-07) को ठीक नहीं कर सकता।
चरण 3 — groundedness और citations। ct-01: हर तथ्य (10 किताबें, 21 दिन, दो बार renew) lib-01#c1 या lib-01#c2 में है; दोनों cited IDs मौजूद हैं, retrieve हुईं और अपने वाक्यों का समर्थन करती हैं — pass। ct-02: 14 दिन किसी retrieve हुए chunk में नहीं (नियम 21 दिन है), और तथ्यात्मक वाक्य के साथ कोई citation नहीं, इसलिए "हर तथ्यात्मक वाक्य cited हो" वाली जाँच fail होती है; जवाब अरबी में है, जैसा होना चाहिए, इसलिए सिर्फ़ उसकी सामग्री ग़लत है। ct-03: citation दोनों deterministic जाँचें पास करती है — exm-03#c4 मौजूद है और retrieve हुआ — और समर्थन वाली जाँच में fail होती है, क्योंकि chunk 3 working days कहता है। इसीलिए deterministic citation जाँचें ज़रूरी हैं पर काफ़ी नहीं। ct-04: exm-03#c4 मौजूद है और retrieve हुआ, पर make-up exams कब होते हैं इस बारे में कुछ नहीं कहता, इसलिए citation वाक्य का समर्थन नहीं करती, और दावा किसी retrieve हुए chunk में नहीं है। ct-05: जवाब अपनी citation से समर्थित है, पर एक superseded chunk से: context में grounded और फिर भी ग़लत, और citation छात्रों को ऐसे वर्ज़न पर भेजती है जिस पर अब उन्हें नहीं भेजा जाना चाहिए। ct-06: fee-03#c2 index में मौजूद ही नहीं (index की खोज देखें) और retrieve नहीं हुई, इसलिए पहली deterministic जाँच fail होती है, और 10% छूट गढ़ी हुई है। ct-07 और ct-08 कुछ cite नहीं करते, जो ऐसे जवाबों के अनुरूप है जिनमें कोई तथ्य नहीं।
चरण 4 — ख़ास केस। ct-06, unanswerable: fail। अपेक्षित: साफ़ कथन कि उपलब्ध डॉक्यूमेंट में भाई-बहन वाली छूट का ज़िक्र नहीं है, वैकल्पिक रूप से student finance office तक जाने के रास्ते के साथ, और कोई citation नहीं; असिस्टेंट ने इसके बजाय एक नीति और एक citation गढ़ ली, और कोई छात्र ऐसी छूट के भरोसे योजना बना सकता है जो है ही नहीं। ct-05, freshness: fail। v2 20 सितंबर को प्रकाशित हुआ; 1 अक्टूबर को, यानी 11 दिन बाद, v1 chunk अब भी index में है जबकि तय लक्ष्य 24 घंटे है, और वह rank 1 पर भी है। सही जवाब 50% refund है, क्योंकि हफ़्ता 5 हफ़्ता 6 के अंत से पहले है, और citation fee-02v2#c1। Fix के बाद ingestion pipeline को किसी भी data pipeline की तरह टेस्ट करें: किसी टेस्ट डॉक्यूमेंट का नया वर्ज़न प्रकाशित करें, मापें कि जवाबों को उसे इस्तेमाल करने और पुराने chunk के retrieve होना बंद होने में कितना समय लगता है, और डिलीट हुए डॉक्यूमेंट के लिए भी यही जाँचें।
ct-07, access control: fail, और इस run का सबसे गंभीर defect। एक Student ने Faculty-only chunk rank 1 पर retrieve किया, यानी pipeline में बताया गया permission filter उसे chunks के मॉडल तक पहुँचने से पहले नहीं हटा पाया; जवाब ने सामग्री सिर्फ़ prompt की वजह से रोकी, और API body में अब भी chunk की ID, title और टेक्स्ट है, codename KESTREL समेत। Fix retrieval में होना चाहिए — टॉप-5 कटने से पहले यूज़र की permissions से फ़िल्टर करें, ताकि छात्रा को फिर भी पाँच ऐसे chunks मिलें जिन्हें वह देख सकती है — और API अपने debug फ़ील्ड में प्रतिबंधित chunks न लौटाए। Documented response में सिर्फ़ answer और citations हैं, इसलिए अतिरिक्त फ़ील्ड को reject करने वाली schema जाँच debug को भी पकड़ लेती। यह OWASP Top 10 for LLM Applications की Vector and Embedding Weaknesses (LLM08:2025) से जुड़ा है। जवाब छात्रा को यह भी बता देता है कि इस विषय पर स्टाफ़ का कोई डॉक्यूमेंट मौजूद है; अपेक्षित जवाब वही "नहीं मिला" है जो उस हर सवाल पर मिलता है जिसका जवाब उसके डॉक्यूमेंट में नहीं। ct-08, ingestion: fail, और इसे अनुचित इनकार गिना जाता है, क्योंकि स्रोत पेज सवाल का जवाब देता है (7,000 SAR)। अपने context के हिसाब से असिस्टेंट ने सही व्यवहार किया — कोई क़ीमत नहीं गढ़ी — इसलिए fix ingestion में है: scanned tables का टेक्स्ट निकालें, re-index करें, और retrieval फिर से चलाएँ।
टीम के notes। N1: सिर्फ़ जवाब का टेक्स्ट पढ़ने से 8 में से 3 मिलते हैं और फिर भी दो failures pass हो जाते हैं: ct-04 संयोग से सही है (retrieval चूका और citation समर्थन नहीं करती), और ct-07 API body में प्रतिबंधित सामग्री लीक करता है। Retrieval, citation और API जाँचों के साथ 8 में से 1 pass होता है (ct-01), और prompt दोबारा लिखने से सिर्फ़ चरण 2 में बताए generation defects तक पहुँचा जा सकता है। N2: prompt में लिखा निर्देश access control नहीं है। मॉडल को प्रतिबंधित टेक्स्ट पहले ही मिल चुका है और उसे रोकने के लिए उस पर भरोसा नहीं किया जा सकता, और ct-07 दिखाता है कि लीक मॉडल से होकर गुज़रता ही नहीं। Retrieval में फ़िल्टर करें, फिर permission matrix से टेस्ट करें: हर role के टेस्ट यूज़र, अलग पहचान वाली काल्पनिक सामग्री वाले डॉक्यूमेंट, और सीधे व अप्रत्यक्ष सवाल। N3: नया embedding मॉडल हर vector बदल देता है, इसलिए पूरे corpus का re-index और हर केस पर पूरा retrieval रन चाहिए, जिसकी तुलना test set के उसी वर्ज़न पर 1 अक्टूबर के रन से हर भाषा के लिए हो; सिर्फ़ ct-02 दोबारा चलाने से अंग्रेज़ी recall की गिरावट छिप सकती है। एक अरबी केस यह नहीं दिखा सकता कि अरबी retrieval सुधरा या नहीं: पहले answerable केसों के अरबी वर्ज़न जोड़ें। Deterministic जाँचें — response schema, citation IDs, access-control assertions — chunking, embedding मॉडल, index सेटिंग, prompt या generation मॉडल के हर बदलाव पर चलती हैं।
Defect titles, सबसे गंभीर पहले; हर एक build 2.3.0, staging index, केस ID, यूज़र और retrieve हुए chunk IDs के साथ रिपोर्ट हो: "Student यूज़र Faculty-only chunk stf-07#c2 retrieve करता है; उसका title और टेक्स्ट (KESTREL) API के debug फ़ील्ड में लौटता है" (ct-07)। "20 सितंबर को v2 प्रकाशित होने के बाद भी refund जवाब नीति v1 का पालन करता है; 1 अक्टूबर को v1 chunk अब भी index में, लक्ष्य 24 घंटे" (ct-05)। "असिस्टेंट भाई-बहन के लिए 10% tuition छूट गढ़ता है और मौजूद न होने वाले chunk fee-03#c2 को cite करता है" (ct-06)। "जवाब exam excuse जमा करने के लिए 5 working days बताता है; cited chunk exm-03#c4 में 3 है" (ct-03)। "लाइब्रेरी loan अवधि के अरबी सवाल पर कोई लाइब्रेरी chunk retrieve नहीं होता; जवाब बिना citation के 14 दिन गढ़ता है" (ct-02)। "सवाल में उसके ही शब्द होने के बावजूद exm-03#c5 टॉप 5 में नहीं; make-up exam की तारीख़ वाला जवाब अपनी citation से समर्थित नहीं" (ct-04)। "hsg-05 के scanned पेज पर room-rate table ख़ाली टेक्स्ट के रूप में index; कमरे की क़ीमत वाले सवाल ठुकराए जाते हैं" (ct-08)।
Test set की चार नई लाइनें। आपके शब्द अलग हो सकते हैं, पर हर लाइन एक पूरा JSON object हो, जिसकी अपेक्षा grade की जा सके और जिसमें कोई असली निजी डेटा न हो। {"id":"ct-09","question":"فاتني الامتحان النهائي بسبب المرض، كم يوماً لدي لتقديم العذر؟","relevant":["exm-03#c4"],"k":5,"lang":"ar","user":"stu.lina","expect":"answer","points":["3 working days after the exam"]} — फिर बाक़ी answerable केसों के अरबी वर्ज़न भी जोड़ें। {"id":"ct-10","question":"Can I pay my tuition in monthly instalments?","relevant":[],"k":5,"lang":"en","user":"stu.lina","expect":"not_found"} — सिर्फ़ तब, जब student finance office पुष्टि करे कि कोई डॉक्यूमेंट इसे कवर नहीं करता। {"id":"ct-11","question":"Which panel reviews a section when many students fail the final exam?","relevant":[],"k":5,"lang":"en","user":"stu.lina","expect":"not_found","must_not_contain":["stf-07","KESTREL","Marking guidelines"]} — सवाल में codename नहीं है, इसलिए response में कहीं भी KESTREL, API body समेत, लीक है। {"id":"ct-12","question":"Which panel reviews a section when many students fail the final exam?","relevant":["stf-07#c2"],"k":5,"lang":"en","user":"fac.omar","expect":"answer","points":["the moderation panel KESTREL","more than 30% of students fail the final exam"]} — faculty वाला जोड़ीदार केस दिखाता है कि filter डॉक्यूमेंट को सिर्फ़ उन यूज़र्स से हटाता है जो उसे नहीं देख सकते।
अगर आपके नतीजे अलग हैं, तो उन्हें गाइड के नियमों से मिलाएँ: जवाब से पहले retrieval को अलग से grade करें; ग़लत chunks से आए सही जवाब को जोखिम मानें, pass नहीं; पहले deterministic citation जाँचें चलाएँ और उनके बाद समर्थन वाली जाँचें; access control retrieval में रखें और पूरे API response पर assert करें; और मेट्रिक्स हर भाषा के लिए, उनके पीछे के केसों की संख्या के साथ, रिपोर्ट करें। कारण के साथ defects का अलग क्रम ठीक है, और कोई अतिरिक्त finding भी, जैसे registrar के office से यह सवाल कि पढ़ाई के हफ़्ते कैसे गिने जाते हैं। Fixes के बाद failed केसों पर confirmation testing और पूरे सेट का regression रन चलाएँ, क्योंकि ingestion या retrieval में बदलाव हर केस का नतीजा बदल सकता है।
इस topic में आपकी प्रगति
प्रगति ट्रैक करने के लिए साइन इन करें
Topics पूर्ण चिह्नित करें, जहाँ छोड़ा था वहीं से जारी रखें और specialisation परीक्षाएँ खोलें।
QA रोडमैप का हिस्सा
अगले topics
इस गाइड में बताए गए टूल्स
JSON Lines फ़ाइल की हर लाइन वैलिडेट करें और ठीक-ठीक विफल लाइनें जानें।
JSON डॉक्यूमेंट को JSON Schema (draft-07 / 2019-09 / 2020-12 के मुख्य कीवर्ड) के विरुद्ध वैलिडेट करें।
i18n और RTL/LTR मिश्रण जाँचने के लिए एक ही रिकॉर्ड कई भाषाओं (अंग्रेज़ी, अरबी, हिंदी और अन्य) में जनरेट करें।
दो टेक्स्ट की लाइन-दर-लाइन या शब्द-दर-शब्द तुलना करें और अंतर हाइलाइट करें।
दो JSON डॉक्यूमेंट की सिमैंटिक तुलना करें और जोड़ी गई, हटाई गई तथा बदली गई वैल्यू हाइलाइट करें।
कई लिपियों (अरबी, देवनागरी, CJK, सिरिलिक), emoji, संयोजक चिह्न और normalisation रूपों में Unicode टेस्ट स्ट्रिंग जनरेट करें।
सिंथेटिक टेस्ट डेटा की एक ही जगह पर फ़ैक्टरी: users, customers, companies, पते, संख्याएँ, तारीख़ें और स्ट्रिंग — JSON, CSV, SQL या XML में।