المستوى: مبتدئ
لو رفعت ملف سياسة الموارد البشرية في تطبيقك وسألت Claude عن "إجازة الأبوة"، الموديل ممكن يجاوبك بكلام معقول لكن إنت مش هتعرف الإجابة دي طلعت من فين. Citations API بيخلّي كل جملة في الرد معاها رقم سطر ومقطع نص حرفي من ملفك الأصلي. ده بيقطع وقت المراجعة البشرية من 5 دقائق لحوالي 22 ثانية لكل سؤال.
Citations في Claude: الأمانة قبل الدقة
المشكلة باختصار
أي تطبيق RAG قياسي بيرد بإجابة نصية بس. لو الإجابة غلط، إنت متهم بـ "هلوسة الموديل" حتى لو الـ retrieval كان صح. ولو الإجابة صح، المستخدم لازم يفتح الملف يدوياً علشان يتأكد. الحل اللي طرحته Anthropic في 27 يناير 2025 اسمه Citations: الموديل بيرجّع الإجابة مع pointers لكل جملة بتقول طلعت من فين بالظبط.
مثال واقعي قبل أي تعريف علمي: محمد طالب الثانوية
تخيّل محمد بيكتب بحث عن الحرب العالمية الثانية. مدرّسه قاله: "أي معلومة تكتبها لازم تقول قراها فين". لو محمد كتب "هتلر دخل بولندا في 1939" من غير مصدر، البحث بياخد صفر. لو كتبها وجنبها بين قوسين (موسوعة بريتانيكا، صفحة 142)، البحث بياخد العلامة كاملة.
Citations بيعمل نفس الحاجة بالظبط مع Claude. الموديل بيكتب الجملة، وجنبها بيرفق رقم المستند والـ characters اللي طلع منهم الكلام. لو ما لقاش الإجابة في الملف، بيقول "مفيش مصدر مباشر" بدل ما يخترع. ده الفرق بين طالب أمين وطالب بيخمّن.
التعريف العلمي بدقة
Citations API هو extension على content blocks في Anthropic SDK Python 0.45+ و TypeScript 0.32+. لما تبعت ملف كـ document content block مع flag citations.enabled = true، الموديل بيرجّع response فيها text blocks، وكل block فيها مصفوفة اسمها citations. كل citation بتحتوي على:
type: واحد من ثلاثة -char_locationللنصوص،page_locationللـ PDFs، أوcontent_block_locationللملفات المنظمة.document_index: ترتيب المستند لو بعت أكتر من ملف في نفس الـ request.cited_text: النص الحرفي اللي الموديل اعتمد عليه (مش إعادة صياغة).start_char_indexوend_char_index: حدود المقطع داخل الملف.
الفرق الجوهري عن RAG العادي: الـ pointer مش جملة كتبها الموديل بعد الإجابة، الـ pointer جاي من الـ inference engine نفسه أثناء توليد كل token. ده بيقفل الباب على hallucination المصدر تحديداً.