تاریخ انتشار: 11 نوامبر 2024، آخرین به روز رسانی: 20 می 2025
توضیح دهنده | وب | برنامه های افزودنی | وضعیت کروم | قصد |
---|---|---|---|---|
GitHub | مشاهده کنید | قصد آزمایش |
با Prompt API میتوانید درخواستهای زبان طبیعی را به Gemini Nano در مرورگر ارسال کنید.
راههای زیادی برای استفاده از Prompt API در برنامههای افزودنی Chrome وجود دارد. به عنوان مثال:
- رویدادهای تقویم فوری برنامه افزودنی Chrome را توسعه دهید که به طور خودکار جزئیات رویداد را از صفحات وب استخراج می کند، بنابراین کاربران می توانند ورودی های تقویم را تنها در چند مرحله ایجاد کنند.
- استخراج تماس بدون درز . افزونهای بسازید که اطلاعات تماس را از وبسایتها استخراج میکند و تماس با یک کسبوکار را برای کاربران آسانتر میکند یا جزئیات را به فهرست مخاطبین خود اضافه میکند.
- فیلتر محتوای پویا یک برنامه افزودنی Chrome ایجاد کنید که مقالات خبری را تجزیه و تحلیل می کند و به طور خودکار محتوا را بر اساس موضوعات تعریف شده توسط کاربر محو یا پنهان می کند.
اینها فقط چند احتمال هستند، اما ما هیجان زده هستیم که ببینیم چه چیزی ایجاد می کنید.
از Prompt API در برنامه های افزودنی استفاده کنید
دو تابع افزونه در فضای نام LanguageModel
در دسترس شماست:
-
availability()
برای بررسی توانایی مدل و موجود بودن آن. -
create()
برای شروع یک جلسه مدل زبان.
دانلود مدل
Prompt API از مدل Gemini Nano در کروم استفاده می کند. در حالی که API در Chrome تعبیه شده است، اولین باری که یک برنامه افزودنی از API استفاده می کند، مدل به طور جداگانه دانلود می شود.
برای تعیین اینکه آیا مدل آماده استفاده است، تابع LanguageModel.availability()
ناهمزمان را فراخوانی کنید. این باید یکی از پاسخ های زیر را برگرداند:
-
'no'
: مرورگر از Prompt API پشتیبانی می کند، اما در حال حاضر نمی توان از آن استفاده کرد. این ممکن است به دلایلی باشد، مانند فضای کافی در دسترس برای دانلود مدل. -
'readily'
: مرورگر از Prompt API پشتیبانی می کند و می توان بلافاصله از آن استفاده کرد. -
'after-download'
: مرورگر از Prompt API پشتیبانی می کند، اما ابتدا باید مدل را دانلود کند.
برای شروع دانلود مدل و ایجاد جلسه مدل زبان، تابع LanguageModel.availability()
ناهمزمان را فراخوانی کنید. اگر پاسخ به availability()
'after-download'
بود، بهتر است برای پیشرفت دانلود گوش دهید. به این ترتیب در صورتی که دانلود زمان بر باشد می توانید به کاربر اطلاع دهید.
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener("downloadprogress", (e) => {
console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
});
},
});
قابلیت های مدل
availability()
availability همچنین شما را از قابلیت های مدل زبان مطلع می کند. علاوه بر available
، شی فیلدهای زیر نیز دارد:
-
defaultTopK
: مقدار پیش فرض top-K (پیش فرض:3
). -
maxTopK
: حداکثر مقدار top-K (8
). -
defaultTemperature
: دمای پیش فرض (1.0
). مقدار دما باید بین0.0
و2.0
باشد.
await LanguageModel.availability();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}
یک جلسه ایجاد کنید
هنگامی که Prompt API می تواند اجرا شود، یک جلسه با تابع create()
ایجاد می کنید. می توانید مدل را با توابع prompt()
یا promptStreaming()
درخواست کنید.
جلسه خود را سفارشی کنید
هر جلسه را می توان با topK
و temperature
با استفاده از یک شی گزینه های اختیاری سفارشی کرد. مقادیر پیشفرض این پارامترها از LanguageModel.availability()
برگردانده میشوند.
const capabilities = await LanguageModel.availability();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
temperature: Math.max(availability.defaultTemperature * 1.2, 2.0),
topK: capabilities.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.tokensSoFar}/${session.maxTokens}
(${session.tokensLeft} left)`);
ماندگاری جلسه
هر جلسه زمینه گفتگو را پیگیری می کند. تا زمانی که پنجره زمینه جلسه پر شود، تعاملات قبلی برای تعاملات بعدی در نظر گرفته می شود.
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()
کلون کنید. زمینه مکالمه بازنشانی می شود، اما درخواست اولیه دست نخورده باقی می ماند. تابع 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 {available, defaultTemperature, defaultTopK, maxTopK } =
await LanguageModel.availability();
if (available !== 'no') {
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()
استفاده کنید که به شما امکان میدهد نتایج جزئی را همانطور که از مدل میآیند نشان دهید.
const {available, defaultTemperature, defaultTopK, maxTopK } =
await LanguageModel.availability();
if (available !== 'no') {
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);
}
}
promptStreaming()
ReadableStream
را برمیگرداند که تکههای آن بهطور متوالی بر روی یکدیگر ساخته میشوند. به عنوان مثال، "Hello,"
، "Hello world,"
، "Hello world I am,"
، "Hello world I am an AI."
. این رفتار مورد نظر نیست ما قصد داریم با دیگر APIهای جریان در پلتفرم، جایی که تکهها قطعات متوالی یک جریان طولانی هستند، هماهنگ شویم. این به این معنی است که خروجی دنباله ای مانند "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 در دسترس است.
شرکت کنید و بازخورد خود را به اشتراک بگذارید
ورودی شما میتواند مستقیماً بر نحوه ساخت و اجرای نسخههای آینده این API و همه APIهای AI داخلی تأثیر بگذارد.
- برای بازخورد در مورد اجرای Chrome، یک گزارش اشکال یا یک درخواست ویژگی ارسال کنید.
- بازخورد خود را در مورد شکل API با نظر دادن در مورد یک مشکل موجود یا با باز کردن یک مورد جدید در مخزن Prompt API GitHub به اشتراک بگذارید.
- پسوند نمونه Prompt API را در GitHub دانلود کنید.
- با پیوستن به گروه جامعه انکوباتور وب، در تلاش استانداردها شرکت کنید.
تاریخ انتشار: 11 نوامبر 2024، آخرین به روز رسانی: 20 می 2025
توضیح دهنده | وب | برنامه های افزودنی | وضعیت کروم | قصد |
---|---|---|---|---|
GitHub | مشاهده کنید | قصد آزمایش |
با Prompt API میتوانید درخواستهای زبان طبیعی را به Gemini Nano در مرورگر ارسال کنید.
راههای زیادی برای استفاده از Prompt API در برنامههای افزودنی Chrome وجود دارد. به عنوان مثال:
- رویدادهای تقویم فوری برنامه افزودنی Chrome را توسعه دهید که به طور خودکار جزئیات رویداد را از صفحات وب استخراج می کند، بنابراین کاربران می توانند ورودی های تقویم را تنها در چند مرحله ایجاد کنند.
- استخراج تماس بدون درز . افزونهای بسازید که اطلاعات تماس را از وبسایتها استخراج میکند و تماس با یک کسبوکار را برای کاربران آسانتر میکند یا جزئیات را به فهرست مخاطبین خود اضافه میکند.
- فیلتر محتوای پویا یک برنامه افزودنی Chrome ایجاد کنید که مقالات خبری را تجزیه و تحلیل می کند و به طور خودکار محتوا را بر اساس موضوعات تعریف شده توسط کاربر محو یا پنهان می کند.
اینها فقط چند احتمال هستند، اما ما هیجان زده هستیم که ببینیم چه چیزی ایجاد می کنید.
از Prompt API در برنامه های افزودنی استفاده کنید
دو تابع افزونه در فضای نام LanguageModel
در دسترس شماست:
-
availability()
برای بررسی توانایی مدل و موجود بودن آن. -
create()
برای شروع یک جلسه مدل زبان.
دانلود مدل
Prompt API از مدل Gemini Nano در کروم استفاده می کند. در حالی که API در Chrome تعبیه شده است، اولین باری که یک برنامه افزودنی از API استفاده می کند، مدل به طور جداگانه دانلود می شود.
برای تعیین اینکه آیا مدل آماده استفاده است، تابع LanguageModel.availability()
ناهمزمان را فراخوانی کنید. این باید یکی از پاسخ های زیر را برگرداند:
-
'no'
: مرورگر از Prompt API پشتیبانی می کند، اما در حال حاضر نمی توان از آن استفاده کرد. این ممکن است به دلایلی باشد، مانند فضای کافی در دسترس برای دانلود مدل. -
'readily'
: مرورگر از Prompt API پشتیبانی می کند و می توان بلافاصله از آن استفاده کرد. -
'after-download'
: مرورگر از Prompt API پشتیبانی می کند، اما ابتدا باید مدل را دانلود کند.
برای شروع دانلود مدل و ایجاد جلسه مدل زبان، تابع LanguageModel.availability()
ناهمزمان را فراخوانی کنید. اگر پاسخ به availability()
'after-download'
بود، بهتر است برای پیشرفت دانلود گوش دهید. به این ترتیب در صورتی که دانلود زمان بر باشد می توانید به کاربر اطلاع دهید.
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener("downloadprogress", (e) => {
console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
});
},
});
قابلیت های مدل
availability()
availability همچنین شما را از قابلیت های مدل زبان مطلع می کند. علاوه بر available
، شی فیلدهای زیر نیز دارد:
-
defaultTopK
: مقدار پیش فرض top-K (پیش فرض:3
). -
maxTopK
: حداکثر مقدار top-K (8
). -
defaultTemperature
: دمای پیش فرض (1.0
). مقدار دما باید بین0.0
و2.0
باشد.
await LanguageModel.availability();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}
یک جلسه ایجاد کنید
هنگامی که Prompt API می تواند اجرا شود، یک جلسه با تابع create()
ایجاد می کنید. می توانید مدل را با توابع prompt()
یا promptStreaming()
درخواست کنید.
جلسه خود را سفارشی کنید
هر جلسه را می توان با topK
و temperature
با استفاده از یک شی گزینه های اختیاری سفارشی کرد. مقادیر پیشفرض این پارامترها از LanguageModel.availability()
برگردانده میشوند.
const capabilities = await LanguageModel.availability();
// Initializing a new session must either specify both `topK` and
// `temperature` or neither of them.
const slightlyHighTemperatureSession = await LanguageModel.create({
temperature: Math.max(availability.defaultTemperature * 1.2, 2.0),
topK: capabilities.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.tokensSoFar}/${session.maxTokens}
(${session.tokensLeft} left)`);
ماندگاری جلسه
هر جلسه زمینه گفتگو را پیگیری می کند. تا زمانی که پنجره زمینه جلسه پر شود، تعاملات قبلی برای تعاملات بعدی در نظر گرفته می شود.
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()
کلون کنید. زمینه مکالمه بازنشانی می شود، اما درخواست اولیه دست نخورده باقی می ماند. تابع 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 {available, defaultTemperature, defaultTopK, maxTopK } =
await LanguageModel.availability();
if (available !== 'no') {
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()
استفاده کنید که به شما امکان میدهد نتایج جزئی را همانطور که از مدل میآیند نشان دهید.
const {available, defaultTemperature, defaultTopK, maxTopK } =
await LanguageModel.availability();
if (available !== 'no') {
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);
}
}
promptStreaming()
ReadableStream
را برمیگرداند که تکههای آن بهطور متوالی بر روی یکدیگر ساخته میشوند. به عنوان مثال، "Hello,"
، "Hello world,"
، "Hello world I am,"
، "Hello world I am an AI."
. این رفتار مورد نظر نیست ما قصد داریم با دیگر APIهای جریان در پلتفرم، جایی که تکهها قطعات متوالی یک جریان طولانی هستند، هماهنگ شویم. این به این معنی است که خروجی دنباله ای مانند "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 در دسترس است.
شرکت کنید و بازخورد خود را به اشتراک بگذارید
ورودی شما میتواند مستقیماً بر نحوه ساخت و اجرای نسخههای آینده این API و همه APIهای AI داخلی تأثیر بگذارد.
- برای بازخورد در مورد اجرای Chrome، یک گزارش اشکال یا یک درخواست ویژگی ارسال کنید.
- بازخورد خود را در مورد شکل API با نظر دادن در مورد یک مشکل موجود یا با باز کردن یک مورد جدید در مخزن Prompt API GitHub به اشتراک بگذارید.
- پسوند نمونه Prompt API را در GitHub دانلود کنید.
- با پیوستن به گروه جامعه انکوباتور وب، در تلاش استانداردها شرکت کنید.