Опубликовано: 11 ноября 2024 г., Последнее обновление: 20 мая 2025 г.
Объяснитель | Интернет | Расширения | Статус Хрома | Намерение |
---|---|---|---|---|
GitHub | Вид | Намерение экспериментировать |
С помощью 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.
Участвуйте и делитесь отзывами
Ваш вклад может напрямую повлиять на то, как мы создадим и реализуем будущие версии этого API, а также всех встроенных API ИИ.
- Чтобы оставить отзыв о реализации Chrome, отправьте отчет об ошибке или запрос на новую функцию .
- Поделитесь своим мнением о форме API, прокомментировав существующую проблему или открыв новую в репозитории Prompt API GitHub .
- Загрузите пример расширения Prompt API на GitHub .
- Примите участие в работе над стандартами, присоединившись к группе сообщества Web Incubator .