Prompt API

تاریخ انتشار: 11 نوامبر 2024

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

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

Prompt API در نسخه آزمایشی اصلی برای برنامه‌های افزودنی Chrome در دسترس است. توسعه‌دهندگان وب می‌توانند با پیوستن به برنامه پیش‌نمایش اولیه ، از API اکتشافی که برای نمونه‌سازی و کشف موارد استفاده اضافی در نظر گرفته شده است استفاده کنند.

راه‌های زیادی برای استفاده از Prompt API در برنامه‌های افزودنی Chrome وجود دارد. به عنوان مثال:

  • رویدادهای تقویم فوری برنامه افزودنی Chrome را توسعه دهید که به طور خودکار جزئیات رویداد را از صفحات وب استخراج می کند، بنابراین کاربران می توانند ورودی های تقویم را تنها در چند مرحله ایجاد کنند.
  • استخراج تماس بدون درز . افزونه‌ای بسازید که اطلاعات تماس را از وب‌سایت‌ها استخراج می‌کند و تماس با یک کسب‌وکار را برای کاربران آسان‌تر می‌کند یا جزئیات را به فهرست مخاطبین خود اضافه می‌کند.
  • فیلتر محتوای پویا یک برنامه افزودنی Chrome ایجاد کنید که مقالات خبری را تجزیه و تحلیل می کند و به طور خودکار محتوا را بر اساس موضوعات تعریف شده توسط کاربر محو یا پنهان می کند.

اینها فقط چند احتمال هستند، اما ما هیجان زده هستیم که ببینیم چه چیزی ایجاد می کنید.

شروع کنید

برای استفاده از Prompt API در برنامه‌های افزودنی Chrome، مجوز "aiLanguageModelOriginTrial" را به همراه هر مجوز دیگری که ممکن است برنامه افزودنی به آن نیاز داشته باشد به manifest.json برنامه افزودنی اضافه کنید.

{
  "manifest_version": 3,
  "name": "YOUR_EXTENSION_NAME",
  "key": "YOUR_EXTENSION_KEY",
  "permissions": ["aiLanguageModelOriginTrial"]
}

این اجازه موقت می دهد که فقط برای مدت زمان آزمایش اولیه معتبر است. اگر API راه‌اندازی شد، باید افزونه خود را به‌روزرسانی و دوباره آپلود کنید، مجوز منقضی شده را حذف کرده و مجوزهای نهایی را جایگزین آن کنید.

به‌علاوه، توصیه می‌کنیم با افزودن ویژگی key به مانیفست خود ، شناسه برنامه افزودنی ثابتی داشته باشید

به آزمایش اولیه بپیوندید

برای افزودن Prompt API به برنامه افزودنی Chrome:

  1. به نسخه آزمایشی اولیه Prompt API بپیوندید که در Chrome 131 تا 136 اجرا می شود.
  2. از URL برنامه افزودنی chrome-extension://YOUR_EXTENSION_ID به عنوان منبع وب استفاده کنید. برای مثال، chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk .

  3. مانیفست خود را به روز کنید تا رمز آزمایشی خود را به عنوان آرایه اضافه کنید.

    {
      "manifest_version": 3,
      "name": "YOUR_EXTENSION_NAME",
      "key": "YOUR_EXTENSION_KEY",
      "permissions": ["aiLanguageModelOriginTrial"],
      "trial_tokens": ["GENERATED_TOKEN"],
    }
    

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

پس از درخواست مجوز برای استفاده از Prompt API، می توانید برنامه افزودنی خود را بسازید. دو تابع افزونه در فضای نام chrome.aiOriginTrial.languageModel در دسترس شماست:

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

دانلود مدل

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

برای تعیین اینکه آیا مدل آماده استفاده است، تابع ناهمزمان chrome.aiOriginTrial.languageModel.capabilities() را فراخوانی کنید. یک شیء AILanguageModelCapabilities را با یک فیلد available برمی‌گرداند که می‌تواند سه مقدار ممکن را بگیرد:

  • 'no' : مرورگر فعلی از Prompt API پشتیبانی می کند، اما در حال حاضر نمی توان از آن استفاده کرد. این ممکن است به دلایلی باشد، مانند فضای کافی در دسترس برای دانلود مدل.
  • 'readily' : مرورگر فعلی از Prompt API پشتیبانی می کند و می توان بلافاصله از آن استفاده کرد.
  • 'after-download' : مرورگر فعلی از Prompt API پشتیبانی می کند، اما ابتدا باید مدل را دانلود کند.

برای شروع دانلود مدل و ایجاد جلسه مدل زبان، تابع ناهمزمان chrome.aiOriginTrial.languageModel.create() را فراخوانی کنید. اگر پاسخ به capabilities() 'after-download' بود، بهتر است برای پیشرفت دانلود گوش دهید. به این ترتیب در صورتی که دانلود زمان بر باشد می توانید به کاربر اطلاع دهید.

const session = await chrome.aiOriginTrial.languageModel.create({
  monitor(m) {
    m.addEventListener("downloadprogress", (e) => {
      console.log(`Downloaded ${e.loaded} of ${e.total} bytes.`);
    });
  },
});

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

تابع capabilities() همچنین شما را از قابلیت های مدل زبان مطلع می کند. جدا از available ، شیء حاصل از AILanguageModelCapabilities دارای فیلدهای زیر نیز می باشد:

  • defaultTopK : مقدار پیش فرض top-K (پیش فرض: 3 ).
  • maxTopK : حداکثر مقدار top-K ( 8 ).
  • defaultTemperature : دمای پیش فرض ( 1.0 ). مقدار دما باید بین 0.0 و 2.0 باشد.
await chrome.aiOriginTrial.languageModel.capabilities();
// {available: 'readily', defaultTopK: 3, maxTopK: 8, defaultTemperature: 1}

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

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

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

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

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

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

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

const session = await chrome.aiOriginTrial.languageModel.create({
  signal: controller.signal,
})
سیستم درخواست می کند

با اعلان های سیستم، می توانید به مدل زبان مقداری زمینه بدهید.

const session = await chrome.aiOriginTrial.languageModel.create({
  systemPrompt: 'You are a helpful and friendly assistant.',
});
await session.prompt('What is the capital of Italy?');
// 'The capital of Italy is Rome.'

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

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

const session = await chrome.aiOriginTrial.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 chrome.aiOriginTrial.languageModel.create({
  systemPrompt: '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 chrome.aiOriginTrial.languageModel.capabilities();

if (available !== 'no') {
  const session = await chrome.aiOriginTrial.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 chrome.aiOriginTrial.languageModel.capabilities();

if (available !== 'no') {
  const session = await chrome.aiOriginTrial.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 در دسترس است.

رابط نمایشی برای Prompt API

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

با ملحق شدن به نسخه آزمایشی اولیه، آزمایش Prompt API را اکنون در برنامه‌های افزودنی Chrome خود شروع کنید و بازخورد خود را به اشتراک بگذارید. ورودی شما می‌تواند مستقیماً بر نحوه ساخت و اجرای نسخه‌های آینده این API و همه APIهای AI داخلی تأثیر بگذارد.