استرداد الجيل المعزز (RAG) في Azure الذكاء الاصطناعي Search

Retrieval Augmented Generation (RAG) هي بنية تزيد من قدرات نموذج لغة كبيرة (LLM) مثل ChatGPT عن طريق إضافة نظام استرداد المعلومات الذي يوفر بيانات الأساس. إضافة نظام استرداد المعلومات يمنحك التحكم في البيانات الأرضية المستخدمة من قبل LLM عند صياغة استجابة. بالنسبة إلى حل المؤسسة، تعني بنية RAG أنه يمكنك تقييد الذكاء الاصطناعي التوليدية بمحتوى المؤسسة المصدر من المستندات والصور المتجهة، وتنسيقات البيانات الأخرى إذا كان لديك نماذج تضمين لهذا المحتوى.

يعد القرار بشأن نظام استرداد المعلومات الذي يجب استخدامه أمرا بالغ الأهمية لأنه يحدد المدخلات إلى LLM. يجب أن يوفر نظام استرداد المعلومات ما يلي:

  • استراتيجيات الفهرسة التي يتم تحميلها وتحديثها على نطاق واسع، لجميع المحتوى الخاص بك، بالتردد الذي تحتاجه.

  • قدرات الاستعلام وضبط الصلة. يجب أن يرجع النظام النتائج ذات الصلة ، بتنسيقات النموذج القصير اللازمة لتلبية متطلبات طول الرمز المميز لإدخالات LLM.

  • الأمان والوصول العالمي والموثوقية لكل من البيانات والعمليات.

  • التكامل مع نماذج التضمين للفهرسة ونماذج الدردشة أو نماذج فهم اللغة للاسترداد.

يعد Azure الذكاء الاصطناعي Search حلا مثبتا لاسترداد المعلومات في بنية RAG. يوفر إمكانات الفهرسة والاستعلام، مع البنية الأساسية والأمان في سحابة Azure. من خلال التعليمات البرمجية والمكونات الأخرى، يمكنك تصميم حل RAG شامل يتضمن جميع العناصر الذكاء الاصطناعي التوليدية على المحتوى الخاص بك.

إشعار

هل هو جديد في مفاهيم copilot و RAG؟ شاهد بحث Vector وحالة الاسترداد الفني لتطبيقات الذكاء الاصطناعي التوليدية.

لدى Microsoft العديد من التطبيقات المضمنة لاستخدام Azure الذكاء الاصطناعي Search في حل RAG.

تجعل الأساليب المنسقة من السهل البدء، ولكن لمزيد من التحكم في البنية، تحتاج إلى حل مخصص. تنشئ هذه القوالب حلولا شاملة في:

يستكشف الجزء المتبقي من هذه المقالة كيف يتناسب Azure الذكاء الاصطناعي Search مع حل RAG مخصص.

يبدو ملخص عالي المستوى للنمط كما يلي:

  • ابدأ بسؤال أو طلب مستخدم (مطالبة).
  • أرسله إلى Azure الذكاء الاصطناعي Search للعثور على المعلومات ذات الصلة.
  • إرسال نتائج البحث المصنفة أعلى مرتبة إلى LLM.
  • استخدم فهم اللغة الطبيعية وقدرات المنطق ل LLM لإنشاء استجابة للمطالبة الأولية.

يوفر Azure الذكاء الاصطناعي Search مدخلات لمطالبة LLM، ولكنه لا يدرب النموذج. في بنية RAG، لا يوجد تدريب إضافي. يتم تدريب LLM مسبقا باستخدام البيانات العامة، ولكنه ينشئ استجابات يتم تعزيزها بمعلومات من المسترد.

تحتوي أنماط RAG التي تتضمن Azure الذكاء الاصطناعي Search على العناصر المشار إليها في الرسم التوضيحي التالي.

رسم تخطيطي هيكلي لاسترداد المعلومات باستخدام البحث و ChatGPT.

  • تجربة المستخدم للتطبيق (تطبيق الويب) لتجربة المستخدم
  • خادم التطبيق أو المنسق (طبقة التكامل والتنسيق)
  • Azure الذكاء الاصطناعي Search (نظام استرداد المعلومات)
  • Azure OpenAI (LLM الذكاء الاصطناعي التوليدي)

يوفر تطبيق الويب تجربة المستخدم، ما يوفر العرض التقديمي والسياق وتفاعل المستخدم. تبدأ الأسئلة أو المطالبات من مستخدم هنا. تمر المدخلات عبر طبقة التكامل، وتنتقل أولا إلى استرداد المعلومات للحصول على نتائج البحث، ولكن أيضا انتقل إلى LLM لتعيين السياق والهدف.

خادم التطبيق أو المنسق هو رمز التكامل الذي ينسق التسليمات بين استرداد المعلومات و LLM. أحد الخيارات هو استخدام LangChain لتنسيق سير العمل. يتكامل LangChain مع Azure الذكاء الاصطناعي Search، مما يسهل تضمين Azure الذكاء الاصطناعي Search كمسترد في سير العمل. Kernel الدلالي هو خيار آخر.

يوفر نظام استرداد المعلومات الفهرس القابل للبحث ومنطق الاستعلام والحمولة (استجابة الاستعلام). يمكن أن يحتوي فهرس البحث على متجهات أو محتوى غير عنصري. على الرغم من أن معظم العينات والعروض التوضيحية تتضمن حقول المتجهات، إلا أنها ليست شرطا. يتم تنفيذ الاستعلام باستخدام محرك البحث الموجود في Azure الذكاء الاصطناعي Search، والذي يمكنه معالجة الكلمة الأساسية (أو المصطلح) واستعلامات المتجه. يتم إنشاء الفهرس مسبقا، استنادا إلى مخطط تحدده، ويتم تحميله بالمحتوى الذي يتم الحصول عليه من الملفات أو قواعد البيانات أو التخزين.

يتلقى LLM المطالبة الأصلية، بالإضافة إلى النتائج من Azure الذكاء الاصطناعي Search. تقوم LLM بتحليل النتائج وصياغة استجابة. إذا كان LLM هو ChatGPT، فقد يكون تفاعل المستخدم محادثة ذهابا وإيابا. إذا كنت تستخدم Davinci، فقد تكون المطالبة إجابة مكونة بالكامل. يستخدم حل Azure على الأرجح Azure OpenAI، ولكن لا توجد تبعية ثابتة على هذه الخدمة المحددة.

لا يوفر Azure الذكاء الاصطناعي Search تكامل LLM الأصلي لتدفقات المطالبة أو الاحتفاظ بالدردشة، لذلك تحتاج إلى كتابة التعليمات البرمجية التي تتعامل مع التنسيق والحالة. يمكنك مراجعة مصدر العرض التوضيحي (Azure-Samples/azure-search-openai-demo) للحصول على مخطط لما ينطوي عليه الحل الكامل. نوصي أيضا ب Azure الذكاء الاصطناعي Studio أو Azure OpenAI Studio لإنشاء حلول Azure الذكاء الاصطناعي Search المستندة إلى RAG والتي تتكامل مع LLMs.

في Azure الذكاء الاصطناعي Search، يتم تخزين جميع المحتويات القابلة للبحث في فهرس بحث مستضاف على خدمة البحث. تم تصميم فهرس البحث للاستعلامات السريعة بأوقات استجابة بالمللي ثانية، لذلك توجد بنيات البيانات الداخلية الخاصة به لدعم هذا الهدف. لتحقيق هذه الغاية، يقوم فهرس البحث بتخزين المحتوى المفهرس، وليس ملفات المحتوى بالكامل مثل ملفات PDF بالكامل أو الصور. داخليا، تتضمن بنيات البيانات فهارس مقلوبة للنص المميز، وفهارس المتجهات للتضمينات، والنص غير الملغى للحالات التي تكون فيها المطابقة الحرفية مطلوبة (على سبيل المثال، في عوامل التصفية، والبحث الغامض، واستعلامات التعبير العادية).

عند إعداد البيانات لحل RAG الخاص بك، يمكنك استخدام الميزات التي تنشئ فهرسا وتحمله في Azure الذكاء الاصطناعي Search. يتضمن الفهرس حقولا تكرر المحتوى المصدر أو تمثله. قد يكون حقل الفهرس عبارة عن نقل بسيط (يصبح العنوان أو الوصف في مستند المصدر عنوانا أو وصفا في فهرس البحث)، أو قد يحتوي الحقل على إخراج عملية خارجية، مثل المتجهات أو معالجة المهارات التي تنشئ تمثيلا أو وصفا نصيا للصورة.

نظرا لأنك ربما تعرف نوع المحتوى الذي تريد البحث فيه، ففكر في ميزات الفهرسة التي تنطبق على كل نوع محتوى:

نوع المحتوى مفهرس ك الميزات
النص الرموز المميزة، نص غير تم تغييره يمكن للمفهرسات سحب نص عادي من موارد Azure الأخرى مثل Azure Storage وCosmos DB. يمكنك أيضا دفع أي محتوى JSON إلى فهرس. لتعديل النص في إصدار التقييم، استخدم المحللات والمعادلات لإضافة معالجة معجمية أثناء الفهرسة. تكون خرائط المرادفات مفيدة إذا كانت المستندات المصدر مفقودة من المصطلحات التي قد يتم استخدامها في استعلام.
النص المتجهات 1 يمكن تقسيم النص واتجاهه خارجيا ثم فهرسته كالحقول المتجهة في الفهرس.
صورة الرموز المميزة، نص غير مستبدل 2 يمكن لمهارات التعرف البصري على الحروف وتحليل الصور معالجة الصور للتعرف على النص أو خصائص الصورة. يتم تحويل معلومات الصورة إلى نص قابل للبحث وإضافتها إلى الفهرس. المهارات لها متطلبات مفهرس.
صورة المتجهات 1 يمكن تحويل الصور خارجيا لتمثيل رياضي لمحتوى الصورة ثم فهرستها كالحقول المتجهة في الفهرس. يمكنك استخدام نموذج مصدر مفتوح مثل OpenAI CLIP لتحوير النص والصور في نفس مساحة التضمين.

1 تتطلب الوظيفة المتوفرة بشكل عام لدعم المتجهات استدعاء مكتبات أو نماذج أخرى لتقسيم البيانات وتعميمها. ومع ذلك، فإن المتجهات المتكاملة (معاينة) تتضمن هذه الخطوات. للحصول على نماذج التعليمات البرمجية التي تعرض كلا النهجين، راجع azure-search-vectors repo.

2المهارات هي دعم مدمج لإثراء الذكاء الاصطناعي. بالنسبة إلى التعرف البصري على الحروف وتحليل الصور، يقوم مسار الفهرسة باستدعاء داخلي إلى واجهات برمجة تطبيقات Azure الذكاء الاصطناعي Vision. تمرر هذه المهارات صورة مستخرجة إلى Azure الذكاء الاصطناعي للمعالجة، وتتلقى الإخراج كنص مفهرس بواسطة Azure الذكاء الاصطناعي Search.

توفر الخطوط المتجهة أفضل تسوية للمحتوى المتباين (تنسيقات ولغات ملفات متعددة) لأنه يتم التعبير عن المحتوى عالميا في التمثيلات الرياضية. تدعم المتجهات أيضا البحث عن التشابه: المطابقة على الإحداثيات الأكثر تشابها مع استعلام المتجه. مقارنة بالبحث عن الكلمات الأساسية (أو البحث عن مصطلح) الذي يتطابق مع المصطلحات المميزة، يكون البحث عن التشابه أكثر دقة. إنه خيار أفضل إذا كان هناك غموض أو متطلبات تفسير في المحتوى أو في الاستعلامات.

بمجرد أن تكون بياناتك في فهرس بحث، يمكنك استخدام قدرات الاستعلام في Azure الذكاء الاصطناعي Search لاسترداد المحتوى.

في نمط غير RAG، تقوم الاستعلامات برحلة ذهابا وإيابا من عميل بحث. يتم إرسال الاستعلام، ويتم تنفيذه على محرك بحث، ويتم إرجاع الاستجابة إلى تطبيق العميل. تتكون الاستجابة أو نتائج البحث حصريا من المحتوى الحرفي الموجود في الفهرس.

في نمط RAG، يتم تنسيق الاستعلامات والاستجابات بين محرك البحث و LLM. تتم إعادة توجيه سؤال المستخدم أو استعلامه إلى كل من محرك البحث وإلى LLM كمطالبة. تعود نتائج البحث من محرك البحث ويتم إعادة توجيهها إلى LLM. الاستجابة التي تجعلها مرة أخرى إلى المستخدم هي الذكاء الاصطناعي إنشاء، إما جمع أو إجابة من LLM.

لا يوجد نوع استعلام في Azure الذكاء الاصطناعي Search - ولا حتى البحث الدلالي أو المتجه - الذي يقوم بإنشاء إجابات جديدة. يوفر LLM فقط الذكاء الاصطناعي التوليدية. فيما يلي القدرات في Azure الذكاء الاصطناعي Search المستخدمة لصياغة الاستعلامات:

ميزة الاستعلام الغرض لماذا تستخدمه
بناء جملة Lucene بسيط أو كامل تنفيذ الاستعلام عبر النص والمحتوى الرقمي غير الرقمي البحث الكامل عن النص هو الأفضل للمطابقات الدقيقة، بدلا من التطابقات المماثلة. يتم تصنيف استعلامات البحث عن النص الكامل باستخدام خوارزمية BM25 ودعم ضبط الصلة من خلال ملفات تعريف تسجيل النقاط. كما أنه يدعم عوامل التصفية والواجهات.
عوامل التصفية والواجهات ينطبق على الحقول النصية أو الرقمية (غير الرقمية) فقط. يقلل من مساحة سطح البحث استنادا إلى معايير التضمين أو الاستبعاد. إضافة الدقة إلى الاستعلامات الخاصة بك.
الترتيب الدلالي إعادة ترتيب مجموعة نتائج BM25 باستخدام النماذج الدلالية. تنتج تسميات توضيحية قصيرة النماذج وإجابات مفيدة كإدخالات LLM. أسهل من تسجيل الملفات الشخصية، واعتمادا على المحتوى الخاص بك، تقنية أكثر موثوقية لضبط الصلة.
البحث عن المتجهات تنفيذ الاستعلام عبر حقول المتجهات للبحث عن التشابه، حيث تكون سلسلة الاستعلام متجه واحد أو أكثر. يمكن أن تمثل الخطوط المتجهة جميع أنواع المحتوى، بأي لغة.
البحث المختلط يجمع بين أي من تقنيات الاستعلام المذكورة أعلاه أو كلها. يتم تنفيذ الاستعلامات المتجهة وغير الخاصة بالتوازي ويتم إرجاعها في مجموعة نتائج موحدة. أهم المكاسب في الدقة والاستدعاء هي من خلال الاستعلامات المختلطة.

هيكلة استجابة الاستعلام

توفر استجابة الاستعلام الإدخال إلى LLM، لذا فإن جودة نتائج البحث الخاصة بك أمر بالغ الأهمية للنجاح. النتائج هي مجموعة صفوف جدولية. يعتمد تكوين أو بنية النتائج على:

  • الحقول التي تحدد أجزاء الفهرس المضمنة في الاستجابة.
  • الصفوف التي تمثل تطابقا من الفهرس.

تظهر الحقول في نتائج البحث عندما تكون السمة "قابلة للاسترداد". يحتوي تعريف الحقل في مخطط الفهرس على سمات، والتي تحدد ما إذا كان يتم استخدام حقل في استجابة. يتم إرجاع الحقول "القابلة للاسترداد" فقط في نص كامل أو نتائج استعلام متجه. بشكل افتراضي، يتم إرجاع كافة الحقول "القابلة للاسترداد"، ولكن يمكنك استخدام "تحديد" لتحديد مجموعة فرعية. وإلى جانب "قابل للاسترداد"، لا توجد قيود على الحقل. يمكن أن تكون الحقول من أي طول أو نوع. فيما يتعلق بالطول، لا يوجد حد أقصى لطول الحقل في Azure الذكاء الاصطناعي Search، ولكن هناك حدود لحجم طلب واجهة برمجة التطبيقات.

الصفوف هي مطابقات للاستعلام، مرتبة حسب الصلة أو التشابه أو كليهما. بشكل افتراضي، يتم وضع قائمة مطابقة للنتائج في أعلى 50 تطابقا للبحث الكامل في النص أو تطابقات k-near-neighbor للبحث في المتجهات. يمكنك تغيير الإعدادات الافتراضية لزيادة الحد الأقصى أو تقليله حتى 1000 مستند كحد أقصى. يمكنك أيضا استخدام المعلمات العليا وتخطي ترحيل الصفحات لاسترداد النتائج كسلسلة من النتائج المصفحة.

ترتيب حسب الصلة

عندما تعمل مع العمليات المعقدة وكمية كبيرة من البيانات والتوقعات للاستجابات بالمللي ثانية، من المهم أن تضيف كل خطوة قيمة وتحسن جودة النتيجة النهائية. على جانب استرداد المعلومات، يعد ضبط الصلة نشاطا يحسن جودة النتائج المرسلة إلى LLM. يجب تضمين المستندات الأكثر صلة أو الأكثر تطابقا فقط في النتائج.

تنطبق الصلة على البحث عن الكلمة الأساسية (غير العامل) وعلى الاستعلامات المختلطة (عبر الحقول غير الخاصة). في Azure الذكاء الاصطناعي Search، لا يوجد ضبط صلة للبحث عن التشابه واستعلامات المتجهات. ترتيب BM25 هو خوارزمية الترتيب للبحث عن النص الكامل.

يتم دعم ضبط الصلة من خلال الميزات التي تعزز ترتيب BM25. وتشمل هذه النهج ما يلي:

  • ملفات تعريف النقاط التي تعزز درجة البحث إذا تم العثور على تطابقات في حقل بحث معين أو على معايير أخرى.
  • الترتيب الدلالي الذي يعيد ترتيب مجموعة نتائج BM25، باستخدام نماذج دلالية من Bing لإعادة ترتيب النتائج لملاءمة دلالية أفضل للاستعلام الأصلي.

في اختبار المقارنة وقياس الأداء، تنتج الاستعلامات المختلطة ذات الحقول النصية والمتجهة، المكملة بترتيب دلالي على النتائج المصنفة على BM25، النتائج الأكثر صلة.

مثال على التعليمات البرمجية لاستعلام Azure الذكاء الاصطناعي Search لسيناريوهات RAG

يتم نسخ التعليمات البرمجية التالية من ملف retrievethenread.py من موقع تجريبي. content ينتج عن LLM من نتائج بحث الاستعلام المختلط. يمكنك كتابة استعلام أبسط، ولكن هذا المثال يشمل البحث عن المتجهات والبحث عن الكلمة الأساسية مع إعادة التمرير الدلالي والتدقيق الإملائي. في العرض التوضيحي، يتم استخدام هذا الاستعلام للحصول على المحتوى الأولي.

# Use semantic ranker if requested and if retrieval mode is text or hybrid (vectors + text)
if overrides.get("semantic_ranker") and has_text:
    r = await self.search_client.search(query_text,
                                  filter=filter,
                                  query_type=QueryType.SEMANTIC,
                                  query_language="en-us",
                                  query_speller="lexicon",
                                  semantic_configuration_name="default",
                                  top=top,
                                  query_caption="extractive|highlight-false" if use_semantic_captions else None,
                                  vector=query_vector,
                                  top_k=50 if query_vector else None,
                                  vector_fields="embedding" if query_vector else None)
else:
    r = await self.search_client.search(query_text,
                                  filter=filter,
                                  top=top,
                                  vector=query_vector,
                                  top_k=50 if query_vector else None,
                                  vector_fields="embedding" if query_vector else None)
if use_semantic_captions:
    results = [doc[self.sourcepage_field] + ": " + nonewlines(" . ".join([c.text for c in doc['@search.captions']])) async for doc in r]
else:
    results = [doc[self.sourcepage_field] + ": " + nonewlines(doc[self.content_field]) async for doc in r]
content = "\n".join(results)

التعليمات البرمجية للتكامل و LLMs

يتطلب حل RAG الذي يتضمن Azure الذكاء الاصطناعي Search مكونات ورمزا آخر لإنشاء حل كامل. في حين أن الأقسام السابقة كانت تغطي استرداد المعلومات من خلال Azure الذكاء الاصطناعي Search والميزات المستخدمة لإنشاء المحتوى القابل للبحث والاستعلام عنها، يقدم هذا القسم تكامل LLM والتفاعل.

تعد دفاتر الملاحظات في مستودعات العرض التوضيحي نقطة بداية رائعة لأنها تعرض أنماطا لتمرير نتائج البحث إلى LLM. تتكون معظم التعليمات البرمجية في حل RAG من استدعاءات إلى LLM لذلك تحتاج إلى تطوير فهم لكيفية عمل واجهات برمجة التطبيقات هذه، وهو خارج نطاق هذه المقالة.

تعرض كتلة الخلايا التالية في دفتر ملاحظات chat-read-retrieve-read.ipynb مكالمات البحث في سياق جلسة دردشة:

# Execute this cell multiple times updating user_input to accumulate chat history
user_input = "Does my plan cover annual eye exams?"

# Exclude category, to simulate scenarios where there's a set of docs you can't see
exclude_category = None

if len(history) > 0:
    completion = openai.Completion.create(
        engine=AZURE_OPENAI_GPT_DEPLOYMENT,
        prompt=summary_prompt_template.format(summary="\n".join(history), question=user_input),
        temperature=0.7,
        max_tokens=32,
        stop=["\n"])
    search = completion.choices[0].text
else:
    search = user_input

# Alternatively simply use search_client.search(q, top=3) if not using semantic ranking
print("Searching:", search)
print("-------------------")
filter = "category ne '{}'".format(exclude_category.replace("'", "''")) if exclude_category else None
r = search_client.search(search, 
                         filter=filter,
                         query_type=QueryType.SEMANTIC, 
                         query_language="en-us", 
                         query_speller="lexicon", 
                         semantic_configuration_name="default", 
                         top=3)
results = [doc[KB_FIELDS_SOURCEPAGE] + ": " + doc[KB_FIELDS_CONTENT].replace("\n", "").replace("\r", "") for doc in r]
content = "\n".join(results)

prompt = prompt_prefix.format(sources=content) + prompt_history + user_input + turn_suffix

completion = openai.Completion.create(
    engine=AZURE_OPENAI_CHATGPT_DEPLOYMENT, 
    prompt=prompt, 
    temperature=0.7, 
    max_tokens=1024,
    stop=["<|im_end|>", "<|im_start|>"])

prompt_history += user_input + turn_suffix + completion.choices[0].text + "\n<|im_end|>" + turn_prefix
history.append("user: " + user_input)
history.append("assistant: " + completion.choices[0].text)

print("\n-------------------\n".join(history))
print("\n-------------------\nPrompt:\n" + prompt)

كيفية البدء

  • راجع مفاهيم واستراتيجيات الفهرسة لتحديد الطريقة التي تريد بها استيعاب البيانات وتحديثها. حدد ما إذا كنت تريد استخدام البحث في المتجهات أو البحث عن الكلمات الأساسية أو البحث المختلط. يحدد نوع المحتوى الذي تحتاج إلى البحث فيه ونوع الاستعلامات التي تريد تشغيلها تصميم الفهرس.

  • راجع إنشاء الاستعلامات لمعرفة المزيد من بناء جملة طلب البحث والمتطلبات.

إشعار

بعض ميزات Azure الذكاء الاصطناعي Search مخصصة للتفاعل البشري وهي غير مفيدة في نمط RAG. على وجه التحديد، يمكنك تخطي الإكمال التلقائي والاقتراحات. قد تكون الميزات الأخرى مثل الواجهات و orderby مفيدة، ولكنها قد تكون غير شائعة في سيناريو RAG.

(راجع أيضًا )