Prompt API в расширениях Chrome, Prompt API в расширениях Chrome

Опубликовано: 11 ноября 2024 г.

Prompt API для расширений теперь доступен в пробной версии Origin, поэтому вы можете создавать расширения Chrome, использующие Gemini Nano , нашу самую эффективную языковую модель, в браузере.

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

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

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

Доступность

  • Присоединяйтесь к пробной версии Prompt API origin , работающей в Chrome 131–136, чтобы создавать расширения с помощью этого API. Если вы новичок в пробных версиях Origin , это ограниченные по времени программы, открытые для всех разработчиков и предлагающие ранний доступ к экспериментальным функциям платформы. Разработчики могут тестировать, собирать отзывы пользователей и работать над будущим запуском.
    • Хотя могут существовать ограничения на использование, вы можете интегрировать эти функции для тестирования в реальном времени и сбора отзывов пользователей. Цель — информировать о будущих итерациях этого API, поскольку мы работаем над его более широкой доступностью.
  • Присоединяйтесь к программе раннего предварительного просмотра, чтобы заранее ознакомиться с новыми встроенными API-интерфейсами искусственного интеллекта и получить доступ к обсуждениям в нашем списке рассылки.

Примите участие в испытании происхождения

Чтобы использовать Prompt API в расширениях Chrome, добавьте разрешение "aiLanguageModelOriginTrial" в файл manifest.json , как показано в следующем фрагменте, а также любые другие разрешения, которые могут потребоваться вашему расширению.

Чтобы зарегистрировать свое расширение для пробной версии Origin, используйте URL-адрес chrome-extension://YOUR_EXTENSION_ID в качестве веб-источника . Например, chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk .

Регистрация пробной версии Chrome Origin

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

После того как вы подписались на исходную пробную версию, вы получаете сгенерированный токен, который необходимо передать в массиве в качестве значения поля trial_tokens в манифесте. Посмотрите фрагмент для примера.

{
  "permissions": ["aiLanguageModelOriginTrial"],
  "trial_tokens": ["GENERATED_TOKEN"],
}

Используйте API подсказок

После того как вы запросили разрешение на использование Prompt API, вы можете создать свое расширение. В пространстве имен chrome.aiOriginTrial.languageModel вам доступны две новые функции расширения:

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

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

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

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 and 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, присоединившись к пробной версии Origin и поделитесь своими отзывами. Ваш вклад может напрямую повлиять на то, как мы создаем и реализуем будущие версии этого API, а также всех встроенных API-интерфейсов искусственного интеллекта.

,

Опубликовано: 11 ноября 2024 г.

Prompt API для расширений теперь доступен в пробной версии, поэтому вы можете создавать расширения Chrome, использующие Gemini Nano , нашу самую эффективную языковую модель, в браузере.

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

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

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

Доступность

  • Присоединяйтесь к пробной версии Prompt API origin , работающей в Chrome 131–136, чтобы создавать расширения с помощью этого API. Если вы новичок в пробных версиях Origin , это ограниченные по времени программы, открытые для всех разработчиков и предлагающие ранний доступ к экспериментальным функциям платформы. Разработчики могут тестировать, собирать отзывы пользователей и работать над будущим запуском.
    • Хотя могут существовать ограничения на использование, вы можете интегрировать эти функции для тестирования в реальном времени и сбора отзывов пользователей. Цель — информировать о будущих итерациях этого API, поскольку мы работаем над его более широкой доступностью.
  • Присоединяйтесь к программе ранней предварительной версии, чтобы заранее ознакомиться с новыми встроенными API-интерфейсами искусственного интеллекта и получить доступ к обсуждению в нашем списке рассылки.

Примите участие в испытании происхождения

Чтобы использовать Prompt API в расширениях Chrome, добавьте разрешение "aiLanguageModelOriginTrial" в файл manifest.json , как показано в следующем отрывке, а также любые другие разрешения, которые могут потребоваться вашему расширению.

Чтобы зарегистрировать расширение для пробной версии Origin, используйте URL-адрес chrome-extension://YOUR_EXTENSION_ID в качестве веб-источника . Например, chrome-extension://ljjhjaakmncibonnjpaoglbhcjeolhkk .

Регистрация пробной версии Chrome Origin

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

После того как вы подписались на исходную пробную версию, вы получаете сгенерированный токен, который необходимо передать в массиве в качестве значения поля trial_tokens в манифесте. Посмотрите фрагмент для примера.

{
  "permissions": ["aiLanguageModelOriginTrial"],
  "trial_tokens": ["GENERATED_TOKEN"],
}

Используйте API подсказок

После того как вы запросили разрешение на использование Prompt API, вы можете создать свое расширение. В пространстве имен chrome.aiOriginTrial.languageModel доступны две новые функции расширения:

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

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

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

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 and 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, присоединившись к пробной версии Origin и поделитесь своими отзывами. Ваш вклад может напрямую повлиять на то, как мы создаем и реализуем будущие версии этого API, а также всех встроенных API-интерфейсов искусственного интеллекта.