Подсказка API

Опубликовано: 11 ноября 2024 г., Последнее обновление: 20 мая 2025 г.

Объяснитель Интернет Расширения Статус Chrome Намерение
GitHub Пробный запуск В пробной версии Origin Хром 138 Вид Намерение экспериментировать

С помощью Prompt API вы можете отправлять запросы на естественном языке в Gemini Nano через браузер.

Существует множество способов использовать Prompt API в расширениях Chrome. Например:

  • Мгновенные события календаря . Разработайте расширение для Chrome, которое автоматически извлекает сведения о событиях с веб-страниц, чтобы пользователи могли создавать записи в календаре всего за несколько шагов.
  • Бесперебойное извлечение контактов . Создайте расширение, которое извлекает контактную информацию с веб-сайтов, упрощая для пользователей возможность связаться с компанией или добавить данные в свой список контактов.
  • Динамическая фильтрация контента . Создайте расширение для Chrome, которое анализирует новостные статьи и автоматически размывает или скрывает контент на основе заданных пользователем тем.

Это всего лишь несколько возможностей, и нам не терпится увидеть, что вы создадите.

Ознакомьтесь с требованиями к оборудованию

Для разработчиков и пользователей, использующих эти API в Chrome, действуют следующие требования. Требования к работе других браузеров могут отличаться.

API определения языка и переводчика работают в Chrome на десктопе. Эти API не работают на мобильных устройствах. API Prompt, API Summarizer, API Writer и API Rewriter работают в Chrome при соблюдении следующих условий:

  • Операционная система : Windows 10 или 11; macOS 13+ (Ventura и выше); или Linux. Chrome для Android, iOS и ChromeOS пока не поддерживаются API, использующими Gemini Nano.
  • Хранилище : не менее 22 ГБ свободного места на томе, содержащем ваш профиль Chrome.
  • Видеокарта : строго более 4 ГБ видеопамяти.
  • Сеть : Безлимитные данные или безлимитное соединение.

Точный размер Gemini Nano может меняться по мере обновления модели браузером. Чтобы узнать текущий размер, посетите chrome://on-device-internals и перейдите в раздел «Статус модели» . Откройте указанный путь к файлу , чтобы узнать размер модели.

Используйте Prompt API в расширениях

Перед использованием этого API ознакомьтесь с Политикой Google в отношении запрещенного использования генеративного ИИ .

В пространстве имен LanguageModel вам доступны две функции расширения:

  • availability() для проверки возможностей модели и ее доступности.
  • create() для начала сеанса языковой модели.

Загрузка модели

API Prompt использует модель Gemini Nano в Chrome. Хотя 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} 

Создать сеанс

После запуска API Prompt вы создаёте сеанс с помощью функции create() . Вы можете вызвать модель с помощью функции prompt() или promptStreaming() .

Настройте свой сеанс

Для каждого сеанса можно настроить topK и temperature с помощью необязательного объекта options. Значения по умолчанию для этих параметров возвращаются функцией 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, установите демонстрационное расширение. Исходный код расширения доступен на GitHub.

Демонстрационный интерфейс для Prompt API

Участвуйте и делитесь отзывами

Ваш вклад может напрямую повлиять на то, как мы создадим и реализуем будущие версии этого API, а также всех встроенных API ИИ.