Prompt API

تاریخ انتشار: 20 می 2025

توضیح دهنده وب برنامه های افزودنی وضعیت کروم قصد
GitHub تجربیدر EPP کروم بتا کروم 137 بتا مشاهده کنید قصد آزمایش

با Prompt API می‌توانید درخواست‌های زبان طبیعی را به Gemini Nano در مرورگر ارسال کنید.

راه های زیادی برای استفاده از Prompt API وجود دارد. در یک برنامه وب یا وب سایت، می توانید ایجاد کنید:

  • جستجوی مبتنی بر هوش مصنوعی : به سوالات بر اساس محتوای یک صفحه وب پاسخ دهید.
  • فیدهای خبری شخصی شده : فیدی بسازید که به صورت پویا مقالات را با دسته بندی طبقه بندی می کند و به کاربران امکان می دهد آن محتوا را فیلتر کنند.

اینها فقط چند احتمال هستند و ما از دیدن آنچه شما ایجاد می کنید هیجان زده هستیم.

الزامات سخت افزاری را بررسی کنید

زبان شناساگر و API های مترجم فقط روی دسکتاپ در کروم کار می کنند.

Prompt API، Summarizer API، Writer API، و Rewriter API در Chrome کار می‌کنند که شرایط زیر رعایت شود:

  • سیستم عامل : ویندوز 10 یا 11؛ macOS 13+ (ونتورا و به بعد)؛ یا لینوکس Chrome for Android، iOS و ChromeOS هنوز توسط APIهای ما که توسط Gemini Nano پشتیبانی می‌شوند، پشتیبانی نمی‌شوند.
  • فضای ذخیره سازی : حداقل 22 گیگابایت در حجمی که نمایه کروم شما را در خود دارد.
  • GPU : به طور دقیق بیش از 4 گیگابایت VRAM.
  • شبکه : داده های نامحدود یا اتصال نامحدود.

این الزامات برای شما در فرآیند توسعه و کاربرانی که با ویژگی هایی که می سازید کار می کنند وجود دارد.

از Prompt API استفاده کنید

قبل از استفاده از این API، خط‌مشی استفاده‌های ممنوعه هوش مصنوعی مولد Google را تأیید کنید.

در فضای نام LanguageModel دو تابع در دسترس شماست:

  • availability() برای بررسی توانایی مدل و موجود بودن آن.
  • create() برای شروع یک جلسه مدل زبان.

دانلود مدل

Prompt API از مدل Gemini Nano در کروم استفاده می کند. در حالی که API در Chrome تعبیه شده است، اولین باری که یک منبع از API استفاده می کند، مدل به طور جداگانه دانلود می شود.

برای تعیین اینکه آیا مدل آماده استفاده است، تابع LanguageModel.availability() ناهمزمان را فراخوانی کنید. این باید یکی از پاسخ های زیر را برگرداند:

  • "unavailable" به این معنی است که پیاده سازی گزینه های درخواستی را پشتیبانی نمی کند یا اصلاً از درخواست یک مدل زبان پشتیبانی نمی کند.
  • "downloadable" به این معنی است که پیاده‌سازی از گزینه‌های درخواستی پشتیبانی می‌کند، اما قبل از اینکه بتواند با استفاده از آن گزینه‌ها جلسه ایجاد کند، باید چیزی را دانلود کند (مثلاً خود مدل زبان یا یک تنظیم دقیق).
  • "downloading" به این معنی است که پیاده‌سازی از گزینه‌های درخواستی پشتیبانی می‌کند، اما قبل از اینکه بتواند با استفاده از آن گزینه‌ها جلسه ایجاد کند، باید یک عملیات دانلود در حال انجام را تمام کند.
  • "available" به این معنی است که پیاده سازی از گزینه های درخواستی بدون نیاز به دانلود جدید پشتیبانی می کند.

برای شروع دانلود مدل و ایجاد جلسه مدل زبان، تابع LanguageModel.availability() ناهمزمان را فراخوانی کنید. اگر پاسخ به availability() 'downloadable' بود، بهترین تمرین گوش دادن به پیشرفت دانلود است. به این ترتیب در صورتی که دانلود زمان بر باشد می توانید به کاربر اطلاع دهید.

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

قابلیت های مدل

params() شما را از پارامترهای مدل زبان مطلع می کند. شی دارای فیلدهای زیر است:

  • defaultTopK : مقدار پیش فرض top-K (پیش فرض: 3 ).
  • maxTopK : حداکثر مقدار top-K ( 8 ).
  • defaultTemperature : دمای پیش فرض ( 1.0 ). مقدار دما باید بین 0.0 و 2.0 باشد.
  • maxTemperature : حداکثر دما.
await LanguageModel.params();
// {defaultTopK: 3, maxTopK: 8, defaultTemperature: 1, maxTemperature: 2}

یک جلسه ایجاد کنید

هنگامی که Prompt API می تواند اجرا شود، یک جلسه با تابع create() ایجاد می کنید. می توانید مدل را با توابع prompt() یا promptStreaming() درخواست کنید.

جلسه خود را سفارشی کنید

هر جلسه را می توان با topK و temperature با استفاده از یک شی گزینه های اختیاری سفارشی کرد. مقادیر پیش‌فرض این پارامترها از LanguageModel.params() برگردانده می‌شوند.

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

شی گزینه اختیاری تابع create() همچنین یک فیلد signal می گیرد که به شما امکان می دهد یک AbortSignal را برای از بین بردن جلسه ارسال کنید.

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

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

درخواست های اولیه

با اعلان های اولیه، می توانید مدل زبان را با زمینه ای در مورد تعاملات قبلی ارائه دهید، به عنوان مثال، به کاربر اجازه می دهد یک جلسه ذخیره شده را پس از راه اندازی مجدد مرورگر از سر بگیرد.

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

محدودیت های جلسه

یک جلسه مدل زبان معین دارای حداکثر تعداد نشانه هایی است که می تواند پردازش کند. با استفاده از ویژگی های زیر در شی جلسه می توانید میزان استفاده و پیشرفت به سمت آن حد را بررسی کنید:

console.log(`${session.inputUsage}/${session.inputQuota}`);

ماندگاری جلسه

هر جلسه زمینه گفتگو را پیگیری می کند. تا زمانی که پنجره زمینه جلسه پر شود، تعاملات قبلی برای تعاملات بعدی در نظر گرفته می شود.

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

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

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

یک جلسه را شبیه سازی کنید

برای حفظ منابع، می توانید یک جلسه موجود را با تابع clone() کلون کنید. زمینه مکالمه بازنشانی می شود، اما درخواست اولیه دست نخورده باقی می ماند. تابع clone() یک شی گزینه اختیاری با یک فیلد signal می گیرد که به شما امکان می دهد یک AbortSignal را برای از بین بردن جلسه کلون شده ارسال کنید.

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

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

مدل را اعلان کنید

می توانید مدل را با توابع prompt() یا promptStreaming() درخواست کنید.

خروجی بدون جریان

اگر انتظار یک نتیجه کوتاه را دارید، می توانید از تابع prompt() استفاده کنید که پس از در دسترس بودن پاسخ را برمی گرداند.

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

const available = await LanguageModel.availability();

if (available !== 'unavailable') {
  const session = await LanguageModel.create();

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

خروجی جریانی

اگر انتظار پاسخ طولانی‌تری دارید، باید از تابع promptStreaming() استفاده کنید که به شما امکان می‌دهد نتایج جزئی را همانطور که از مدل می‌آیند نشان دهید. تابع promptStreaming() یک ReadableStream برمی گرداند.

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

const available = await LanguageModel.availability();
if (available !== 'unavailable') {
  const session = await LanguageModel.create();

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

اجرای یک درخواست را متوقف کنید

هر دو prompt() و promptStreaming() پارامتر دوم اختیاری را با یک فیلد signal می پذیرند که به شما امکان می دهد اجرای دستورات را متوقف کنید.

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

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

یک جلسه را خاتمه دهید

اگر دیگر نیازی به جلسه ندارید destroy() را به منابع آزاد فراخوانی کنید. هنگامی که یک جلسه از بین می رود، دیگر نمی توان از آن استفاده کرد و هر گونه اجرای مداوم لغو می شود. اگر قصد دارید اغلب مدل را درخواست کنید، ممکن است بخواهید جلسه را حفظ کنید زیرا ایجاد یک جلسه ممکن است کمی طول بکشد.

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

session.destroy();

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

قابلیت های چندوجهی

Prompt API از ورودی های صوتی و تصویری Chrome 138 Canary برای آزمایش محلی پشتیبانی می کند. API یک خروجی متنی را برمی گرداند.

با این قابلیت ها می توانید:

  • به کاربران اجازه دهید پیام های صوتی ارسال شده در یک برنامه چت را رونویسی کنند.
  • تصویری را که برای استفاده در عنوان یا متن جایگزین در وب سایت خود آپلود شده است توصیف کنید.
const session = await LanguageModel.create({
  // { type: "text" } is not necessary to include explicitly, unless
  // you also want to include expected input languages for text.
  expectedInputs: [
    { type: "audio" },
    { type: "image" }
  ]
});

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

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

console.log(response1);

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

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

دموهای چندوجهی

نسخه ی نمایشی Mediarecorder Audio Prompt را برای استفاده از Prompt API با ورودی صدا و نسخه ی نمایشی Canvas Image Prompt را برای استفاده از Prompt API با ورودی تصویر ببینید.

بازخورد

بازخورد شما به اطلاع رسانی آینده این API و بهبود Gemini Nano کمک می کند. حتی ممکن است منجر به ایجاد APIهای وظیفه اختصاصی شود (مانند APIهایی برای رونویسی صوتی یا توصیف تصویر)، و اطمینان حاصل شود که ما نیازهای شما و نیازهای کاربرانتان را برآورده می کنیم.

شرکت کنید و بازخورد خود را به اشتراک بگذارید

ورودی شما می‌تواند مستقیماً بر نحوه ساخت و اجرای نسخه‌های آینده این API و همه APIهای هوش مصنوعی داخلی تأثیر بگذارد.