Опубликовано: 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
.
Идентификатор расширения создается динамически. После назначения вы можете заставить идентификатор оставаться стабильным, добавив свойство key
в манифест.
После того как вы подписались на исходную пробную версию, вы получаете сгенерированный токен, который необходимо передать в массиве в качестве значения поля trial_tokens
в манифесте.
{
"manifest_version": 3,
"name": "YOUR_EXTENSION_NAME",
"permissions": ["aiLanguageModelOriginTrial"],
"trial_tokens": ["GENERATED_TOKEN"],
}
Добавить поддержку локального хоста
Чтобы получить доступ к Prompt API на localhost
во время пробной версии Origin, вам необходимо обновить Chrome до последней версии. Затем выполните следующие действия:
- Откройте Chrome на одной из этих платформ: Windows, Mac или Linux.
- Перейдите на
chrome://flags/#optimization-guide-on-device-model
. - Выберите «Включено BypassPerfRequirement» .
- При этом проверки производительности пропускаются, что может помешать вам загрузить Gemini Nano на ваше устройство.
- Нажмите «Перезапустить» или перезапустите Chrome.
Используйте 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
также имеет следующие поля:
-
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 прямо сейчас в своих расширениях Chrome, присоединившись к пробной версии Origin и поделитесь своими отзывами. Ваш вклад может напрямую повлиять на то, как мы создаем и реализуем будущие версии этого API, а также всех встроенных API-интерфейсов искусственного интеллекта.
- Чтобы получить отзыв о реализации Chrome, отправьте отчет об ошибке или запросите новую функцию .
- Поделитесь своим мнением о форме API Prompt API, комментируя существующую проблему или открыв новую в репозитории Prompt API GitHub .
- Ознакомьтесь с примером расширения Prompt API на GitHub .
- Примите участие в разработке стандартов, присоединившись к группе сообщества Web Incubator .