Опубликовано: 14 мая 2026 г.
С помощью API Prompt в Chrome можно взаимодействовать с языковой моделью (LLM), используя высокоуровневый API браузера, основанный на window.LanguageModel . Однако поддержка этой функции пока ограничена, а её реализация — сложный процесс.
| Браузер | Поддерживаемые ОС | Неподдерживаемая ОС | Позиция |
|---|---|---|---|
| Хром | Windows, macOS, Linux, ChromeOS (Chromebook Plus) | Android, iOS | ✅ Поддерживается |
| Край | Windows, macOS | Android, iOS | ✅ Поддерживается |
| Сафари | — | — | 📋 Позиция определена |
| Firefox | — | — | 📋 Позиция определена |
В то же время разработчики, участвующие в программе раннего предварительного просмотра, выразили свой энтузиазм по поводу API Prompt. Однако доступность этого API в обозримом будущем создаст проблемы совместимости.
Решение
Именно поэтому мы выпускаем экспериментальный полифил для Prompt API, соответствующий спецификации ( исходный код можно посмотреть на GitHub), который точно реализует Prompt API как на основе настраиваемых облачных бэкенд-провайдеров, так и на основе локального бэкенд-провайдера в виде Transformers.js .
Используйте полифил.
Для использования полифила выполните следующие действия:
Скачайте полифилл из npm :
npm install prompt-api-polyfillВыберите, хотите ли вы использовать облачного или локального поставщика серверной части:
- Облачный бэкэнд-провайдер: Данные пользователя отправляются в облако для удаленной обработки, но вам не нужно ждать, пока станет доступна локальная модель. Вы несете ответственность за любые понесенные расходы в соответствии с ценовой политикой вашего облачного провайдера.
- Локальный бэкэнд-провайдер: данные пользователя остаются в браузере и обрабатываются локально, но вам необходимо загрузить модель, которая, в отличие от настоящего API Prompt, не может быть использована в разных местах. Локальная обработка не влечет за собой никаких затрат.
Облачная серверная часть
Выберите любой из облачных бэкэндов и получите ключ API (а также любые дополнительные учетные данные) для вашего поставщика бэкэнда.
Получив ключ API, введите его данные в файл конфигурации .env.json . Если вы не укажете modelName , полифилл будет использовать модель по умолчанию для каждого бэкенда, но если вы укажете modelName, вы сможете выбрать одну из поддерживаемых моделей каждого бэкенда.
{
"apiKey": "y0ur-Api-k3Y",
"modelName": "model-name"
}
Локальный бэкэнд
Если вы решите использовать локальный бэкенд-провайдер на основе Transformers.js, вам понадобится только фиктивный API-ключ. Однако вы можете настроить, какое устройство должен использовать Transformers.js. Выберите "webgpu" для максимальной производительности и "wasm" для максимальной совместимости. При желании вы можете изменить настройки по умолчанию. Выберите другую модель из каталога совместимых моделей Hugging Face . Для некоторых моделей вы можете выбрать различные варианты квантования, используя параметр dtype .
{
"apiKey": "dummy",
"device": "webgpu",
"dtype": "q4f16",
"modelName": "onnx-community/gemma-3-1b-it-ONNX-GQA"
};
Настройте свой полифил
После того, как файл конфигурации будет готов, вы можете начать использовать полифилл в своем приложении.
- Импортируйте файл конфигурации и присвойте его глобальной переменной с соответствующим именем, где
$BACKEND— это выбранный вами бэкенд:window.$BACKEND_CONFIG. - Используйте динамический импорт, чтобы загружать полифилл только в том случае, если используемый браузер его не поддерживает.
- Вызовите функции API Prompt .
import config from './.env.json' with { type: 'json' };
// Set $BACKEND_CONFIG to select a backend
window.$BACKEND_CONFIG = config;
if (!('LanguageModel' in window)) {
await import('prompt-api-polyfill');
}
const session = await LanguageModel.create({
expectedInputs: [{type: 'text', languages: ['en']}],
expectedOutputs: [{type: 'text', languages: ['en']}],
});
await session.prompt('Tell me a joke!');
Полифил поддерживает структурированный вывод (за исключением бэкенда Transformers.js), обрабатывает многомодальный ввод (за исключением бэкенда OpenAI, который не поддерживает аудио и изображения одновременно, а только по отдельности) и протестирован с использованием полного набора тестов веб-платформы для LanguageModel .
Более подробную информацию об использовании, а также исходный код можно найти в файле README в репозитории GitHub .
Отличие от API подсказок браузера
Если полифил использует облачные модели, некоторые преимущества работы на стороне клиента перестают действовать. В частности, вы больше не можете гарантировать локальную обработку конфиденциальных данных, хотя политика конфиденциальности вашего бэкэнд-провайдера по-прежнему применяется. Ваше приложение также больше не сможет использовать ИИ, когда пользователь находится в автономном режиме. Чтобы узнать, подключены вы к сети или нет, вы можете отслеживать соответствующие события.
window.addEventListener("offline", (e) => {
console.log("offline");
});
window.addEventListener("online", (e) => {
console.log("online");
});
Если вывод ИИ выполняется на основе модели в облаке, локальной модели для загрузки нет. Полифил имитирует события downloadprogress , поэтому для вашего приложения будет казаться, что встроенная модель уже загружена, а это значит, что будет два события: одно со loaded 0 , а другое — 1 , что и требуется спецификацией.
В отличие от вывода данных на устройстве, при использовании облачных сервисов вывода информации могут возникать дополнительные затраты при вызове API от выбранного вами бэкэнд-провайдера. Проверьте информацию о ценах, например, для API Gemini . Если вам известна стоимость за токен, вы можете использовать информацию contextUsage из API Prompt для расчета стоимости.
const COST_PER_TOKEN = 123;
const COST_LIMIT = 456;
let costSoFar = 0;
const session = await LanguageModel.create(options);
/…/
if (costSoFar < COST_LIMIT) {
await session.prompt('Tell me a joke.');
costSoFar = session.contextUsage * COST_PER_TOKEN;
} else {
// Show premium AI plan promo.
}
При прямом вызове облачного API из мобильного или веб-приложения (например, API, предоставляющие доступ к моделям генеративного ИИ) ключ API уязвим для злоупотреблений со стороны неавторизованных клиентов. Для защиты таких API, если вы используете Firebase AI Logic Hybrid SDK, следует использовать Firebase App Check , чтобы убедиться, что все входящие вызовы API поступают из вашего приложения. У некоторых облачных провайдеров, таких как Google, также можно применять строгие проверки источника, чтобы гарантировать, что API могут использовать только разрешенные веб-сайты .
Например, ограничения API Prompt в отношении contextWindow сессии применяются не к параметрам, а к параметрам бэкэнд-провайдера. Для contextWindow эти ограничения, как правило, намного выше, чем на устройстве, и в облаке можно обрабатывать большие объемы данных, поэтому, хотя вы должны знать об этой разнице, на практике у вас, скорее всего, не возникнет проблем.
Создайте собственную серверную часть.
Чтобы добавить собственный бэкэнд-провайдер, выполните следующие шаги:
Расширьте базовый класс бэкэнда.
Создайте новый файл в каталоге backends/ , например, backends/custom-backend.js . Вам необходимо расширить класс PolyfillBackend и реализовать основные методы, удовлетворяющие ожидаемому интерфейсу.
import PolyfillBackend from './base.js';
import { DEFAULT_MODELS } from './defaults.js';
export default class CustomBackend extends PolyfillBackend {
constructor(config) {
// config typically comes from a window global (e.g., window.CUSTOM_CONFIG)
super(config.modelName || DEFAULT_MODELS.custom.modelName);
}
// Check if the backend is configured (e.g., API key is present), if given
// combinations of modelName and options are supported, or, for local model,
// if the model is available.
static availability(options) {
return window.CUSTOM_CONFIG?.apiKey ? 'available' : 'unavailable';
}
// Initialize the underlying SDK or API client. With local models, use
// monitorTarget to report model download progress to the polyfill.
createSession(options, sessionParams, monitorTarget) {
// Return the initialized session or client instance
}
// Non-streaming prompt execution
async generateContent(contents) {
// contents: Array of { role: 'user'|'model', parts: [{ text: string }] }
// Return: { text: string, usage: number }
}
// Streaming prompt execution
async generateContentStream(contents) {
// Return: AsyncIterable yielding chunks
}
// Token counting for quota/usage tracking
async countTokens(contents) {
// Return: total token count (number)
}
}
Зарегистрируйте свой бэкэнд
Полифил использует стратегию "Приоритет первого совпадения", основанную на глобальной конфигурации. Вам необходимо зарегистрировать свой бэкенд в файле prompt-api-polyfill.js , добавив его в статический массив #backends :
// prompt-api-polyfill.js
static #backends = [
// ... existing backends
{
config: 'CUSTOM_CONFIG', // The global object to look for on `window`
path: './backends/custom-backend.js',
},
];
Установить модель по умолчанию
Задайте резервный идентификатор модели в backends/defaults.js . Это используется, когда пользователь инициализирует сессию, не указывая конкретное modelName .
// backends/defaults.js
export const DEFAULT_MODELS = {
// ...
custom: 'custom-model-pro-v1',
};
Обеспечьте локальную разработку и тестирование.
В проекте используется скрипт обнаружения ( scripts/list-backends.js ) для генерации тестовых матриц. Чтобы включить ваш новый бэкенд в средство запуска тестов, создайте файл .env-[name].json (например, .env-custom.json ) в корневом каталоге:
{
"apiKey": "your-api-key-here",
"modelName": "custom-model-pro-v1"
}
Проверьте с помощью тестов веб-платформы (WPT).
Последний шаг — обеспечение соответствия требованиям. Поскольку полифилл основан на спецификации, любой новый бэкенд должен пройти официальные (или предварительные) тесты веб-платформы:
npm run test:wpt
Этот этап проверки гарантирует, что ваш бэкэнд обрабатывает такие вещи, как AbortSignal , системные подсказки и форматирование истории, точно так, как ожидает спецификация Prompt API.
Заключение
Полифил позволяет использовать API Prompt на всех платформах и устройствах. Используя хорошо определенный API Prompt, вы становитесь более независимыми от облачных провайдеров и остаетесь максимально близки к платформе.
На устройствах, поддерживающих API Prompt, полифил даже не загружается, поэтому вы избавляете пользователей от необходимости скачивать код, который они не будут выполнять. Если у вас есть отзывы или вы обнаружили ошибку, создайте заявку на GitHub. Удачных запросов!