تاریخ انتشار: 20 می 2025، آخرین به روز رسانی: 21 سپتامبر 2025
توضیح دهنده | وب | برنامه های افزودنی | وضعیت کروم | قصد |
---|---|---|---|---|
GitHub | مشاهده کنید | قصد آزمایش |
با Prompt API میتوانید درخواستهای زبان طبیعی را به Gemini Nano در مرورگر ارسال کنید.
راه های زیادی برای استفاده از Prompt API وجود دارد. به عنوان مثال، می توانید بسازید:
- جستجوی مبتنی بر هوش مصنوعی : به سوالات بر اساس محتوای یک صفحه وب پاسخ دهید.
- فیدهای خبری شخصی شده : فیدی بسازید که به صورت پویا مقالات را با دسته بندی طبقه بندی می کند و به کاربران امکان می دهد آن محتوا را فیلتر کنند.
- فیلترهای محتوای سفارشی مقالات خبری را تجزیه و تحلیل کنید و به طور خودکار محتوا را بر اساس موضوعات تعریف شده توسط کاربر محو یا مخفی کنید.
- ایجاد رویداد تقویم برنامه افزودنی Chrome را توسعه دهید که به طور خودکار جزئیات رویداد را از صفحات وب استخراج می کند، بنابراین کاربران می توانند ورودی های تقویم را تنها در چند مرحله ایجاد کنند.
- استخراج تماس بدون درز . افزونهای بسازید که اطلاعات تماس را از وبسایتها استخراج میکند و تماس با یک کسبوکار را برای کاربران آسانتر میکند یا جزئیات را به فهرست مخاطبین خود اضافه میکند.
اینها فقط چند احتمال هستند و ما از دیدن آنچه شما ایجاد می کنید هیجان زده هستیم.
الزامات سخت افزاری را بررسی کنید
الزامات زیر برای برنامهنویسان و کاربرانی که ویژگیها را با استفاده از این APIها در Chrome اجرا میکنند، وجود دارد. سایر مرورگرها ممکن است شرایط عملیاتی متفاوتی داشته باشند.
زبان شناساگر و API های مترجم در کروم روی دسکتاپ کار می کنند. این API ها روی دستگاه های تلفن همراه کار نمی کنند. Prompt API، Summarizer API، Writer API، Rewriter API، و Proofreader API در Chrome کار میکنند که شرایط زیر رعایت شود:
- سیستم عامل : ویندوز 10 یا 11؛ macOS 13+ (ونتورا و به بعد)؛ لینوکس؛ یا ChromeOS (از پلتفرم 16389.0.0 و به بعد) در دستگاههای Chromebook Plus . Chrome for Android، iOS و ChromeOS در دستگاههای غیرChromebook Plus هنوز توسط APIهایی که از Gemini Nano استفاده میکنند پشتیبانی نمیشوند.
- فضای ذخیره سازی : حداقل 22 گیگابایت فضای خالی در حجمی که نمایه Chrome شما را در بر می گیرد.
- GPU یا CPU : مدل های داخلی می توانند با GPU یا CPU اجرا شوند.
- GPU : به طور دقیق بیش از 4 گیگابایت VRAM.
- CPU : 16 گیگابایت رم یا بیشتر و 4 هسته CPU یا بیشتر.
- شبکه : داده های نامحدود یا اتصال نامحدود.
اندازه دقیق Gemini Nano ممکن است با بهروزرسانی مدل توسط مرورگر متفاوت باشد. برای تعیین اندازه فعلی، از chrome://on-device-internals
دیدن کنید.
از Prompt API استفاده کنید
Prompt API از مدل Gemini Nano در کروم استفاده می کند. در حالی که API در Chrome تعبیه شده است، اولین باری که یک منبع از API استفاده می کند، مدل به طور جداگانه دانلود می شود. قبل از استفاده از این API، خطمشی استفادههای ممنوعه هوش مصنوعی مولد Google را تأیید کنید.
برای تعیین اینکه آیا مدل آماده استفاده است، LanguageModel.availability()
را فراخوانی کنید.
const availability = await LanguageModel.availability();
قبل از بارگیری مدل، باید یک تعامل با کاربر وجود داشته باشد، مانند کلیک، ضربه زدن، یا فشار دادن کلید.
اگر پاسخ downloadable
یا downloading
بود، مدل و API ها در دسترس هستند اما قبل از استفاده از ویژگی ها باید دانلود شوند. کاربر باید با صفحه تعامل داشته باشد (مانند کلیک، ضربه زدن یا فشار دادن کلید) تا دانلود مجاز باشد.
برای دانلود و نمونه سازی مدل، تابع create()
فراخوانی کنید.
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
اگر پاسخ به availability()
downloading
بود، به پیشرفت دانلود گوش دهید و به کاربر اطلاع دهید، زیرا دانلود ممکن است زمان ببرد.
پارامترهای مدل
params()
شما را از پارامترهای مدل زبان مطلع می کند. شی دارای فیلدهای زیر است:
-
defaultTopK
: مقدار top-K پیش فرض. -
maxTopK
: حداکثر مقدار top-K . -
defaultTemperature
: دمای پیش فرض. -
maxTemperature
: حداکثر دما.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}
یک جلسه ایجاد کنید
هنگامی که Prompt API می تواند اجرا شود، یک جلسه با تابع create()
ایجاد می کنید.
هر جلسه را می توان با topK
و temperature
با استفاده از یک شی گزینه های اختیاری سفارشی کرد. مقادیر پیشفرض این پارامترها از 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. [...]',
},
],
});
پاسخ ها را با پیشوند محدود کنید
میتوانید علاوه بر نقشهای قبلی، یک نقش "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"
را می پذیرد. پشتیبانی از زبان های اضافی در حال توسعه است.- برای
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 با ورودی تصویر نگاه کنید.
پیوست پیام ها
استنتاج ممکن است مدتی طول بکشد، به ویژه هنگامی که با ورودی های چندوجهی درخواست می شود. ارسال پیامهای از پیش تعیینشده از قبل برای پر کردن جلسه میتواند مفید باشد، بنابراین مدل میتواند شروعی برای پردازش داشته باشد.
در حالی که 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 Schema را به عنوان مقدار ارسال کنید. سپس می توانید از خروجی ساخت یافته با 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.measureInputUsage()
اندازهگیری کنید که چقدر از سهمیه ورودی استفاده میکند.
می توانید با گزینه 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 { 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,
});
مدیریت جلسه
هر جلسه زمینه گفتگو را پیگیری می کند. تا زمانی که پنجره زمینه جلسه پر شود، تعاملات قبلی برای تعاملات بعدی در نظر گرفته می شود.
هر جلسه دارای حداکثر تعداد نشانه هایی است که می تواند پردازش کند. پیشرفت خود را به سمت این حد با موارد زیر بررسی کنید:
console.log(`${session.inputUsage}/${session.inputQuota}`);
درباره مدیریت جلسه بیشتر بدانید.
یک جلسه را شبیه سازی کنید
برای حفظ منابع، می توانید یک جلسه موجود را با تابع 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 برای وب هنوز در حال توسعه است. در حالی که ما این API را می سازیم، برای عملکرد بهینه به بهترین شیوه های مدیریت جلسه مراجعه کنید.
خط مشی مجوز، iframes، و کارگران وب
بهطور پیشفرض، Prompt API فقط برای پنجرههای سطح بالا و iframeهای همان مبدا در دسترس است. دسترسی به API را می توان با استفاده از ویژگی Permission Policy allow=""
به iframe های متقاطع واگذار کرد:
<!--
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 در دسترس نیست.
شرکت کنید و بازخورد خود را به اشتراک بگذارید
ورودی شما میتواند مستقیماً بر نحوه ساخت و اجرای نسخههای آینده این API و همه APIهای AI داخلی تأثیر بگذارد.
- برای بازخورد در مورد اجرای Chrome، یک گزارش اشکال یا یک درخواست ویژگی ارسال کنید.
- بازخورد خود را در مورد شکل API با نظر دادن در مورد یک مشکل موجود یا با باز کردن یک مورد جدید در مخزن Prompt API GitHub به اشتراک بگذارید.
- به برنامه پیش نمایش اولیه بپیوندید .
تاریخ انتشار: 20 می 2025، آخرین به روز رسانی: 21 سپتامبر 2025
توضیح دهنده | وب | برنامه های افزودنی | وضعیت کروم | قصد |
---|---|---|---|---|
GitHub | مشاهده کنید | قصد آزمایش |
با Prompt API میتوانید درخواستهای زبان طبیعی را به Gemini Nano در مرورگر ارسال کنید.
راه های زیادی برای استفاده از Prompt API وجود دارد. به عنوان مثال، می توانید بسازید:
- جستجوی مبتنی بر هوش مصنوعی : به سوالات بر اساس محتوای یک صفحه وب پاسخ دهید.
- فیدهای خبری شخصی شده : فیدی بسازید که به صورت پویا مقالات را با دسته بندی طبقه بندی می کند و به کاربران امکان می دهد آن محتوا را فیلتر کنند.
- فیلترهای محتوای سفارشی مقالات خبری را تجزیه و تحلیل کنید و به طور خودکار محتوا را بر اساس موضوعات تعریف شده توسط کاربر محو یا مخفی کنید.
- ایجاد رویداد تقویم برنامه افزودنی Chrome را توسعه دهید که به طور خودکار جزئیات رویداد را از صفحات وب استخراج می کند، بنابراین کاربران می توانند ورودی های تقویم را تنها در چند مرحله ایجاد کنند.
- استخراج تماس بدون درز . افزونهای بسازید که اطلاعات تماس را از وبسایتها استخراج میکند و تماس با یک کسبوکار را برای کاربران آسانتر میکند یا جزئیات را به فهرست مخاطبین خود اضافه میکند.
اینها فقط چند احتمال هستند و ما از دیدن آنچه شما ایجاد می کنید هیجان زده هستیم.
الزامات سخت افزاری را بررسی کنید
الزامات زیر برای برنامهنویسان و کاربرانی که ویژگیها را با استفاده از این APIها در Chrome اجرا میکنند، وجود دارد. سایر مرورگرها ممکن است شرایط عملیاتی متفاوتی داشته باشند.
زبان شناساگر و API های مترجم در کروم روی دسکتاپ کار می کنند. این API ها روی دستگاه های تلفن همراه کار نمی کنند. Prompt API، Summarizer API، Writer API، Rewriter API، و Proofreader API در Chrome کار میکنند که شرایط زیر رعایت شود:
- سیستم عامل : ویندوز 10 یا 11؛ macOS 13+ (ونتورا و به بعد)؛ لینوکس؛ یا ChromeOS (از پلتفرم 16389.0.0 و به بعد) در دستگاههای Chromebook Plus . Chrome for Android، iOS و ChromeOS در دستگاههای غیرChromebook Plus هنوز توسط APIهایی که از Gemini Nano استفاده میکنند پشتیبانی نمیشوند.
- فضای ذخیره سازی : حداقل 22 گیگابایت فضای خالی در حجمی که نمایه Chrome شما را در بر می گیرد.
- GPU یا CPU : مدل های داخلی می توانند با GPU یا CPU اجرا شوند.
- GPU : به طور دقیق بیش از 4 گیگابایت VRAM.
- CPU : 16 گیگابایت رم یا بیشتر و 4 هسته CPU یا بیشتر.
- شبکه : داده های نامحدود یا اتصال نامحدود.
اندازه دقیق Gemini Nano ممکن است با بهروزرسانی مدل توسط مرورگر متفاوت باشد. برای تعیین اندازه فعلی، از chrome://on-device-internals
دیدن کنید.
از Prompt API استفاده کنید
Prompt API از مدل Gemini Nano در کروم استفاده می کند. در حالی که API در Chrome تعبیه شده است، اولین باری که یک منبع از API استفاده می کند، مدل به طور جداگانه دانلود می شود. قبل از استفاده از این API، خطمشی استفادههای ممنوعه هوش مصنوعی مولد Google را تأیید کنید.
برای تعیین اینکه آیا مدل آماده استفاده است، LanguageModel.availability()
را فراخوانی کنید.
const availability = await LanguageModel.availability();
قبل از بارگیری مدل، باید یک تعامل با کاربر وجود داشته باشد، مانند کلیک، ضربه زدن، یا فشار دادن کلید.
اگر پاسخ downloadable
یا downloading
بود، مدل و API ها در دسترس هستند اما قبل از استفاده از ویژگی ها باید دانلود شوند. کاربر باید با صفحه تعامل داشته باشد (مانند کلیک، ضربه زدن یا فشار دادن کلید) تا دانلود مجاز باشد.
برای دانلود و نمونه سازی مدل، تابع create()
فراخوانی کنید.
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
اگر پاسخ به availability()
downloading
بود، به پیشرفت دانلود گوش دهید و به کاربر اطلاع دهید، زیرا دانلود ممکن است زمان ببرد.
پارامترهای مدل
params()
شما را از پارامترهای مدل زبان مطلع می کند. شی دارای فیلدهای زیر است:
-
defaultTopK
: مقدار top-K پیش فرض. -
maxTopK
: حداکثر مقدار top-K . -
defaultTemperature
: دمای پیش فرض. -
maxTemperature
: حداکثر دما.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}
یک جلسه ایجاد کنید
هنگامی که Prompt API می تواند اجرا شود، یک جلسه با تابع create()
ایجاد می کنید.
هر جلسه را می توان با topK
و temperature
با استفاده از یک شی گزینه های اختیاری سفارشی کرد. مقادیر پیشفرض این پارامترها از 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. [...]',
},
],
});
پاسخ ها را با پیشوند محدود کنید
میتوانید علاوه بر نقشهای قبلی، یک نقش "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"
را می پذیرد. پشتیبانی از زبان های اضافی در حال توسعه است.- برای
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 با ورودی تصویر نگاه کنید.
پیوست پیام ها
استنتاج ممکن است مدتی طول بکشد، به ویژه هنگامی که با ورودی های چندوجهی درخواست می شود. ارسال پیامهای از پیش تعیینشده از قبل برای پر کردن جلسه میتواند مفید باشد، بنابراین مدل میتواند شروعی برای پردازش داشته باشد.
در حالی که 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 Schema را به عنوان مقدار ارسال کنید. سپس می توانید از خروجی ساخت یافته با 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.measureInputUsage()
اندازهگیری کنید که چقدر از سهمیه ورودی استفاده میکند.
می توانید با گزینه 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 { 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,
});
مدیریت جلسه
هر جلسه زمینه گفتگو را پیگیری می کند. تا زمانی که پنجره زمینه جلسه پر شود، تعاملات قبلی برای تعاملات بعدی در نظر گرفته می شود.
هر جلسه دارای حداکثر تعداد نشانه هایی است که می تواند پردازش کند. پیشرفت خود را به سمت این حد با موارد زیر بررسی کنید:
console.log(`${session.inputUsage}/${session.inputQuota}`);
درباره مدیریت جلسه بیشتر بدانید.
یک جلسه را شبیه سازی کنید
برای حفظ منابع، می توانید یک جلسه موجود را با تابع 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 برای وب هنوز در حال توسعه است. در حالی که ما این API را می سازیم، برای عملکرد بهینه به بهترین شیوه های مدیریت جلسه مراجعه کنید.
خط مشی مجوز، iframes، و کارگران وب
بهطور پیشفرض، Prompt API فقط برای پنجرههای سطح بالا و iframeهای همان مبدا در دسترس است. دسترسی به API را می توان با استفاده از ویژگی Permission Policy allow=""
به iframe های متقاطع واگذار کرد:
<!--
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 در دسترس نیست.
شرکت کنید و بازخورد خود را به اشتراک بگذارید
ورودی شما میتواند مستقیماً بر نحوه ساخت و اجرای نسخههای آینده این API و همه APIهای AI داخلی تأثیر بگذارد.
- برای بازخورد در مورد اجرای Chrome، یک گزارش اشکال یا یک درخواست ویژگی ارسال کنید.
- بازخورد خود را در مورد شکل API با نظر دادن در مورد یک مشکل موجود یا با باز کردن یک مورد جدید در مخزن Prompt API GitHub به اشتراک بگذارید.
- به برنامه پیش نمایش اولیه بپیوندید .
تاریخ انتشار: 20 می 2025، آخرین به روز رسانی: 21 سپتامبر 2025
توضیح دهنده | وب | برنامه های افزودنی | وضعیت کروم | قصد |
---|---|---|---|---|
GitHub | مشاهده کنید | قصد آزمایش |
با Prompt API میتوانید درخواستهای زبان طبیعی را به Gemini Nano در مرورگر ارسال کنید.
راه های زیادی برای استفاده از Prompt API وجود دارد. به عنوان مثال، می توانید بسازید:
- جستجوی مبتنی بر هوش مصنوعی : به سوالات بر اساس محتوای یک صفحه وب پاسخ دهید.
- فیدهای خبری شخصی شده : فیدی بسازید که به صورت پویا مقالات را با دسته بندی طبقه بندی می کند و به کاربران امکان می دهد آن محتوا را فیلتر کنند.
- فیلترهای محتوای سفارشی مقالات خبری را تجزیه و تحلیل کنید و به طور خودکار محتوا را بر اساس موضوعات تعریف شده توسط کاربر محو یا مخفی کنید.
- ایجاد رویداد تقویم برنامه افزودنی Chrome را توسعه دهید که به طور خودکار جزئیات رویداد را از صفحات وب استخراج می کند، بنابراین کاربران می توانند ورودی های تقویم را تنها در چند مرحله ایجاد کنند.
- استخراج تماس بدون درز . افزونهای بسازید که اطلاعات تماس را از وبسایتها استخراج میکند و تماس با یک کسبوکار را برای کاربران آسانتر میکند یا جزئیات را به فهرست مخاطبین خود اضافه میکند.
اینها فقط چند احتمال هستند و ما از دیدن آنچه شما ایجاد می کنید هیجان زده هستیم.
الزامات سخت افزاری را بررسی کنید
الزامات زیر برای برنامهنویسان و کاربرانی که ویژگیها را با استفاده از این APIها در Chrome اجرا میکنند، وجود دارد. سایر مرورگرها ممکن است شرایط عملیاتی متفاوتی داشته باشند.
زبان شناساگر و API های مترجم در کروم روی دسکتاپ کار می کنند. این API ها روی دستگاه های تلفن همراه کار نمی کنند. Prompt API، Summarizer API، Writer API، Rewriter API، و Proofreader API در Chrome کار میکنند که شرایط زیر رعایت شود:
- سیستم عامل : ویندوز 10 یا 11؛ macOS 13+ (ونتورا و به بعد)؛ لینوکس؛ یا ChromeOS (از پلتفرم 16389.0.0 و به بعد) در دستگاههای Chromebook Plus . Chrome for Android، iOS و ChromeOS در دستگاههای غیرChromebook Plus هنوز توسط APIهایی که از Gemini Nano استفاده میکنند پشتیبانی نمیشوند.
- فضای ذخیره سازی : حداقل 22 گیگابایت فضای خالی در حجمی که نمایه Chrome شما را در بر می گیرد.
- GPU یا CPU : مدل های داخلی می توانند با GPU یا CPU اجرا شوند.
- GPU : به طور دقیق بیش از 4 گیگابایت VRAM.
- CPU : 16 گیگابایت رم یا بیشتر و 4 هسته CPU یا بیشتر.
- شبکه : داده های نامحدود یا اتصال نامحدود.
اندازه دقیق Gemini Nano ممکن است با بهروزرسانی مدل توسط مرورگر متفاوت باشد. برای تعیین اندازه فعلی، از chrome://on-device-internals
دیدن کنید.
از Prompt API استفاده کنید
Prompt API از مدل Gemini Nano در کروم استفاده می کند. در حالی که API در Chrome تعبیه شده است، اولین باری که یک منبع از API استفاده می کند، مدل به طور جداگانه دانلود می شود. قبل از استفاده از این API، خطمشی استفادههای ممنوعه هوش مصنوعی مولد Google را تأیید کنید.
برای تعیین اینکه آیا مدل آماده استفاده است، LanguageModel.availability()
را فراخوانی کنید.
const availability = await LanguageModel.availability();
قبل از بارگیری مدل، باید یک تعامل با کاربر وجود داشته باشد، مانند کلیک، ضربه زدن، یا فشار دادن کلید.
اگر پاسخ downloadable
یا downloading
بود، مدل و API ها در دسترس هستند اما قبل از استفاده از ویژگی ها باید دانلود شوند. کاربر باید با صفحه تعامل داشته باشد (مانند کلیک، ضربه زدن یا فشار دادن کلید) تا دانلود مجاز باشد.
برای دانلود و نمونه سازی مدل، تابع create()
فراخوانی کنید.
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
اگر پاسخ به availability()
downloading
بود، به پیشرفت دانلود گوش دهید و به کاربر اطلاع دهید، زیرا دانلود ممکن است زمان ببرد.
پارامترهای مدل
params()
شما را از پارامترهای مدل زبان مطلع می کند. شی دارای فیلدهای زیر است:
-
defaultTopK
: مقدار top-K پیش فرض. -
maxTopK
: حداکثر مقدار top-K . -
defaultTemperature
: دمای پیش فرض. -
maxTemperature
: حداکثر دما.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}
یک جلسه ایجاد کنید
هنگامی که Prompt API می تواند اجرا شود، یک جلسه با تابع create()
ایجاد می کنید.
هر جلسه را می توان با topK
و temperature
با استفاده از یک شی گزینه های اختیاری سفارشی کرد. مقادیر پیشفرض این پارامترها از 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. [...]',
},
],
});
پاسخ ها را با پیشوند محدود کنید
میتوانید علاوه بر نقشهای قبلی، یک نقش "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"
را می پذیرد. پشتیبانی از زبان های اضافی در حال توسعه است.- برای
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 با ورودی تصویر نگاه کنید.
پیوست پیام ها
استنتاج ممکن است مدتی طول بکشد، به ویژه هنگامی که با ورودی های چندوجهی درخواست می شود. ارسال پیامهای از پیش تعیینشده از قبل برای پر کردن جلسه میتواند مفید باشد، بنابراین مدل میتواند شروعی برای پردازش داشته باشد.
در حالی که 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 Schema را به عنوان مقدار ارسال کنید. سپس می توانید از خروجی ساخت یافته با 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.measureInputUsage()
اندازهگیری کنید که چقدر از سهمیه ورودی استفاده میکند.
می توانید با گزینه 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 { 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,
});
مدیریت جلسه
هر جلسه زمینه گفتگو را پیگیری می کند. تا زمانی که پنجره زمینه جلسه پر شود، تعاملات قبلی برای تعاملات بعدی در نظر گرفته می شود.
هر جلسه دارای حداکثر تعداد نشانه هایی است که می تواند پردازش کند. پیشرفت خود را به سمت این حد با موارد زیر بررسی کنید:
console.log(`${session.inputUsage}/${session.inputQuota}`);
درباره مدیریت جلسه بیشتر بدانید.
یک جلسه را شبیه سازی کنید
برای حفظ منابع، می توانید یک جلسه موجود را با تابع clone()
کلون کنید. زمینه مکالمه بازنشانی می شود، اما درخواست اولیه دست نخورده باقی می ماند. The clone()
function takes an optional options object with a signal
field, which lets you pass an AbortSignal
to destroy the cloned session.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const clonedSession = await session.clone({
signal: controller.signal,
});
Terminate a session
Call destroy()
to free resources if you no longer need a session. When a session is destroyed, it can no longer be used, and any ongoing execution is aborted. You may want to keep the session around if you intend to prompt the model often since creating a session can take some time.
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."
);
دموها
We've built multiple demos to explore the many use cases for the Prompt API. The following demos are web applications:
To test the Prompt API in Chrome Extensions, install the demo extension. The extension source code is available on GitHub.
Performance strategy
The Prompt API for the web is still being developed. While we build this API, refer to our best practices on session management for optimal performance.
Permission Policy, iframes, and Web Workers
By default, the Prompt API is only available to top-level windows and to their same-origin iframes. Access to the API can be delegated to cross-origin iframes using the Permission Policy allow=""
attribute:
<!--
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>
The Prompt API isn't available in Web Workers for now, due to the complexity of establishing a responsible document for each worker in order to check the permissions policy status.
Participate and share feedback
Your input can directly impact how we build and implement future versions of this API and all built-in AI APIs .
- For feedback on Chrome's implementation, file a bug report or a feature request .
- Share your feedback on the API shape by commenting on an existing Issue or by opening a new one in the Prompt API GitHub repository .
- Join the early preview program .
Published: May 20, 2025, Last updated: September 21, 2025
توضیح دهنده | وب | برنامه های افزودنی | Chrome Status | قصد |
---|---|---|---|---|
GitHub | مشاهده کنید | Intent to Experiment |
With the Prompt API, you can send natural language requests to Gemini Nano in the browser.
There are many ways you can use the Prompt API. For example, you could build:
- AI-powered search : Answer questions based on the content of a web page.
- Personalized news feeds : Build a feed that dynamically classifies articles with categories and allow for users to filter for that content.
- Custom content filters . Analyze news articles and automatically blur or hide content based on user-defined topics.
- Calendar event creation . Develop a Chrome Extension that automatically extracts event details from web pages, so users can create calendar entries in just a few steps.
- Seamless contact extraction . Build an extension that extracts contact information from websites, making it easier for users to contact a business or add details to their list of contacts.
These are just a few possibilities, and we're excited to see what you create.
Review the hardware requirements
The following requirements exist for developers and the users who operate features using these APIs in Chrome. Other browsers may have different operating requirements.
The Language Detector and Translator APIs work in Chrome on desktop. These APIs do not work on mobile devices. The Prompt API, Summarizer API, Writer API, Rewriter API, and Proofreader API work in Chrome when the following conditions are met:
- Operating system : Windows 10 or 11; macOS 13+ (Ventura and onwards); لینوکس؛ or ChromeOS (from Platform 16389.0.0 and onwards) on Chromebook Plus devices. Chrome for Android, iOS, and ChromeOS on non-Chromebook Plus devices are not yet supported by the APIs which use Gemini Nano.
- Storage : At least 22 GB of free space on the volume that contains your Chrome profile.
- GPU or CPU : Built-in models can run with GPU or CPU.
- GPU : Strictly more than 4 GB of VRAM.
- CPU : 16 GB of RAM or more and 4 CPU cores or more.
- Network : Unlimited data or an unmetered connection.
Gemini Nano's exact size may vary as the browser updates the model. To determine the current size, visit chrome://on-device-internals
.
Use the Prompt API
The Prompt API uses the Gemini Nano model in Chrome. While the API is built into Chrome, the model is downloaded separately the first time an origin uses the API. Before you use this API, acknowledge Google's Generative AI Prohibited Uses Policy .
To determine if the model is ready to use, call LanguageModel.availability()
.
const availability = await LanguageModel.availability();
Before the model can be downloaded, there must be a user interaction , such as a click, tap, or key press.
If the response was downloadable
or downloading
, the model and APIs are available but must be downloaded before you can use the features. The user must interact with the page (such as a click, tap, or key press) for a download to be permitted.
To download and instantiate the model, call the create()
function .
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
If the response to availability()
was downloading
, listen for download progress and inform the user, as the download may take time.
Model parameters
The params()
function informs you of the language model's parameters. The object has the following fields:
-
defaultTopK
: The default top-K value. -
maxTopK
: The maximum top-K value. -
defaultTemperature
: The default temperature . -
maxTemperature
: The maximum temperature.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2}
یک جلسه ایجاد کنید
Once the Prompt API can run, you create a session with the create()
function.
Each session can be customized with topK
and temperature
using an optional options object. The default values for these parameters are returned from 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,
});
The create()
function's optional options object also takes a signal
field, which lets you pass an AbortSignal
to destroy the session.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const session = await LanguageModel.create({
signal: controller.signal,
});
Add context with initial prompts
With initial prompts, you can provide the language model with context about previous interactions, for example, to allow the user to resume a stored session after a browser restart.
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. [...]',
},
],
});
Constrain responses with a prefix
You can add an "assistant"
role, in addition to previous roles, to elaborate on the model's previous responses. به عنوان مثال:
const followup = await session.prompt([
{
role: "user",
content: "I'm nervous about my presentation tomorrow"
},
{
role: "assistant",
content: "Presentations are tough!"
}
]);
In some cases, instead of requesting a new response, you may want to prefill part of the "assistant"
-role response message. This can be helpful to guide the language model to use a specific response format. To do this, add prefix: true
to the trailing "assistant"
-role message. به عنوان مثال:
const characterSheet = await session.prompt([
{
role: 'user',
content: 'Create a TOML character sheet for a gnome barbarian',
},
{
role: 'assistant',
content: '```toml\n',
prefix: true,
},
]);
Add expected input and output
The Prompt API has multimodal capabilities and supports multiple languages. Set the expectedInputs
and expectedOutputs
modalities and languages when creating your session.
-
type
: Modality expected.- For
expectedInputs
, this can betext
,image
, oraudio
. - For
expectedOutputs
, the Prompt API allowstext
only.
- For
-
languages
: Array to set the language or languages expected. The Prompt API accepts"en"
,"ja"
, and"es"
. Support for additional languages is in development.- For
expectedInputs
, set the system prompt language and one or more expected user prompt languages. - Set one or more
expectedOutputs
languages.
- For
const session = await LanguageModel.create({
expectedInputs: [
{ type: "text", languages: ["en" /* system prompt */, "ja" /* user prompt */] }
],
expectedOutputs: [
{ type: "text", languages: ["ja"] }
]
});
You may receive a "NotSupportedError"
DOMException if the model encounters an unsupported input or output.
Multimodal capabilities
With these capabilities, you could:
- Allow users to transcribe audio messages sent in a chat application.
- Describe an image uploaded to your website for use in a caption or alt text.
Take a look at the Mediarecorder Audio Prompt demo for using the Prompt API with audio input and the Canvas Image Prompt demo for using the Prompt API with image input.
Append messages
Inference may take some time, especially when prompting with multimodal inputs. It can be useful to send predetermined prompts in advance to populate the session, so the model can get a head start on processing.
While initialPrompts
are useful at session creation, the append()
method can be used in addition to the prompt()
or promptStreaming()
methods, to give additional additional contextual prompts after the session is created.
به عنوان مثال:
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);
};
The promise returned by append()
fulfills once the prompt has been validated, processed, and appended to the session. The promise is rejected if the prompt cannot be appended.
Pass a JSON Schema
Add the responseConstraint
field to prompt()
or promptStreaming()
method to pass a JSON Schema as the value. You can then use structured output with the Prompt API.
In the following example, the JSON Schema makes sure the model responds with true
or false
to classify if a given message is about pottery.
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
Your implementation can include a JSON Schema or regular expression as part of the message sent to the model. This uses some of the input quota . You can measure how much of the input quota it will use by passing the responseConstraint
option to session.measureInputUsage()
.
You can avoid this behavior with the omitResponseConstraintInput
option. If you do so, we recommend that you include some guidance in the prompt:
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 the model
You can prompt the model with either the prompt()
or the promptStreaming()
functions.
Non-streamed output
If you expect a short result, you can use the prompt()
function that returns the response once it's available.
// 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);
}
Streamed output
If you expect a longer response, you should use the promptStreaming()
function which lets you show partial results as they come in from the model. The promptStreaming()
function returns a 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);
}
}
Stop prompting
Both prompt()
and promptStreaming()
accept an optional second parameter with a signal
field, which lets you stop running prompts.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const result = await session.prompt('Write me a poem!', {
signal: controller.signal,
});
مدیریت جلسه
Each session keeps track of the context of the conversation. Previous interactions are taken into account for future interactions until the session's context window is full.
Each session has a maximum number of tokens it can process. Check your progress towards this limit with the following:
console.log(`${session.inputUsage}/${session.inputQuota}`);
Learn more about session management .
Clone a session
To preserve resources, you can clone an existing session with the clone()
function. The conversation context is reset, but the initial prompt remains intact. The clone()
function takes an optional options object with a signal
field, which lets you pass an AbortSignal
to destroy the cloned session.
const controller = new AbortController();
stopButton.onclick = () => controller.abort();
const clonedSession = await session.clone({
signal: controller.signal,
});
Terminate a session
Call destroy()
to free resources if you no longer need a session. When a session is destroyed, it can no longer be used, and any ongoing execution is aborted. You may want to keep the session around if you intend to prompt the model often since creating a session can take some time.
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."
);
دموها
We've built multiple demos to explore the many use cases for the Prompt API. The following demos are web applications:
To test the Prompt API in Chrome Extensions, install the demo extension. The extension source code is available on GitHub.
Performance strategy
The Prompt API for the web is still being developed. While we build this API, refer to our best practices on session management for optimal performance.
Permission Policy, iframes, and Web Workers
By default, the Prompt API is only available to top-level windows and to their same-origin iframes. Access to the API can be delegated to cross-origin iframes using the Permission Policy allow=""
attribute:
<!--
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>
The Prompt API isn't available in Web Workers for now, due to the complexity of establishing a responsible document for each worker in order to check the permissions policy status.
Participate and share feedback
Your input can directly impact how we build and implement future versions of this API and all built-in AI APIs .
- For feedback on Chrome's implementation, file a bug report or a feature request .
- Share your feedback on the API shape by commenting on an existing Issue or by opening a new one in the Prompt API GitHub repository .
- Join the early preview program .