تتيح واجهة Summarizer API لمطوّري تطبيقات الويب تقديم ميزة تلخيص النصوص المستنِدة إلى الذكاء الاصطناعي على الجهاز مباشرةً داخل المتصفّح باستخدام Gemini Nano في Chrome أو Phi في Edge. تتيح واجهة برمجة التطبيقات هذه استخدام تنسيقات مختلفة، بما في ذلك النقاط الرئيسية والعناوين والنصوص المختصرة (TL;DR)، وتعمل بالكامل على الجهاز فقط لضمان خصوصية المستخدم.
البدء
تتوفّر واجهة Summarizer API اعتبارًا من الإصدار 138 من Chrome وEdge. ويتطلّب ذلك تنزيل نموذج Gemini Nano أو Phi (على التوالي) لمرة واحدة.
متطلبات الأجهزة والبرامج
- نظام التشغيل: Windows 10/11 أو macOS 13 والإصدارات الأحدث أو Linux أو ChromeOS (Chromebook Plus)
- مساحة التخزين: مساحة خالية تبلغ 22 غيغابايت لوحدة تخزين الملف الشخصي
- ذاكرة الوصول العشوائي/وحدة المعالجة المركزية: ذاكرة وصول عشوائي بسعة 16 غيغابايت أو أكثر و4 نوى أو أكثر لوحدة المعالجة المركزية
- VRAM: 4 غيغابايت أو أكثر (في حال استخدام وحدة معالجة الرسومات)
تنزيل النموذج ومدى توفّره
تحقَّق مما إذا كان النموذج جاهزًا أو يحتاج إلى تنزيل أو غير متاح.
تمرير الخيارات الإلزامية: يجب تمرير عنصر خيارات الإعداد نفسه إلى كلّ من Summarizer.availability(options) وSummarizer.create(options). يجب عدم استخدام واجهة برمجة التطبيقات window.ai.summarizer المتوقّفة نهائيًا.
مراقبة مستوى التقدّم الإلزامية: يجب تنفيذ أداة لمراقبة مستوى تقدّم عملية تنزيل النموذج من خلال توفير دالة رد اتصال monitor(m) إلى Summarizer.create() وإضافة مستمع لحدث downloadprogress.
متطلبات الإجراء التفاعلي من المستخدم: عندما تكون قيمة availability هي 'downloadable' أو 'downloading'، يتطلّب بدء عملية التنزيل الفعلية من خلال Summarizer.create() إجراءً تفاعليًا من المستخدم (مثل نقرة من المستخدم). يجب وضع طلب الإنشاء داخل متتبِّع الأحداث بدلاً من طلبه بدون شروط عند تحميل الصفحة لمنع حدوث NotAllowedError.
const options = {
type: 'key-points',
format: 'plain-text',
length: 'medium'
};
const availability = await Summarizer.availability(options);
if (availability === 'available') {
const summarizer = await Summarizer.create(options);
// Ready to use immediately
} else if (availability === 'downloadable') {
// A user gesture is strictly required to start the download
document.getElementById('start-download-btn').addEventListener('click', async () => {
const summarizer = await Summarizer.create({
...options,
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${Math.round((e.loaded / e.total) * 100)}%`);
});
},
});
});
}
وظائف واجهة برمجة التطبيقات وإعداداتها
عند إنشاء أداة تلخيص من خلال Summarizer.create(options)، يمكنك تخصيص
النتيجة:
| المَعلمة | الخيارات | الوصف |
|---|---|---|
type |
key-points، وtldr، وteaser، وheadline |
تحدّد استراتيجية الملخّص. |
format |
markdown، plain-text |
أسلوب بناء الجملة في الناتج |
length |
short، medium، long |
الطول المستهدَف (مثلاً، جملة واحدة مقابل 5 جمل) |
preference |
auto، speed، capability |
يوازن بين وقت الاستجابة والجودة. |
مثال على التهيئة
const options = {
sharedContext: 'This is a scientific article',
type: 'key-points',
format: 'markdown',
length: 'medium',
};
if (navigator.userActivation.isActive) {
const summarizer = await Summarizer.create(options);
}
دعم اللغة
يمكنك تحديد اللغات المتوقّعة لضمان قدرة المتصفّح على معالجة طلب التلخيص المحدّد.
const summarizer = await Summarizer.create({
type: 'key-points',
expectedInputLanguages: ['en', 'ja'],
outputLanguage: 'es',
});
طرق التلخيص
1. التلخيص المجمّع
يعالج النص بأكمله دفعة واحدة ويعرض النتيجة.
const longText = document.querySelector('article').innerText;
const summary = await summarizer.summarize(longText, {
context: 'This article is intended for a tech-savvy audience.',
});
console.log(summary);
2. تلخيص البث
تعرض النتائج في الوقت الفعلي أثناء إنشاء النموذج لها، ما يوفر واجهة مستخدم أكثر استجابة.
const stream = summarizer.summarizeStreaming(longText);
for await (const chunk of stream) {
console.log(chunk);
}
الأمان والأذونات
- خصوصية البيانات: لا يتم إرسال أي بيانات إلى Google، بل تتم معالجتها على الجهاز المحلي.
متعدّد المصادر: يمكن منح إذن الوصول إلى إطارات iframe باستخدام سياسة الأذونات.
<iframe src="https://example.com/" allow="summarizer"></iframe>Web Workers: غير متاحة حاليًا.
استراتيجية الإجراءات الاحتياطية
قبل بدء واجهة برمجة التطبيقات Summarizer أو الاستعلام عن مدى توفّرها، تأكَّد من أنّ المتصفّح يتيح استخدامها:
if ('Summarizer' in self) {
// The Summarizer API is supported.
} else {
// Execute fallback strategy
}
إذا كانت واجهة برمجة التطبيقات Summarizer غير متاحة أو إذا عرضت عمليات التحقّق من التوفّر القيمة 'unavailable'، يجب الرجوع إلى الحالة السابقة بسلاسة.
الخيارات المقترَحة:
- الاستعانة بواجهة برمجة تطبيقات عن بُعد: يمكنك توجيه طلب الاستخلاص إلى نقطة نهاية خادم أو واجهة برمجة تطبيقات عن بُعد (مثل Vertex AI Gemini API) ليتمكّن المستخدمون من الحصول على الملخّصات.
- التكيّف مع الإصدارات الأقدم: يمكنك إيقاف عناصر التحكّم في التلخيص في واجهة المستخدم بشكل مرئي، أو إخفاء الزر أثناء عرض رسالة سهلة الفهم (مثل
"Local summarization is currently unsupported in this browser"). لا تسمح للتفاعل بتشغيل استثناءات عامة غير معالجة في وقت التشغيل. - الاحتياطي Polyfill: يمكنك استخدام polyfill التي يديرها المنتدى، مثل
built-in-ai-task-apis-polyfillsأوprompt-api-polyfill، لمحاكاة واجهة برمجة التطبيقات باستخدام الخدمات عن بُعد مع النماذج في السحابة الإلكترونية أو الاستنتاج على الجهاز فقط باستخدام النماذج المحلية.
الآثار المترتبة على الخصوصية والتكلفة: من المحتمل أن تنقل هذه الرموز البرمجية الطلبات إلى خوادم بعيدة (مثل Gemini API عبر السحابة الإلكترونية). يؤدي ذلك إلى إلغاء ضمانات الخصوصية على الجهاز فقط التي توفّرها واجهات برمجة التطبيقات المضمّنة المستنِدة إلى الذكاء الاصطناعي، وسيؤدي إلى تحمُّل تكاليف استخدام واجهة برمجة التطبيقات من جهة الخادم.