التلخيص في Chrome باستخدام الذكاء الاصطناعي المضمّن

تاريخ النشر: 11 تشرين الثاني (نوفمبر) 2024

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

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

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

مدى التوفّر

الاشتراك في الفترة التجريبية للإصدار الأصلي

لبدء استخدام Summarizer API، اتّبِع الخطوات التالية:

  1. الموافقة على سياسة الاستخدامات المحظورة للذكاء الاصطناعي التوليدي من Google
  2. انتقِل إلى مرحلة التجربة والتقييم في Summarizer API.
  3. انقر على تسجيل واملأ النموذج.
    • في حقل مصدر الويب، أدخِل المصدر أو معرّف الإضافة، chrome-extension://YOUR_EXTENSION_ID.
  4. لإرسال الإضافة، انقر على تسجيل.
  5. انسخ الرمز المميّز المقدَّم وأضِفه إلى كل صفحة ويب على مصدرك أوملف الإضافة الذي تريد تفعيل الفترة التجريبية عليه.
  6. ابدأ باستخدام Summarizer API.

مزيد من المعلومات حول كيفية بدء استخدام ميزة "الإصدارات التجريبية من المصدر"

القيود خلال الفترة التجريبية للموقع المصدر

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

إضافة إمكانية استخدام localhost

للوصول إلى Summarizer API على localhost أثناء مرحلة التجربة والتقييم، يجب تثبيت Chrome Canary. بعد ذلك، اتّبِع الخطوات التالية:

  1. افتح Chrome Canary على أحد الأنظمة الأساسية التالية: Windows أو Mac أو Linux.
  2. الانتقال إلى chrome://flags/#summarization-api-for-gemini-nano
  3. اختَر مفعّل.
  4. انقر على إعادة التشغيل أو أعِد تشغيل Chrome.

استخدام واجهة برمجة التطبيقات Summarizer API

أولاً، عليك تنفيذ ميزة رصد المحتوى لمعرفة ما إذا كان المتصفّح متوافقًا مع واجهة برمجة التطبيقات Summarizer API.

if ('ai' in self && 'summarizer' in self.ai) {
  // The Summarizer API is supported.
}

تنزيل النموذج

تستخدِم واجهة برمجة التطبيقات Summarizer API نموذجًا فعّالاً للذكاء الاصطناعي تم تدريبه لإنشاء ملخّصات عالية الجودة. على الرغم من أنّ واجهة برمجة التطبيقات مدمجة في Chrome، يتم تنزيل النموذج بشكل منفصل في المرة الأولى التي يستخدم فيها موقع إلكتروني واجهة برمجة التطبيقات.

لتحديد ما إذا كان النموذج جاهزًا للاستخدام، استخدِم الدالة غير المتزامنة ai.summarizer.capabilities(). ويعرض الإجراء كائنًا AISummarizerCapabilities يحتوي على حقل available يمكنه استخدام ثلاث قيمات محتملة:

  • no: يتيح المتصفّح الحالي استخدام واجهة برمجة التطبيقات Summarizer API، ولكن لا يمكن استخدامها في الوقت الحالي. وقد يرجع ذلك لعدد من الأسباب، مثل عدم توفّر مساحة كافية على القرص لتنزيل النموذج.
  • readily: يتيح المتصفّح الحالي استخدام واجهة برمجة التطبيقات Summarizer API، ويمكن استخدامها على الفور.
  • after-download: يتيح المتصفّح الحالي استخدام واجهة برمجة التطبيقات Summarizer API، ولكن عليه أولاً تنزيل النموذج.

لبدء تنزيل النموذج وإنشاء التلخيص، استخدِم الدالة غير المتزامنة ai.summarizer.create(). إذا كان الردّ على capabilities() هو after-download، من أفضل الممارسات الاستماع إلى مستوى التقدّم في عملية التنزيل. بهذه الطريقة، يمكنك إبلاغ المستخدم في حال استغراق عملية التنزيل بعض الوقت.

const summarizer = await ai.summarizer.create({
  monitor(m) {
    m.addEventListener('downloadprogress', (e) => {
      console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
    });
  }
});

وظائف واجهة برمجة التطبيقات

تتيح لك الدالة create() ضبط عنصر تلخيصي جديد لتلبية احتياجاتك. تأخذ هذه الدالة كائن options اختياريًا بالمَعلمات التالية:

  • sharedContext: سياق مشترَك إضافي يمكن أن يساعد أداة التلخيص
  • type: نوع التلخيص، مع القيم المسموح بها key-points (تلقائي) وtl;dr وteaser وheadline.
  • format: تنسيق الملخص، مع القيم المسموح بها markdown (تلقائي) وplain-text
  • length: مدة التلخيص، مع القيم المسموح بها short medium (التلقائية) وlong. تختلف معاني هذه الأطوال استنادًا إلى type المطلوبة. على سبيل المثال، في عملية التنفيذ في Chrome، يتألّف الملخّص المختصر عن النقاط الرئيسية من ثلاث نقاط تعداد، ويحتوي الملخّص المختصر على سوى جملة واحدة. أمّا الملخّص الطويل عن النقاط الرئيسية، فيحتوي على سبع نقاط تعداد، ويحتوي الملخّص الطويل على فقرة.

يوضّح المثال التالي كيفية إعداد أداة التلخيص.

const options = {
  sharedContext: 'This is a scientific article',
  type: 'key-points',
  format: 'markdown',
  length: 'medium',
};

const available = (await self.ai.summarizer.capabilities()).available;
let summarizer;
if (available === 'no') {
  // The Summarizer API isn't usable.
  return;
}
if (available === 'readily') {
  // The Summarizer API can be used immediately .
  summarizer = await self.ai.summarizer.create(options);
} else {
  // The Summarizer API can be used after the model is downloaded.
  summarizer = await self.ai.summarizer.create(options);
  summarizer.addEventListener('downloadprogress', (e) => {
    console.log(e.loaded, e.total);
  });
  await summarizer.ready;
}

تشغيل التلخيص

هناك طريقتان لتشغيل أداة التلخيص: البث المباشر وغير المباشر.

تلخيص المحتوى غير القابل للبث

من خلال ميزة التلخيص غير المباشر، يعالج النموذج الإدخال ككل ثم ينتج النتيجة.

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

const longText = document.querySelector('article').innerHTML;
const summary = await summarizer.summarize(longText, {
  context: 'This article is intended for a tech-savvy audience.',
});

تلخيص البث

تقدّم ميزة "تلخيص البث" النتائج في الوقت الفعلي. يتم تعديل الإخراج باستمرار عند إضافة الإدخال وتعديله.

للحصول على ملخّص للبث، يمكنك استدعاء دالة summarizeStreaming() المخصّصة للملخّص. بعد ذلك، كرِّر المقاطع المتاحة من النص في البث.

let result = '';
let previousChunk = '';
for await (const chunk of stream) {
  const newChunk = chunk.startsWith(previousChunk)
      ? chunk.slice(previousChunk.length) : chunk;
  console.log(newChunk);
  result += newChunk;
  previousChunk = chunk;
}
console.log(result);

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

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

let result = '';
let previousLength = 0;
for await (const segment of stream) {
  const newContent = segment.slice(previousLength);
  console.log(newContent);
  previousLength = segment.length;  
  result += newContent;
}
console.log(result);

عرض توضيحي

يمكنك تجربة Summarizer API في Summarizer API Playground.

الجهد المبذول لتوحيد المقاييس

نحن نعمل على توحيد Summarizer API لضمان توافقها مع جميع المتصفّحات.

تلقّى اقتراحنا لواجهة برمجة التطبيقات دعمًا من المجتمع، وتم نقله إلى مجموعة منتدى W3C Web Incubator لإجراء مزيد من المناقشة. طلب فريق Chrome ملاحظات من مجموعة الهندسة المعمارية التقنية في W3C، وسأل Mozilla وWebKit عن مواقفهما بشأن المعايير.

المشاركة وتقديم الملاحظات

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