Что такое Prompt API?

Prompt API — это экспериментальное предложение веб-платформы от W3C Web Machine Learning Community Group, которое предоставляет доступ к большой языковой модели браузера через интерфейс window.LanguageModel в JavaScript. Страницы создают сессию с помощью LanguageModel.create(), опционально настраивают её системным промптом, а затем вызывают prompt() или promptStreaming() для получения ответа.

В отличие от вызова размещённого API LLM, модель работает на устройстве пользователя. Это означает, что входные данные никогда не покидают машину, страница работает в автономном режиме после кеширования модели, и нет затрат на каждый запрос. В Chrome базовой моделью является Gemini Nano, но API намеренно модель-агностичен, поэтому другие браузеры могут использовать разные реализации.

Сессия имеет состояние: она отслеживает историю разговора в контекстном окне, измеряемом в токенах. Когда окно заполняется, самые старые не-системные сообщения автоматически удаляются (срабатывает событие contextoverflow), и вы можете в любой момент проверить session.contextUsage и session.contextWindow, чтобы увидеть, сколько места осталось.

Описание инструмента

Эта площадка — интерактивный чат, подключённый к window.LanguageModel. Она позволяет установить системный промпт, отправлять сообщения и смотреть, как модель в реальном времени потоком выдаёт токены. Полоса прогресса показывает доступность модели и прогресс загрузки, а полоса использования токенов отображает, сколько контекстного окна сессии используется.

Сессия создаётся лениво при первой отправке и переиспользуется для всех сообщений, пока вы не измените системный промпт. В этом случае она уничтожается и создаётся новая с новыми инструкциями.

Возможности

  • Потоковые ответы — использует promptStreaming(), поэтому токены появляются в чате по мере их создания.
  • Редактор системного промпта — определите постоянную роль или поведение, которое влияет на каждый ответ.
  • Кнопка остановки — прервите выполняемый промпт с помощью AbortController без разрушения сессии.
  • Живое использование контекста — визуализирует contextUsage относительно contextWindow, чтобы вы видели, когда разговор вот-вот переполнится.
  • Доступность и прогресс загрузки — отображает состояние availability() и события downloadprogress во время загрузки модели.

Варианты использования

  • Локальное тестирование промптов — итерируйте системные промпты и паттерны few-shot без оплаты облачного API.
  • Проверка осуществимости локального AI — убедитесь, что Prompt API доступен, посмотрите размер контекстного окна и измерьте скорость ответа на вашем оборудовании.
  • Конфиденциальное редактирование — обсуждайте или переформулируйте текст, который не должен отправляться на сторонний сервер.

Требования

  • Браузер, реализующий Prompt API. Chrome 138+ предоставляет его экспериментально; в более старых версиях может потребоваться включить его через chrome://flags/#prompt-api-for-gemini-nano и загрузить локальную модель.
  • Защищённый контекст (HTTPS или localhost).
  • Устройство, отвечающее требованиям оборудования модели (достаточно дискового пространства, оперативной памяти и поддерживаемый GPU/CPU). На неподдерживаемых устройствах availability() возвращает unavailable.
  • Начальная полоса пропускания для загрузки модели. Последующие сессии переиспользуют кешированную модель.

Как это работает

  1. При загрузке инструмент проверяет typeof window.LanguageModel. Если отсутствует, предупреждение заменяет ввод чата.
  2. LanguageModel.availability() возвращает одно из значений: available, downloadable, downloading или unavailable. Результат отображается в полосе прогресса.
  3. При первом нажатии Отправить инструмент вызывает LanguageModel.create() с monitor, который потоком отправляет события downloadprogress в UI. Если установлен системный промпт, он передаётся через initialPrompts: [{ role: "system", content: ... }].
  4. Сообщение пользователя отправляется через session.promptStreaming(text, { signal }). Возвращаемый ReadableStream<string> потребляется по частям и добавляется к сообщению ассистента.
  5. После каждого ответа читаются session.contextUsage и session.contextWindow и отображаются в полосе использования токенов.
  6. Нажатие Остановить вызывает controller.abort(), что отклоняет выполняемый поток с AbortError, оставляя сессию живой для следующего промпта.
  7. Редактирование системного промпта инвалидирует кешированную сессию: существующая вызывает destroy(), а следующая отправка создаёт новую сессию с обновлёнными инструкциями.

Объяснение опций

  • Системный промпт — свободная инструкция, передаваемая как первое сообщение с ролью system. Она влияет на все последующие ходы. Оставление его пустым создаёт сессию без системного сообщения.
  • Отправить / ОстановитьОтправить отправляет ввод как сообщение user. Остановить прерывает потоковый ответ без удаления предыдущих сообщений.
  • Использование токеновиспользовано / всего токенов для текущей сессии. Когда использовано приближается к всего, старые пары пользователь/ассистент будут удалены при следующем промпте.
  • Статус модели — объединённое отображение availability() и downloadprogress. Во время загрузки модели полоса анимируется и показывает процент.

Ограничения

  • Prompt API экспериментален. Названия методов, опции (например inputUsage vs contextUsage) и семантика событий могут меняться между релизами Chrome.
  • Качество вывода, фактичность и следование инструкциям полностью зависят от предоставляемой браузером модели и не гарантированы.
  • Контекстное окно мало по сравнению с размещёнными LLM. Длинные разговоры переполнятся и молча отбросят самые ранние ходы.
  • API не предоставляется web workers и может требовать делегирования Permissions Policy (language-model) на кросс-ориджинных iframe.
  • Этот инструмент намеренно не предоставляет temperature, topK, использование инструментов, мультимодальные входы, структурированный вывод (responseConstraint) или клонирование сессии. Они являются частью спецификации, но исключены из площадки, чтобы сосредоточиться на простом чате.

Часто задаваемые вопросы

Почему говорится, что API не поддерживается? window.LanguageModel не определён в вашем браузере. Попробуйте последний Chrome на рабочем столе и, если необходимо, включите флаг Prompt API и дождитесь загрузки локальной модели через chrome://components.

Почему первый ответ медленный? Первый вызов может вызвать загрузку модели (смотрите полосу прогресса) и шаг создания сессии. Последующие промпты переиспользуют ту же сессию и начинают потоковую передачу почти сразу.

Мой промпт покидает устройство? Нет. Модель работает локально. Ваш текст не отправляется на какой-либо сервер этим инструментом.

Что происходит, когда контекст заполняется? Сессия срабатывает событием contextoverflow и удаляет самые старые не-системные ходы, чтобы освободить место. Системный промпт сохраняется.

Почему изменение системного промпта очистило стиль ответа в середине разговора? Редактирование системного промпта уничтожает текущую сессию и создаёт новую при следующей отправке. Новая сессия не помнит предыдущие ходы.