Prompt API

تاریخ انتشار: 20 می 2025، آخرین به روز رسانی: 21 سپتامبر 2025

توضیح دهنده وب برنامه های افزودنی وضعیت کروم قصد
GitHub آزمایش مبدا در نسخه آزمایشی Origin کروم 138 مشاهده کنید قصد آزمایش

با 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 : به طور دقیق بیش از 4 گیگابایت VRAM.
  • شبکه : داده های نامحدود یا اتصال نامحدود.

اندازه دقیق 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() شما را از پارامترهای مدل زبان مطلع می کند. شی دارای فیلدهای زیر است:

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 داخلی تأثیر بگذارد.