واجهة برمجة التطبيقات Prompt API في إضافات Chrome

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

تتوفّر واجهة برمجة التطبيقات Prompt API لإضافة ميزة "طلبات البحث" في مرحلة التجربة والتقييم، ما يتيح لك إنشاء إضافات Chrome تستخدِم Gemini Nano، وهو أفضل نموذج لغوي لدينا، في المتصفّح.

هناك العديد من حالات استخدام واجهة برمجة التطبيقات Prompt API مع إضافات Chrome. وإليك بعض الأمثلة:

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

هذه ليست سوى بعض الأفكار، ولكننا متحمّسون لرؤية ابتكاراتك.

مدى التوفّر

  • يمكنك الانضمام إلى الإصدار التجريبي من واجهة برمجة التطبيقات Prompt API، الذي يعمل في الإصدارات من Chrome 131 إلى 136، لإنشاء إضافات باستخدام واجهة برمجة التطبيقات هذه. إذا كنت مبتدئًا في استخدام مراحل التجربة والتقييم، تكون هذه البرامج متاحة لفترة محدودة ومتاحة لجميع المطوّرين، وتتيح استخدام ميزات المنصة التجريبية قبل إطلاقها. يمكن للمطوّرين اختبار الإصدارات وجمع ملاحظات المستخدمين وإجراء تكرارات من أجل إطلاق الإصدار في المستقبل.
    • على الرغم من أنّه قد تكون هناك حدود لاستخدام هذه الميزات، يمكنك دمجها في الاختبار المباشر وجمع ملاحظات المستخدمين. والهدف من ذلك هو الاستفادة من هذه الملاحظات في الإصدارات المستقبلية لواجهة برمجة التطبيقات هذه، بينما نعمل على إتاحة هذه الميزة على نطاق أوسع.
  • ننصحك بالانضمام إلى برنامج "المعاينة المبكرة" لإلقاء نظرة مسبقة على واجهات برمجة التطبيقات المدمَجة الجديدة في الذكاء الاصطناعي (AI) والوصول إلى المناقشة في قائمتنا البريدية.

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

لاستخدام Prompt API في إضافات Chrome، أضِف إذن "aiLanguageModelOriginTrial" إلى ملف manifest.json وفقًا للمقتطف التالي، بالإضافة إلى أي أذونات أخرى قد تحتاجها إضافتك.

لتسجيل إضافة Chrome في الفترة التجريبية للمصدر، استخدِم عنوان URL chrome-extension://YOUR_EXTENSION_ID كـ مصدر الويب. على سبيل المثال، chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk.

الاشتراك في الإصدار التجريبي من Chrome Origin

يتم إنشاء معرّف الإضافة ديناميكيًا، ولكن بعد تحديد معرّف، يمكنك فرض بقاء المعرّف ثابتًا من خلال إضافة سمة key إلى البيان.

بعد الاشتراك في الفترة التجريبية الأصلية، ستتلقّى رمز ترويجي تم إنشاؤه، وعليك تمريره في صفيف كقيمة لحقل trial_tokens في البيان. اطّلِع على المقتطف للحصول على مثال.

{
  "permissions": ["aiLanguageModelOriginTrial"],
  "trial_tokens": ["GENERATED_TOKEN"],
}

استخدام Prompt API

بعد طلب الإذن لاستخدام واجهة برمجة التطبيقات Prompt API، يمكنك إنشاء إضافتك. تتوفر دالتان جديدتان للإضافة في مساحة الاسم chrome.aiOriginTrial.languageModel:

  • capabilities() للاطّلاع على الميزات التي يمكن للنموذج تنفيذها وما إذا كان متاحًا.
  • create() لبدء جلسة نموذج لغوي.

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

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

لتحديد ما إذا كان النموذج جاهزًا للاستخدام، استخدِم الدالة غير المتزامنة chrome.aiOriginTrial.languageModel.capabilities(). وتعرض كائن AILanguageModelCapabilities مع الحقل available الذي يمكن أن يأخذ ثلاث قيم محتملة:

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

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

const session = await chrome.aiOriginTrial.languageModel.create({
  monitor(m) {
    m.addEventListener("downloadprogress", (e) => {
      console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
    });
  },
});

إمكانات النموذج

توضِّح لك الدالة capabilities() أيضًا إمكانات النموذج اللغوي. بالإضافة إلى available، يحتوي عنصر AILanguageModelCapabilities الناتج أيضًا على الحقول التالية:

await chrome.aiOriginTrial.languageModel.capabilities();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}

إنشاء جلسة

بعد التأكّد من إمكانية تشغيل Prompt API، يمكنك إنشاء جلسة باستخدام الدالة create()، ما يتيح لك بعد ذلك توجيه طلب إلى النموذج باستخدام الدالة prompt() أو الدالةpromptStreaming().

خيارات الجلسة

يمكن تخصيص كل جلسة باستخدام topK وtemperature باستخدام عنصر options اختياري. يتم عرض القيم التلقائية لهذه المَعلمات من chrome.aiOriginTrial.languageModel.capabilities().

const capabilities = await chrome.aiOriginTrial.languageModel.capabilities();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await chrome.aiOriginTrial.languageModel.create({
  temperature: Math.max(capabilities.defaultTemperature * 1.2, 2.0),
  topK: capabilities.defaultTopK,
});

يقبل عنصر الخيارات الاختيارية في الدالة create() أيضًا حقل signal، ما يتيح لك تمرير AbortSignal لإلغاء الجلسة.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const session = await chrome.aiOriginTrial.languageModel.create({
  signal: controller.signal,
})
طلبات النظام

من خلال طلبات النظام، يمكنك تقديم بعض السياق للنموذج اللغوي.

const session = await chrome.aiOriginTrial.languageModel.create({
  systemPrompt: 'You are a helpful and friendly assistant.',
});
await session.prompt('What is the capital of Italy?');
// 'The capital of Italy is Rome.'

الطلبات الأولية

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

const session = await chrome.aiOriginTrial.languageModel.create({
  initialPrompts: [
    { role: 'system', content: 'You are a helpful and friendly assistant.' },
    { role: 'user', content: 'What is the capital of Italy?' },
    { role: 'assistant', content: 'The capital of Italy is Rome.'},
    { role: 'user', content: 'What language is spoken there?' },
    { role: 'assistant', content: 'The official language of Italy is Italian. [...]' }
  ]
});

معلومات الجلسة

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

console.log(`${session.tokensSoFar}/${session.maxTokens}
(${session.tokensLeft} left)`);

الاحتفاظ بالجلسة

تتعقب كل جلسة سياق المحادثة. يتمّ أخذ التفاعلات السابقة في الاعتبار للتفاعلات المستقبلية إلى أن تمتلئ نافذة السياق للجلسة.

const session = await chrome.aiOriginTrial.languageModel.create({
  systemPrompt: 'You are a friendly, helpful assistant specialized in clothing choices.'
});

const result1 = await session.prompt(
  'What should I wear today? It is sunny and I am unsure between a t-shirt and a polo.'
);
console.log(result1);

const result2 = await session.prompt(
  'That sounds great, but oh no, it is actually going to rain! New advice?'
);
console.log(result2);

نسخ جلسة

للحفاظ على الموارد، يمكنك استنساخ جلسة حالية باستخدام الدالة clone(). تتم إعادة ضبط سياق المحادثة، ولكن ستظل المطالبة الأولية أو طلبات النظام سليمة. تأخذ الدالة clone() عنصر options اختياريًا يحتوي على حقل signal، ما يتيح لك تمرير AbortSignal لإتلاف الجلسة التي تم نسخها.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const clonedSession = await session.clone({
  signal: controller.signal,
});

توجيه طلب إلى النموذج

يمكنك إرسال طلب إلى النموذج من خلال الدوال prompt() أو promptStreaming().

نتيجة لا يتم بثها

إذا كنت تتوقع نتيجة قصيرة، يمكنك استخدام الدالة prompt() التي تعرض الرد بمجرد إتاحته.

// Start by checking if it's possible to create a session based on the
// availability of the model, and the characteristics of the device.
const {available, defaultTemperature, defaultTopK, maxTopK } =
  await chrome.aiOriginTrial.languageModel.capabilities();

if (available !== 'no') {
  const session = await chrome.aiOriginTrial.languageModel.create();

  // Prompt the model and wait for the whole result to come back.
  const result = await session.prompt('Write me a poem!');
  console.log(result);
}

ناتج البث

إذا كنت تتوقّع استجابة أطول، يجب استخدام الدالة promptStreaming() التي تتيح لك عرض نتائج جزئية عند ورودها من النموذج.

const {available, defaultTemperature, defaultTopK, maxTopK } =
  await chrome.aiOriginTrial.languageModel.capabilities();

if (available !== 'no') {
  const session = await chrome.aiOriginTrial.languageModel.create();

  // Prompt the model and stream the result:
  const stream = session.promptStreaming('Write me an extra-long poem!');
  for await (const chunk of stream) {
    console.log(chunk);
  }
}

تُعرِض promptStreaming() ReadableStream تكون أجزاؤه متعاقبة تعتمد على بعضها. على سبيل المثال، "Hello," و"Hello world," و"Hello world I am," "Hello world I am an AI.". هذا ليس السلوك المقصود. وننوي المواءمة مع واجهات برمجة تطبيقات البث الأخرى على المنصة، حيث تكون الأجزاء متتالية وتشكل بثًا واحدًا طويلاً. وهذا يعني أنّ الإخراج سيكون تسلسلًا مثل "Hello" و" world" و" I am" و" an AI".

في الوقت الحالي، لتحقيق السلوك المقصود، يمكنك تنفيذ ما يلي: تعمل هذه الميزة مع كلّ من السلوك العادي وغير العادي.

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);

إيقاف عرض طلب

يقبل كلّ من prompt() وpromptStreaming() مَعلمة ثانية اختيارية باستخدام حقل signal، ما يتيح لك إيقاف تشغيل الطلبات.

const controller = new AbortController();
stopButton.onclick = () => controller.abort();

const result = await session.prompt(
  'Write me a poem!',
  { signal: controller.signal }
);

إنهاء جلسة

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

await session.prompt(
  'You are a friendly, helpful assistant specialized in clothing choices.'
);

session.destroy();

// The promise is rejected with an error explaining that
// the session is destroyed.
await session.prompt(
  'What should I wear today? It is sunny and I am unsure
  between a t-shirt and a polo.'
);

عرض توضيحي

لاختبار واجهة برمجة التطبيقات Prompt API في إضافات Chrome، يُرجى تثبيت إضافة العرض التوضيحي. يتوفّر رمز المصدر الخاص بالإضافة على GitHub.

واجهة تجريبية لواجهة Prompt API

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

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