توسيع نطاق التلخيص من جهة العميل في النوافذ الصغيرة للسياق

تاريخ النشر: 12 آذار (مارس) 2025

الشرح الويب الإضافات حالة Chrome النيّة بالشراء
Github خلف علم مرحلة التجربة والتقييم خلف علم مرحلة التجربة والتقييم العرض الهدف من التجربة

تساعدك واجهة برمجة التطبيقات Summarizer API في إنشاء ملخّصات عن المعلومات بأشكال وطول مختلفَين. يمكنك استخدامها مع Gemini Nano في Chrome لإجراء الاستنتاج من جهة العميل وشرح النصوص المعقدة أو الطويلة بأسلوب موجز.

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

ما هو ملخّص الملخّصات؟

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

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

تقسيم المحتوى بعناية

من المهم التفكير في كيفية تقسيم جزء كبير من النص، لأنّ التقسيم في مواضع مختلفة يمكن أن يؤدي إلى نتائج مختلفة تمامًا من قِبل Gemini Nano أو النماذج اللغوية الكبيرة الأخرى. من الأفضل تقسيم النصوص عند حدوث تغيير في الموضوع، مثل قسم جديد من المقالة أو عند فقرة. من المهم تجنُّب تقسيم النص في منتصف كلمة أو جملة، ما يعني أنّه لا يمكنك ضبط عدد أحرف كدليل تقسيم وحيد.

تتوفّر العديد من الطرق لإجراء ذلك بدون أي جهد يدوي. في المثال التالي، استخدمنا أداة تقسيم النصوص المتكررة من LangChain.js، التي توازن بين الأداء و جودة الإخراج. من المفترض أن يعمل هذا الإجراء مع معظم أعباء العمل.

عند إنشاء مثيل جديد، هناك مَعلمتَان رئيسيتان:

  • chunkSize هو الحد الأقصى لعدد الأحرف المسموح به في كل عملية تقسيم.
  • chunkOverlap هو عدد الأحرف التي تتداخل بين انقسامين متتاليين. يضمن ذلك أن يتضمّن كل جزء بعض السياق من الجزء السابق.

قسِّم النص باستخدام splitText() لإرجاع صفيف من السلاسل مع كل جزء.

يتم التعبير عن نافذة السياق في معظم النماذج اللغوية الكبيرة على أنّها عدد من الرموز المميّزة، وليس عددًا من الأحرف. يحتوي الرمز المميّز في المتوسط على 4 أحرف، لذا يمكنك تقدير عدد الرموز المميّزة المستخدَمة في الإدخال عن طريق قسمة عدد الأحرف على 4.

في مثالنا، يضمّ الرمز chunkSize 3, 000 حرف، أي ما يعادل 750 رمزًا تقريبًا.

إنشاء ملخّصات لكلّ قسم

بعد إعداد طريقة تقسيم المحتوى، يمكنك إنشاء ملخصات لكل جزء باستخدام Summarizer API.

أنشئ مثيلًا للدالة التلخيصية باستخدام دالة create(). للحفاظ على أكبر قدر ممكن من السياق، تم ضبط مَعلمة format على plain-text، ومَعلمة type على tl;dr، ومَعلمة length على long.

بعد ذلك، يمكنك إنشاء ملخّص لكلّ قسم تم إنشاؤه باستخدام العنصر RecursiveCharacterTextSplitter وتجميع النتائج في سلسلة جديدة. لقد فصلنا كل ملخّص بسطر جديد لتحديد الملخّص بوضوح لكل جزء.

على الرغم من أنّ هذا السطر الجديد لا يهم عند تنفيذ هذه الحلقة مرة واحدة فقط، إلا أنّه مفيد لتحديد كيفية إضافة كل ملخّص إلى قيمة الرمز المميّز للملخّص النهائي. في معظم الحالات، من المفترض أن يعمل هذا الحل مع المحتوى المتوسط والطويل.

ملخّص متكرّر للملخّصات

عندما يكون لديك قدر كبير جدًا من النص، قد يكون طول الملخّص المُدمَج أكبر من مساحة السياق المتاحة، ما يؤدي بدوره إلى عدم نجاح عملية التلخيص. لحلّ هذه المشكلة، يمكنك بشكلٍ متكرّر تجميع الملخصات.

إذا كان ملخّص الملخّصات لا يزال طويلاً جدًا، يمكنك تكرار العملية. من الناحية النظرية، يمكنك تكرار العملية إلى أجل غير مسمى إلى أن تتلقّى مقطعًا بالطول المناسب.

لا نزال نجمع البيانات الأولية التي تم إنشاؤها من قِبل RecursiveCharacterTextSplitter. بعد ذلك، في دالة recursiveSummarizer()، نكرِّر عملية التلخيص استنادًا إلى طول الأحرف في المقاطع المجمَّعة. إذا تجاوز عدد أحرف الملخصات 3000، يتم تجميعها في fullSummaries. إذا لم يتم بلوغ الحدّ الأقصى، يتم حفظ الملخّص على أنّه partialSummaries.

بعد إنشاء جميع الملخّصات، تتم إضافة الملخّصات الجزئية النهائية إلى الملخّص الكامل. إذا كان هناك ملخّص واحد فقط في fullSummaries، ليس عليك إجراء مزيد من التكرار. تُرجع الدالة ملخّصًا نهائيًا. إذا كان هناك أكثر من ملخّص واحد، تكرّر الدالة وتستمر في تلخيص الملخّصات المجزّأة.

لقد اختبرنا هذا الحلّ باستخدام بروتوكول الدردشة عبر الإنترنت (IRC) RFC، الذي يتضمّن 110,030 حرفًا تشمل 17,560 كلمة. قدّمت واجهة برمجة التطبيقات Summarizer API الملخص التالي:

بروتوكول Internet Relay Chat (IRC) هو طريقة للتواصل على الإنترنت في الوقت الفعلي باستخدام الرسائل النصية. يمكنك الدردشة في القنوات أو إرسال رسائل خاصة، ويمكنك استخدام الأوامر للتحكّم في المحادثة والتفاعل مع الخادم. إنّها مثل غرفة محادثة على الإنترنت يمكنك فيها كتابة رسائل الآخرين وقراءتها على الفور.

هذا إجراء فعّال جدًا. ويتكوّن من 309 أحرف فقط.

القيود

تساعدك تقنية "ملخّص الملخصات" على العمل ضمن نافذة سياق نموذج بحجم العميل. على الرغم من أنّ هناك العديد من مزايا الذكاء الاصطناعي من جهة العميل، قد تواجه العميل ما يلي:

  • الملخّصات الأقل دقة: باستخدام الاسترجاع، قد يكون تكرار عملية التلخيص لانهائيًا، ويكون كل ملخص أبعد عن النص الأصلي. ويعني ذلك أنّه قد ينشئ النموذج ملخّصًا نهائيًا سطحيًا جدًا لدرجة أنّه لا فائدة منه.
  • أداء أبطأ: يستغرق إنشاء كل ملخّص بعض الوقت. مرة أخرى، مع وجود عدد ممكنلانهائي من الملخصات في النصوص الأكبر حجمًا، قد يستغرق هذا الأسلوب عدة دقائق لإكماله.

يتوفّر لدينا إصدار تجريبي من أداة التلخيص، ويمكنك الاطّلاع على رمز المصدر الكامل.

مشاركة ملاحظاتك

جرِّب استخدام أسلوب "ملخّص الملخصات" مع أطوال مختلفة للنصوص المُدخلة وأحجام مختلفة للاقتطاعات وأطوال مختلفة للّصق، لتحديد ما هو الأنسب لحالات الاستخدام.

يمكنك بدء اختبار Summarizer API الآن من خلال الانضمام إلى الفترة التجريبية للإصدار الأصلي ومشاركة ملاحظاتك. يمكن أن تؤثّر ملاحظاتك مباشرةً في كيفية إنشاء إصدارات المستقبلية من واجهة برمجة التطبيقات هذه وتنفيذها، وجميع واجهات برمجة التطبيقات المضمّنة للذكاء الاصطناعي.