Опубликовано: 20 мая 2025 г., Последнее обновление: 21 сентября 2025 г.
| Объяснитель | Интернет | Расширения | Статус Chrome | Намерение |
|---|---|---|---|---|
| GitHub | Вид | Намерение экспериментировать |
С помощью Prompt API вы можете отправлять запросы на естественном языке в Gemini Nano через браузер.
API Prompt можно использовать разными способами. Например, можно создать:
- Поиск на основе искусственного интеллекта : отвечайте на вопросы на основе содержания веб-страницы.
- Персонализированные новостные ленты : создайте ленту, которая динамически классифицирует статьи по категориям и позволяет пользователям фильтровать этот контент.
- Пользовательские фильтры контента . Анализируйте новостные статьи и автоматически размывайте или скрывайте контент на основе заданных пользователем тем.
- Создание событий в календаре . Разработайте расширение для Chrome, которое автоматически извлекает сведения о событиях с веб-страниц, чтобы пользователи могли создавать записи в календаре всего за несколько шагов.
- Бесперебойное извлечение контактов . Создайте расширение, которое извлекает контактную информацию с веб-сайтов, упрощая для пользователей возможность связаться с компанией или добавить данные в свой список контактов.
Это всего лишь несколько возможностей, и нам не терпится увидеть, что вы создадите.
Ознакомьтесь с требованиями к оборудованию
Для разработчиков и пользователей, использующих эти API в Chrome, действуют следующие требования. Требования к работе других браузеров могут отличаться.
API определения языка и переводчика работают в Chrome на десктопе. Эти API не работают на мобильных устройствах. API Prompt, API Summarizer, API Writer, API Rewriter и API Proofreader работают в Chrome при соблюдении следующих условий:
- Операционная система : Windows 10 или 11; macOS 13+ (Ventura и выше); Linux; или ChromeOS (начиная с платформы 16389.0.0 и выше) на устройствах Chromebook Plus . Chrome для Android, iOS и ChromeOS на устройствах, отличных от Chromebook Plus, пока не поддерживаются API, использующими Gemini Nano.
- Хранилище : не менее 22 ГБ свободного места на томе, содержащем ваш профиль Chrome.
- Графический процессор или центральный процессор : встроенные модели могут работать с графическим процессором или центральным процессором.
- Видеокарта : строго более 4 ГБ видеопамяти.
- Процессор : 16 ГБ ОЗУ или более и 4 ядра ЦП или более.
- Сеть : Безлимитные данные или безлимитное соединение.
Точный размер Gemini Nano может меняться по мере обновления модели браузером. Чтобы узнать текущий размер, посетите chrome://on-device-internals .
Используйте API Prompt
API Prompt использует модель Gemini Nano в Chrome. Хотя API встроен в Chrome, модель загружается отдельно при первом использовании API источником. Перед использованием этого API ознакомьтесь с Политикой Google в отношении запрещённого использования генеративного ИИ .
Чтобы определить, готова ли модель к использованию, вызовите LanguageModel.availability() .
const availability = await LanguageModel.availability(); Чтобы запустить загрузку и создать экземпляр языковой модели, проверьте активацию пользователя . Затем вызовите функцию create() .
const session = await LanguageModel.create({ monitor(m) { m.addEventListener('downloadprogress', (e) => { console.log(`Downloaded ${e.loaded * 100}%`); }); }, }); Если ответом на availability() была downloading , ожидайте хода загрузки и информируйте пользователя , поскольку загрузка может занять некоторое время.
Параметры модели
Функция params() информирует о параметрах языковой модели. Объект имеет следующие поля:
-
defaultTopK: значение top-K по умолчанию. -
maxTopK: максимальное значение top-K . -
defaultTemperature: Температура по умолчанию. -
maxTemperature: максимальная температура.
await LanguageModel.params(); // {defaultTopK: 3, maxTopK: 128, defaultTemperature: 1, maxTemperature: 2} Создать сеанс
Как только API Prompt сможет запуститься, вы создаете сеанс с помощью функции create() .
Для каждого сеанса можно настроить 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. [...]', }, ], }); Ограничить ответы префиксом
Вы можете добавить роль "assistant" в дополнение к предыдущим ролям, чтобы подробнее рассказать о предыдущих ответах модели. Например:
const followup = await session.prompt([ { role: "user", content: "I'm nervous about my presentation tomorrow" }, { role: "assistant", content: "Presentations are tough!" } ]); В некоторых случаях вместо запроса нового ответа может потребоваться предварительно заполнить часть сообщения с ответом на роль "assistant" . Это может быть полезно для того, чтобы языковая модель использовала определённый формат ответа. Для этого добавьте prefix: true к завершающему сообщению с ответом на роль "assistant" . Например:
const characterSheet = await session.prompt([ { role: 'user', content: 'Create a TOML character sheet for a gnome barbarian', }, { role: 'assistant', content: '```toml\n', prefix: true, }, ]); Добавить ожидаемые входные и выходные данные
API Prompt поддерживает мультимодальные функции и несколько языков. Задайте модальности и языки expectedInputs и expectedOutputs при создании сеанса.
-
type: Ожидается модальность.- Для
expectedInputsэто может бытьtext,imageилиaudio. - Для
expectedOutputsAPI Prompt допускает толькоtext.
- Для
-
languages: Массив для установки ожидаемого языка или языков. API Prompt принимает значения"en","ja"и"es". Поддержка дополнительных языков находится в разработке.- Для
expectedInputsзадайте язык системных подсказок и один или несколько ожидаемых языков пользовательских подсказок. - Установите один или несколько
expectedOutputsязыков вывода.
- Для
const session = await LanguageModel.create({ expectedInputs: [ { type: "text", languages: ["en" /* system prompt */, "ja" /* user prompt */] } ], expectedOutputs: [ { type: "text", languages: ["ja"] } ] }); Вы можете получить исключение DOMException "NotSupportedError" , если модель обнаружит неподдерживаемые входные или выходные данные.
Мультимодальные возможности
Используя эти возможности, вы сможете:
- Разрешить пользователям транскрибировать аудиосообщения, отправленные в чат-приложении.
- Опишите изображение, загруженное на ваш веб-сайт, для использования в подписи или альтернативном тексте.
Ознакомьтесь с демонстрацией Mediarecorder Audio Prompt по использованию Prompt API с аудиовходом и демонстрацией Canvas Image Prompt по использованию Prompt API с вводом изображений.
Добавить сообщения
Вывод может занять некоторое время, особенно при использовании подсказок с мультимодальными входными данными. Может быть полезно отправлять заранее определённые подсказки для заполнения сеанса, чтобы модель могла начать обработку раньше.
Хотя initialPrompts полезны при создании сеанса, метод append() можно использовать в дополнение к методам prompt() или promptStreaming() , чтобы выдавать дополнительные контекстные подсказки после создания сеанса.
Например:
const session = await LanguageModel.create({ initialPrompts: [ { role: 'system', content: 'You are a skilled analyst who correlates patterns across multiple images.', }, ], expectedInputs: [{ type: 'image' }], }); fileUpload.onchange = async () => { await session.append([ { role: 'user', content: [ { type: 'text', value: `Here's one image. Notes: ${fileNotesInput.value}`, }, { type: 'image', value: fileUpload.files[0] }, ], }, ]); }; analyzeButton.onclick = async (e) => { analysisResult.textContent = await session.prompt(userQuestionInput.value); }; Обещание, возвращаемое функцией append() выполняется после проверки, обработки и добавления запроса в сеанс. Если запрос не может быть добавлен, обещание отклоняется.
Передать схему JSON
Добавьте поле responseConstraint в метод prompt() или promptStreaming() чтобы передать JSON-схему в качестве значения. После этого вы сможете использовать структурированный вывод с помощью API Prompt.
В следующем примере схема JSON гарантирует, что модель выдает ответ true или false , чтобы классифицировать, относится ли данное сообщение к гончарному делу.
const session = await LanguageModel.create(); const schema = { "type": "boolean" }; const post = "Mugs and ramen bowls, both a bit smaller than intended, but that happens with reclaim. Glaze crawled the first time around, but pretty happy with it after refiring."; const result = await session.prompt( `Is this post about pottery?\n\n${post}`, { responseConstraint: schema, } ); console.log(JSON.parse(result)); // true Ваша реализация может включать JSON-схему или регулярное выражение в сообщение, отправляемое модели. Это использует часть входной квоты . Вы можете измерить, какую часть входной квоты она будет использовать, передав параметр responseConstraint в session.measureInputUsage() .
Вы можете избежать этого поведения с помощью параметра omitResponseConstraintInput . В этом случае мы рекомендуем включить в запрос некоторые указания:
const result = await session.prompt(` Summarize this feedback into a rating between 0-5. Only output a JSON object { rating }, with a single property whose value is a number: The food was delicious, service was excellent, will recommend. `, { responseConstraint: schema, omitResponseConstraintInput: true }); Подскажите модель
Вы можете вызвать модель с помощью функции 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, }); Управление сеансом
В каждом сеансе отслеживается контекст разговора. Предыдущие взаимодействия учитываются в будущих взаимодействиях до тех пор, пока окно контекста сеанса не заполнится.
Каждый сеанс может обработать ограниченное количество токенов. Проверьте свой прогресс в достижении этого лимита с помощью следующих инструментов:
console.log(`${session.inputUsage}/${session.inputQuota}`); Узнайте больше об управлении сеансами .
Клонировать сеанс
Для экономии ресурсов можно клонировать существующий сеанс с помощью функции clone() . Контекст диалога сбрасывается, но исходное приглашение остаётся неизменным. Функция clone() принимает необязательный объект параметров с полем signal , который позволяет передать AbortSignal для уничтожения клонированного сеанса.
const controller = new AbortController(); stopButton.onclick = () => controller.abort(); const clonedSession = await session.clone({ 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 choosing between a t-shirt and a polo." ); Демо-версии
Мы создали несколько демонстрационных версий для изучения различных вариантов использования Prompt API. Ниже представлены веб-приложения:
Чтобы протестировать Prompt API в расширениях Chrome, установите демонстрационное расширение. Исходный код расширения доступен на GitHub.
Стратегия эффективности
API Prompt для веб-приложений всё ещё находится в разработке. Пока мы работаем над этим API, ознакомьтесь с нашими рекомендациями по управлению сеансами для достижения оптимальной производительности.
Политика разрешений, фреймы и веб-работники
По умолчанию API Prompt доступен только окнам верхнего уровня и их iframe-ам с тем же источником. Доступ к API можно делегировать iframe-ам с другим источником с помощью атрибута политики разрешений allow="" :
<!-- The hosting site at https://main.example.com can grant a cross-origin iframe at https://cross-origin.example.com/ access to the Prompt API by setting the `allow="language-model"` attribute. --> <iframe src="https://cross-origin.example.com/" allow="language-model"></iframe> API Prompt пока недоступен в Web Workers из-за сложности создания ответственного документа для каждого Worker с целью проверки статуса политики разрешений.
Участвуйте и делитесь отзывами
Ваш вклад может напрямую повлиять на то, как мы создадим и реализуем будущие версии этого API и всех встроенных API ИИ .
- Чтобы оставить отзыв о реализации Chrome, отправьте отчет об ошибке или запрос на новую функцию .
- Поделитесь своим мнением о форме API, прокомментировав существующую проблему или открыв новую в репозитории Prompt API GitHub .
- Присоединяйтесь к программе предварительного просмотра .