تاريخ النشر: 20 مايو 2025، تاريخ آخر تعديل: 26 أغسطس 2026
| فيديو توضيحي | الويب | الإضافات | حالة Chrome | النيّة بالشراء |
|---|---|---|---|---|
| Github | العرض | Intent to Ship | ||
| Github | العرض | نية إجراء تجربة |
باستخدام Prompt API، يمكنك إرسال طلبات باللغة الطبيعية إلى النموذج الأساسي في Chrome.
يمكنك استخدام Prompt API بطرق عديدة. على سبيل المثال، يمكنك إنشاء ما يلي:
- البحث المستند إلى الذكاء الاصطناعي: الإجابة عن الأسئلة استنادًا إلى محتوى صفحة ويب
- خلاصات الأخبار المخصّصة: يمكنك إنشاء خلاصة تصنّف المقالات ديناميكيًا حسب الفئات وتتيح للمستخدمين فلترة المحتوى.
- فلاتر المحتوى المخصّصة تحليل المقالات الإخبارية وتغبيش المحتوى أو إخفاؤه تلقائيًا استنادًا إلى المواضيع التي يحدّدها المستخدم
- إنشاء أحداث في التقويم تطوير إضافة Chrome تستخرج تلقائيًا تفاصيل الأحداث من صفحات الويب، ما يتيح للمستخدمين إنشاء إدخالات في التقويم ببضع خطوات فقط
- استخراج جهات الاتصال بسلاسة: يمكنك إنشاء إضافة تستخرج معلومات الاتصال من المواقع الإلكترونية، ما يسهّل على المستخدمين التواصل مع نشاط تجاري أو إضافة تفاصيل إلى قائمة جهات الاتصال.
هذه مجرد بعض الاحتمالات، ونحن متحمّسون لرؤية ابتكاراتك.
مراجعة متطلبات الأجهزة
تتوفّر المتطلبات التالية للمطوّرين والمستخدمين الذين يشغّلون الميزات باستخدام واجهات برمجة التطبيقات هذه في Chrome. قد تتطلّب المتصفّحات الأخرى متطلبات تشغيل مختلفة.
تعمل واجهتا برمجة التطبيقات Language Detector وTranslator في متصفّح Chrome على أجهزة الكمبيوتر المكتبي. لا تعمل واجهات برمجة التطبيقات هذه على الأجهزة الجوّالة.
تعمل واجهات Prompt API وSummarizer API وWriter API وRewriter API وProofreader API في Chrome عند استيفاء الشروط التالية:
- نظام التشغيل: Windows 10 أو 11 أو macOS 13 (Ventura والإصدارات الأحدث) أو Linux أو ChromeOS (الإصدار 16389.0.0 والإصدارات الأحدث) على أجهزة Chromebook Plus لا تتوافق واجهات برمجة التطبيقات التي تستخدم النماذج الأساسية بعد مع Chrome لنظام Android وiOS وChromeOS على الأجهزة غير Chromebook Plus.
- مساحة التخزين: يجب توفّر مساحة خالية لا تقل عن 22 غيغابايت على وحدة التخزين التي تحتوي على ملفك الشخصي على Chrome.
- وحدة معالجة الرسومات أو وحدة المعالجة المركزية: يمكن تشغيل النماذج المضمّنة باستخدام وحدة معالجة الرسومات أو وحدة المعالجة المركزية.
- وحدة معالجة الرسومات (GPU): يجب أن تكون ذاكرة الوصول العشوائي للفيديو (VRAM) أكبر من 4 غيغابايت.
- وحدة المعالجة المركزية (CPU): ذاكرة وصول عشوائي (RAM) بسعة 16 غيغابايت أو أكثر و4 نوى لوحدة المعالجة المركزية أو أكثر
- ملاحظة: تتطلّب واجهة برمجة التطبيقات Prompt API التي تستخدم الإدخال الصوتي وحدة معالجة رسومات.
- الشبكة: بيانات غير محدودة أو اتصال لا تفرض تكلفة استخدامه.
قد يختلف حجم Gemini Nano الدقيق مع تحديث المتصفّح للنموذج. لمعرفة الحجم الحالي، انتقِل إلى chrome://on-device-internals.
استخدام Prompt API
تستخدم واجهة برمجة التطبيقات Prompt API نموذج Gemini Nano في Chrome. على الرغم من أنّ واجهة برمجة التطبيقات مضمّنة في Chrome، يتم تنزيل النموذج بشكل منفصل في المرة الأولى التي يستخدم فيها مصدر واجهة برمجة التطبيقات.
لتحديد ما إذا كان النموذج جاهزًا للاستخدام، استدعِ الدالة
LanguageModel.availability().
const availability = await LanguageModel.availability({
// The same options in `prompt()` or `promptStreaming()`
});
لتشغيل عملية التنزيل وإنشاء نموذج اللغة، تحقَّق من تفعيل المستخدم. بعد ذلك، استدعِ الدالة create().
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
إذا كان الردّ على availability() هو downloading، استمع إلى
مستوى التقدّم في عملية التنزيل وأبلِغ المستخدم،
لأنّ عملية التنزيل قد تستغرق بعض الوقت.
إنشاء جلسة
بعد أن تصبح واجهة برمجة التطبيقات Prompt API جاهزة للتشغيل، يمكنك إنشاء جلسة باستخدام الدالة create().
const session = await LanguageModel.create();
يتضمّن عنصر الخيارات الاختيارية للدالة create() الحقل signal الذي يتيح لك تمرير AbortSignal لإيقاف الجلسة.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const session = await LanguageModel.create({
signal: controller.signal,
});
مَعلَمات اختيار العيّنات
{: #sampling_parameters }
يتيح لك التحكّم في أخذ العيّنات ضبط مدى قابلية توقّع ردود النموذج (تحديدها) أو إبداعها (تنوّعها). يختلف مدى توفّر مَعلمات أخذ العيّنات بين النظام الأساسي للويب وإضافات Chrome:
- الويب (الإعداد التلقائي): بشكلٍ تلقائي، لا تعرض واجهة برمجة التطبيقات Prompt API على الويب مَعلمات أخذ العيّنات لأنّ الإعدادات الرقمية، مثل
temperatureوtopK، لا يتم تحويلها بشكلٍ متّسق على مستوى النماذج والبُنى الأساسية المختلفة. - الويب (التجربة الأصلية): تتيح التجربة الأصلية الخيار
samplingModeالذي يستخدم قيم تعداد وصفية بدلاً من الأرقام الأولية لتعديل إمكانية توقّع النتائج. - إضافات Chrome: تتوافق هذه الإضافات مع المَعلمات الرقمية القديمة (
topKوtemperature) وطريقةLanguageModel.params().
وضع جمع العيّنات على الويب (مرحلة التجربة والتقييم)
عند المشاركة في تجربة مَعلَمات اختيار العيّنات، يمكنك تمرير الخيار samplingMode إلى LanguageModel.create() (أو LanguageModel.availability()).
قيم تعداد الخيارات samplingMode المسموح بها هي:
-
"most-predictable": أعلى درجة من الحتمية والقدرة على التوقّع -
"predictable": نتائج أكثر قابلية للتوقّع مع اختلاف بسيط -
"slightly-predictable": ناتج يمكن توقّعه إلى حدّ ما "balanced": توازن بين القدرة على التوقّع والإبداع (السلوك التلقائي المعتاد)."slightly-creative": نتائج متنوّعة وإبداعية قليلاً-
"creative": ناتج إبداعي ومتنوّع -
"most-creative": الحد الأقصى من التنوّع والإبداع
// Available on the web with the Sampling Parameters Origin Trial enabled
const session = await LanguageModel.create({
samplingMode: 'creative',
});
// The configured sampling mode is exposed on the session instance
console.log(session.samplingMode);
// "creative"
مَعلَمات اختيار العيّنات لإضافات Chrome
عند استخدام Prompt API في إضافات Chrome، يمكن تخصيص كل جلسة باستخدام topK وtemperature من خلال عنصر الخيارات.
تُعلمك الدالة الثابتة LanguageModel.params() بالحدود التلقائية والقصوى للمعلمات في النموذج اللغوي:
defaultTopK: القيمة التلقائية لأهم K.-
maxTopK: قيمة أعلى K. defaultTemperature: درجة الحرارة التلقائية-
maxTemperature: تمثّل هذه السمة الحدّ الأقصى لدرجة الحرارة.
// Only available in Chrome Extensions
const params = await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}
// Initializing a new session in extensions must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
temperature: Math.min(params.defaultTemperature * 1.2, params.maxTemperature),
topK: params.defaultTopK,
});
console.log(slightlyHighTemperatureSession.temperature);
console.log(slightlyHighTemperatureSession.topK);
إضافة سياق باستخدام الطلبات الأولية
باستخدام الطلبات الأولية، يمكنك تزويد النموذج اللغوي بسياق حول التفاعلات السابقة، مثلاً، للسماح للمستخدم باستئناف جلسة محفوظة بعد إعادة تشغيل المتصفح.
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. [...]',
},
],
});
فرض قيود على الردود باستخدام بادئة
يمكنك إضافة دور "assistant"، بالإضافة إلى الأدوار السابقة، لتوضيح الردود السابقة للنموذج. على سبيل المثال:
const followup = await session.prompt([
{
role: "user",
content: "I'm nervous about my presentation tomorrow"
},
{
role: "assistant",
content: "Presentations are tough!"
}
]);
في بعض الحالات، قد تحتاج إلى ملء جزء من رسالة الرد الخاصة بدور "assistant" مسبقًا بدلاً من طلب رد جديد. يمكن أن يكون ذلك مفيدًا لتوجيه النموذج اللغوي لاستخدام تنسيق ردّ معيّن. لإجراء ذلك، أضِف
prefix: true إلى رسالة "assistant"-role اللاحقة. على سبيل المثال:
const characterSheet = await session.prompt([
{
role: 'user',
content: 'Create a TOML character sheet for a gnome barbarian',
},
{
role: 'assistant',
content: '```toml\n',
prefix: true,
},
]);
إضافة بيانات الطلب والرد المتوقّعة
تتضمّن Prompt API إمكانات متعدّدة الوسائط وتتوفّر بلغات متعدّدة. اضبط expectedInputs وexpectedOutputs
طُرق التواصل واللغات عند إنشاء جلستك.
-
type: نمط البيانات المتوقّع- بالنسبة إلى
expectedInputs، يمكن أن يكونtextأوimageأوaudio. - بالنسبة إلى
expectedOutputs، تسمح Prompt API بـtextفقط.
- بالنسبة إلى
languages: مصفوفة لضبط اللغة أو اللغات المتوقّعة. تقبل واجهة برمجة التطبيقات Prompt API القيم"en"و"ja"و"es"و"de"و"fr". نعمل حاليًا على توفير دعم للغات إضافية.- بالنسبة إلى
expectedInputs، اضبط لغة طلب النظام ولغة واحدة أو أكثر من لغات طلب المستخدم المتوقّعة. - اضبط لغة واحدة أو أكثر من
expectedOutputs.
- بالنسبة إلى
const session = await LanguageModel.create({
expectedInputs: [
{ type: "text", languages: ["en" /* system prompt */, "ja" /* user prompt */] }
],
expectedOutputs: [
{ type: "text", languages: ["ja"] }
]
});
قد تتلقّى "NotSupportedError" DOMException إذا واجه النموذج
إدخالاً أو إخراجًا غير متوافق.
الإمكانات المتعددة الوسائط
باستخدام هذه الإمكانات، يمكنك إجراء ما يلي:
- يمكنك السماح للمستخدمين بنسخ الرسائل الصوتية المُرسَلة في تطبيق محادثة.
- وصف صورة تم تحميلها إلى موقعك الإلكتروني لاستخدامها في تعليق توضيحي أو نص بديل
يمكنك الاطّلاع على العرض التوضيحي Mediarecorder Audio Prompt لاستخدام Prompt API مع الإدخال الصوتي، والعرض التوضيحي Canvas Image Prompt لاستخدام Prompt API مع إدخال الصور.
تتيح Prompt API أنواع الإدخال التالية:
- الصوت:
- المرئية:
HTMLImageElementSVGImageElement-
HTMLVideoElement(يستخدم إطار الفيديو في موضع الفيديو الحالي) HTMLCanvasElementImageBitmapOffscreenCanvasVideoFrameBlobImageData
تعرض هذه المقتطفة جلسة متعددة الوسائط تعالج أولاً صورتَين (صورة واحدة Blob وأخرى HTMLCanvasElement) وتطلب من الذكاء الاصطناعي مقارنتهما، ثم تتيح للمستخدم الردّ بتسجيل صوتي (AudioBuffer).
const session = await LanguageModel.create({
expectedInputs: [
{ type: "text", languages: ["en"] },
{ type: "audio" },
{ type: "image" },
],
expectedOutputs: [{ type: "text", languages: ["en"] }],
});
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 audioBuffer = await captureMicrophoneInput({ seconds: 10 });
const response2 = await session.prompt([
{
role: "user",
content: [
{ type: "text", value: "My response to your critique:" },
{ type: "audio", value: audioBuffer },
],
},
]);
console.log(response2);
إلحاق الرسائل
قد تستغرق عملية الاستنتاج بعض الوقت، خاصةً عند تقديم طلب باستخدام مدخلات متعدّدة الوسائط. قد يكون من المفيد إرسال طلبات محددة مسبقًا لتعبئة الجلسة، ليتمكّن النموذج من البدء في المعالجة.
في حين أنّ initialPrompts مفيدة عند إنشاء الجلسة، يمكن استخدام طريقة append() بالإضافة إلى طريقتَي prompt() أو promptStreaming() لتقديم المزيد من الطلبات السياقية الإضافية بعد إنشاء الجلسة.
على سبيل المثال:
const session = await LanguageModel.create({
initialPrompts: [
{
role: 'system',
content:
'You are a skilled analyst who correlates patterns across multiple images.',
},
],
expectedInputs: [{ type: 'image' }],
});
fileUpload.onchange = async () => {
await session.append([
{
role: 'user',
content: [
{
type: 'text',
value: `Here's one image. Notes: ${fileNotesInput.value}`,
},
{ type: 'image', value: fileUpload.files[0] },
],
},
]);
};
analyzeButton.onclick = async (e) => {
analysisResult.textContent = await session.prompt(userQuestionInput.value);
};
يتم تنفيذ الوعد الذي تعرضه الدالة append() بعد التحقّق من صحة الطلب ومعالجته وإضافته إلى الجلسة. يتم رفض الوعد إذا تعذّر إلحاق الطلب.
تمرير مخطّط JSON
أضِف الحقل responseConstraint إلى الطريقتَين prompt() أو promptStreaming()
لتمرير مخطط JSON كقيمة. يمكنك بعد ذلك استخدام الناتج المنظَّم مع Prompt API.
في المثال التالي، يضمن مخطط JSON أن يستجيب النموذج بالرمز true أو false لتصنيف ما إذا كانت الرسالة المحدّدة تتعلّق بصناعة الفخار.
const session = await LanguageModel.create();
const schema = {
"type": "boolean"
};
const post = "Mugs and ramen bowls, both a bit smaller than intended, but that
happens with reclaim. Glaze crawled the first time around, but pretty happy
with it after refiring.";
const result = await session.prompt(
`Is this post about pottery?\n\n${post}`,
{
responseConstraint: schema,
}
);
console.log(JSON.parse(result));
// true
يمكن أن يتضمّن التنفيذ مخطط JSON أو تعبيرًا عاديًا كجزء من الرسالة المرسَلة إلى النموذج. يستخدم هذا الإجراء جزءًا من
قدرة الاستيعاب. يمكنك قياس مقدار قدرة الاستيعاب التي سيستخدمها النموذج من خلال تمرير الخيار responseConstraint إلى session.measureContextUsage().
يمكنك تجنُّب هذا السلوك باستخدام الخيار omitResponseConstraintInput. في هذه الحالة، ننصحك بتضمين بعض الإرشادات في الطلب:
const result = await session.prompt(`
Summarize this feedback into a rating between 0-5. Only output a JSON
object { rating }, with a single property whose value is a number:
The food was delicious, service was excellent, will recommend.
`, { responseConstraint: schema, omitResponseConstraintInput: true });
توجيه الطلبات للنموذج
يمكنك تقديم طلب إلى النموذج باستخدام الدالتَين 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 = await LanguageModel.availability({
expectedInputs: [{type: 'text', languages: ['en']}],
expectedOutputs: [{type: 'text', languages: ['en']}],
});
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 available = await LanguageModel.availability({
expectedInputs: [{type: 'text', languages: ['en']}],
expectedOutputs: [{type: 'text', languages: ['en']}],
});
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,
});
إدارة الجلسة
تتتبّع كل جلسة سياق المحادثة. يتم أخذ التفاعلات السابقة في الاعتبار للتفاعلات المستقبلية إلى أن تمتلئ قدرة استيعاب الجلسة.
لكل جلسة حدّ أقصى لعدد الرموز المميّزة التي يمكنها معالجتها. يمكنك التحقّق من مدى تقدّمك نحو هذا الحد من خلال ما يلي:
console.log(`${session.contextUsage}/${session.contextWindow}`);
من الممكن إرسال طلب يؤدي إلى تجاوز قدرة الاستيعاب. في مثل هذه الحالات، ستتم إزالة الأجزاء الأولية من المحادثة مع النموذج اللغوي، زوج من الطلبات والردود في كل مرة، إلى أن تتوفّر رموز مميزة كافية لمعالجة الطلب الجديد. الاستثناء هو طلب النظام الذي لا تتم إزالته أبدًا.
يمكن رصد حالات تجاوز السعة هذه من خلال الاستماع إلى الحدث contextoverflow في الجلسة:
session.addEventListener("contextoverflow", () => {
console.log("We've gone past the context window, and some inputs will be dropped!");
});
إذا لم يكن من الممكن إزالة عدد كافٍ من الرموز المميزة من سجلّ المحادثات لمعالجة الطلب الجديد، سيتعذّر تنفيذ طلب prompt() أو promptStreaming() وسيظهر الاستثناء QuotaExceededError، ولن تتم إزالة أي رموز مميزة. تتضمّن السمة QuotaExceededError الخصائص التالية:
-
requested: عدد الرموز المميزة التي يتألف منها الإدخال -
contextWindow: عدد الرموز المميزة المتاحة
مزيد من المعلومات حول إدارة الجلسات
نسخ جلسة
للحفاظ على الموارد، يمكنك نسخ جلسة حالية باستخدام الدالة clone(). سيؤدي ذلك إلى إنشاء نسخة من المحادثة مع الحفاظ على السياق والطلب الأوّلي.
تأخذ الدالة clone() عنصر خيارات اختياريًا مع حقل signal
، ما يتيح لك تمرير AbortSignal لتدمير الجلسة المستنسخة.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const clonedSession = await session.clone({
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 choosing between a t-shirt
and a polo."
);
العروض التوضيحية
لقد أنشأنا العديد من العروض التوضيحية لاستكشاف حالات الاستخدام العديدة لواجهة برمجة التطبيقات Prompt API. العروض التوضيحية التالية هي تطبيقات ويب:
لاختبار Prompt API في إضافات Chrome، ثبِّت الإضافة التجريبية. يتوفّر الرمز المصدر للإضافة على GitHub.
استراتيجية الأداء
لا تزال واجهة Prompt API للويب قيد التطوير. أثناء إنشاء واجهة برمجة التطبيقات هذه، يمكنك الرجوع إلى أفضل الممارسات المتعلّقة بإدارة الجلسات لتحقيق الأداء الأمثل.
سياسة الأذونات وإطارات iframe وWeb Workers
تتوفّر واجهة برمجة التطبيقات Prompt API تلقائيًا للنوافذ ذات المستوى الأعلى وإطارات iframe من المصدر نفسه. يمكن تفويض إمكانية الوصول إلى واجهة برمجة التطبيقات إلى إطارات iframe متعدّدة المصادر باستخدام السمة allow="" في سياسة الأذونات:
<!--
The hosting site at https://main.example.com can grant a cross-origin iframe
at https://cross-origin.example.com/ access to the Prompt API by
setting the `allow="language-model"` attribute.
-->
<iframe src="https://cross-origin.example.com/" allow="language-model"></iframe>
لا تتوفّر Prompt API حاليًا في Web Workers بسبب صعوبة تحديد مستند مسؤول لكل عامل من أجل التحقّق من حالة سياسة الأذونات.
المشاركة ومشاركة الملاحظات
يمكن أن يؤثّر إدخالك بشكل مباشر في طريقة إنشاء وتنفيذ الإصدارات المستقبلية من واجهة برمجة التطبيقات هذه وجميع واجهات برمجة التطبيقات المضمّنة المستنِدة إلى الذكاء الاصطناعي.
- لتقديم ملاحظات حول تنفيذ Chrome لهذه الميزة، يمكنك إرسال تقرير عن خطأ أو طلب ميزة.
- يمكنك مشاركة ملاحظاتك حول شكل واجهة برمجة التطبيقات من خلال التعليق على مشكلة حالية أو فتح مشكلة جديدة في مستودع Prompt API على GitHub.
- الانضمام إلى برنامج الاستخدام المبكر