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

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

Prompt API for Extensions اکنون به صورت آزمایشی اصلی در دسترس است، بنابراین می‌توانید افزونه‌های Chrome را بسازید که از Gemini Nano ، کارآمدترین مدل زبان ما، در مرورگر استفاده می‌کند.

موارد استفاده زیادی برای Prompt API با برنامه‌های افزودنی Chrome وجود دارد. در اینجا چند نمونه آورده شده است:

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

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

در دسترس بودن

  • برای ایجاد برنامه‌های افزودنی با این API، به نسخه آزمایشی اولیه Prompt API بپیوندید که در Chrome 131 تا 136 اجرا می‌شود. اگر در آزمایش‌های مبدأ تازه کار هستید، این برنامه‌های با زمان محدود برای همه برنامه‌نویسان باز هستند و دسترسی زودهنگام به ویژگی‌های پلتفرم آزمایشی را ارائه می‌دهند. توسعه‌دهندگان می‌توانند آزمایش کنند، بازخورد کاربران را جمع‌آوری کنند، و برای راه‌اندازی آینده تکرار کنند.
    • در حالی که ممکن است محدودیت های استفاده وجود داشته باشد، می توانید این ویژگی ها را برای آزمایش زنده و جمع آوری بازخورد کاربران ادغام کنید. هدف این است که به تکرارهای آینده این API اطلاع رسانی کنیم، زیرا در جهت دسترسی گسترده تر کار می کنیم.
  • برای نگاهی اولیه به APIهای جدید هوش مصنوعی داخلی و دسترسی به بحث در لیست پستی ما، به برنامه پیش نمایش اولیه بپیوندید .

در آزمایش مبدا شرکت کنید

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

برای ثبت نام برنامه افزودنی خود برای نسخه آزمایشی اصلی، از URL chrome-extension://YOUR_EXTENSION_ID به عنوان منبع وب استفاده کنید. برای مثال، chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk .

ثبت نام آزمایشی مبدا Chrome

شناسه برنامه افزودنی به صورت پویا ایجاد می شود. پس از تخصیص، می توانید با افزودن ویژگی key به مانیفست، شناسه را مجبور کنید ثابت بماند.

پس از ثبت نام برای نسخه آزمایشی اصلی، یک توکن تولید شده دریافت می کنید که باید آن را در یک آرایه به عنوان مقدار فیلد trial_tokens در مانیفست ارسال کنید.

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

پشتیبانی را به لوکال هاست اضافه کنید

برای دسترسی به Prompt API در localhost در طول آزمایش اولیه، باید Chrome را به آخرین نسخه به‌روزرسانی کنید . سپس، این مراحل را دنبال کنید:

  1. Chrome را در یکی از این پلتفرم‌ها باز کنید: Windows، Mac، یا Linux.
  2. به chrome://flags/#optimization-guide-on-device-model بروید.
  3. Enabled BypassPerfRequirement را انتخاب کنید.
    • این کار از بررسی‌های عملکردی که ممکن است مانع از دانلود Gemini Nano در دستگاهتان شود، صرفنظر می‌کند.
  4. روی راه اندازی مجدد یا راه اندازی مجدد کروم کلیک کنید.

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