Prompt API

تاريخ النشر: 20 أيار (مايو) 2025

الشرح الويب الإضافات حالة Chrome النيّة بالشراء
Github تجريبية في EPP الإصدار التجريبي من Chrome الإصدار التجريبي من Chrome 137 العرض الرغبة في إجراء تجربة

باستخدام Prompt API، يمكنك إرسال طلبات بلغة طبيعية إلى Gemini Nano في المتصفّح.

هناك العديد من الطرق لاستخدام Prompt API. في تطبيق ويب أو موقع إلكتروني، يمكنك إنشاء ما يلي:

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

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

مراجعة متطلبات الأجهزة

لا تعمل واجهات برمجة التطبيقات Language Detector وTranslator API إلا على أجهزة الكمبيوتر المكتبي في Chrome.

تعمل واجهات برمجة التطبيقات Prompt API وSummarizer API وWriter API وRewriter API في Chrome عند استيفاء الشروط التالية:

  • نظام التشغيل: Windows 10 أو 11 أو الإصدار 13 من نظام التشغيل macOS والإصدارات الأحدث (Ventura والإصدارات الأحدث) أو Linux لا تتوفّر واجهات برمجة التطبيقات التي توفّرها Gemini Nano لإصدارات Chrome على Android وiOS وChromeOS.
  • مساحة التخزين: 22 غيغابايت على الأقل في وحدة التخزين التي تحتوي على ملفك الشخصي على Chrome
  • وحدة معالجة الرسومات: يجب أن تكون ذاكرة الوصول العشوائي للفيديو (VRAM) أكبر من 4 غيغابايت.
  • الشبكة: بيانات غير محدودة أو اتصال غير محدود

تسري هذه المتطلبات عليك في عملية التطوير وعلى المستخدمين الذين يعملون مع الميزات التي تنشئها.

استخدام Prompt API

تتوفّر لك دالتَان في مساحة الاسم LanguageModel:

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

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

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

لتحديد ما إذا كان النموذج جاهزًا للاستخدام، استخدِم الدالة غير المتزامنة LanguageModel.availability(). من المفترض أن يعرض هذا الإجراء أحد الردّين التاليين:

  • يشير الرمز "unavailable" إلى أنّ عملية التنفيذ لا تتيح الخيارات المطلوبة أو لا تتيح طلب نموذج لغوي على الإطلاق.
  • يشير الرمز "downloadable" إلى أنّ عملية التنفيذ تتيح الخيارات المطلوبة، ولكنّها ستحتاج إلى تنزيل محتوى (مثل نموذج اللغة نفسه أو عملية تحسين) قبل أن تتمكّن من إنشاء جلسة باستخدام هذه الخيارات.
  • يشير الرمز "downloading" إلى أنّ عملية التنفيذ تتيح الخيارات المطلوبة، ولكن يجب إنهاء عملية تنزيل جارية قبل أن تتمكّن من إنشاء جلسة باستخدام هذه الخيارات.
  • يشير الرمز "available" إلى أنّ عملية التنفيذ تتيح الخيارات المطلوبة بدون الحاجة إلى تنزيل أي تطبيقات جديدة.

لبدء تنزيل النموذج وإنشاء جلسة النموذج اللغوي، استخدِم الدالة LanguageModel.availability() غير المتزامنة. إذا كان الردّ على availability() هو 'downloadable'، من أفضل الممارسات الاستماع إلى مستوى تقدّم عملية التنزيل. بهذه الطريقة، يمكنك إبلاغ المستخدم في حال استغراق عملية التحميل لبعض الوقت.

const session = await LanguageModel.create({
  monitor(m) {
    m.addEventListener("downloadprogress", (e) => {
      console.log(`Downloaded ${e.loaded * 100}%`);
    });
  },
});

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

تُعلمك الدالة params() بالمَعلمات لنموذج اللغة. يحتوي العنصر على الحقول التالية:

  • defaultTopK: القيمة التلقائية للأفضل K (القيمة التلقائية: 3).
  • maxTopK: الحد الأقصى لأفضل K قيمة (8).
  • defaultTemperature: درجة الحرارة التلقائية (1.0): يجب أن تتراوح قيمة درجة الحرارة بين 0.0 و2.0.
  • maxTemperature: الحد الأقصى لدرجة الحرارة
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 8, defaultTemperature: 1, maxTemperature: 2}

إنشاء جلسة

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

تخصيص جلستك

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

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

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

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

const session = await LanguageModel.create({
  signal: controller.signal,
})

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

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

const session = await 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.inputUsage}/${session.inputQuota}`);

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

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

const session = await LanguageModel.create({
  initialPrompts: [{
    role: "system",
    content: "You are a friendly, helpful assistant specialized in clothing choices."
  }]
});

const result1 = await session.prompt(
  "What should I wear today? It is sunny. 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(). تتم إعادة ضبط سياق المحادثة، ولكن تظل المطالبة الأولية intact سليمة. تأخذ الدالة clone() عنصر خيارات اختياريًا يحتوي على حقل 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 {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
  await LanguageModel.params();

const available = await LanguageModel.availability();

if (available !== 'unavailable') {
  const session = await 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() التي تتيح لك عرض نتائج جزئية عند ورودها من النموذج. تعرض الدالة promptStreaming() ReadableStream.

const {defaultTemperature, maxTemperature, defaultTopK, maxTopK } =
  await LanguageModel.params();

const available = await LanguageModel.availability();
if (available !== 'unavailable') {
  const session = await 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);
  }
}

إيقاف عرض طلب

يقبل كلّ من 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 إدخال الصوت والصور من الإصدار 138 من Chrome Canary لإجراء التجارب على الجهاز فقط. تعرض واجهة برمجة التطبيقات ناتجًا نصيًا.

باستخدام هذه الإمكانات، يمكنك إجراء ما يلي:

  • السماح للمستخدمين بتحويل الرسائل الصوتية المُرسَلة في تطبيق محادثة إلى نص
  • يُستخدَم هذا الحقل لوصف صورة تم تحميلها إلى موقعك الإلكتروني لاستخدامها في الترجمة أو النص البديل.
const session = await LanguageModel.create({
  // { type: "text" } is not necessary to include explicitly, unless
  // you also want to include expected input languages for text.
  expectedInputs: [
    { type: "audio" },
    { type: "image" }
  ]
});

const referenceImage = await (await fetch("/reference-image.jpeg")).blob();
const userDrawnImage = document.querySelector("canvas");

const response1 = await session.prompt([{
  role: "user",
  content: [
    { type: "text", value: "Give a helpful artistic critique of how well the second image matches the first:" },
    { type: "image", value: referenceImage },
    { type: "image", value: userDrawnImage }
  ]
}]);

console.log(response1);

const audioBlob = await captureMicrophoneInput({ seconds: 10 });

const response2 = await session.prompt([{
  role: "user",
  content: [
    { type: "text", value: "My response to your critique:" },
    { type: "audio", value: audioBlob }
  ]
}]);

العروض التوضيحية للوسائط المتعددة

يمكنك الاطّلاع على العرض التجريبي لطلب الصوت في Mediarecorder لاستخدام Prompt API مع إدخال الصوت والعرض التجريبي لطلب صورة اللوحة لاستخدام Prompt API مع إدخال الصورة.

الملاحظات

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

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

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