Опубликовано: 20 мая 2025 г., Последнее обновление: 21 июля 2025 г.
Объяснитель | Интернет | Расширения | Статус Chrome | Намерение |
---|---|---|---|---|
GitHub | Вид | Намерение экспериментировать |
С помощью Prompt API вы можете отправлять запросы на естественном языке в Gemini Nano через браузер.
Существует множество способов использования Prompt API в веб-приложении или на веб-сайте. Например, можно создать:
- Поиск на основе искусственного интеллекта : отвечайте на вопросы на основе содержания веб-страницы.
- Персонализированные новостные ленты : создайте ленту, которая динамически классифицирует статьи по категориям и позволяет пользователям фильтровать этот контент.
Это всего лишь несколько возможностей, и нам не терпится увидеть, что вы создадите.
Ознакомьтесь с требованиями к оборудованию
Для разработчиков и пользователей, использующих эти API в Chrome, действуют следующие требования. Требования к работе других браузеров могут отличаться.
API определения языка и переводчика работают в Chrome на десктопе. Эти API не работают на мобильных устройствах. API Prompt, API Summarizer, API Writer и API Rewriter работают в Chrome при соблюдении следующих условий:
- Операционная система : Windows 10 или 11; macOS 13+ (Ventura и выше); Linux; или ChromeOS (платформа 16389.0.0 и выше) на устройствах [Chromebook Plus](https://www.google.com/chromebook/chromebookplus/). Chrome для Android, iOS и ChromeOS на устройствах, отличных от Chromebook Plus, пока не поддерживаются API, использующими Gemini Nano.
- Хранилище : не менее 22 ГБ свободного места на томе, содержащем ваш профиль Chrome.
- Видеокарта : строго более 4 ГБ видеопамяти.
- Сеть : Безлимитные данные или безлимитное соединение.
Точный размер Gemini Nano может меняться по мере обновления модели браузером. Чтобы узнать текущий размер, посетите chrome://on-device-internals
и перейдите в раздел «Статус модели» . Откройте указанный путь к файлу , чтобы узнать размер модели.
Используйте API Prompt
API Prompt использует модель Gemini Nano в Chrome. Хотя API встроен в Chrome, модель загружается отдельно при первом использовании API источником.
Чтобы определить, готова ли модель к использованию, вызовите LanguageModel.availability()
. Если ответ на availability()
— downloadable
, отслеживайте ход загрузки и информируйте пользователя, так как загрузка может занять некоторое время.
const availability = await LanguageModel.availability();
Чтобы запустить загрузку и создать экземпляр языковой модели, проверьте активацию пользователя . Затем вызовите асинхронную функцию LanguageModel.create()
.
const session = await LanguageModel.create({
monitor(m) {
m.addEventListener('downloadprogress', (e) => {
console.log(`Downloaded ${e.loaded * 100}%`);
});
},
});
Параметры модели
Функция 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,
},
]);
Добавить сообщения
Вывод может занять некоторое время, особенно при использовании подсказок с мультимодальными входными данными. Может быть полезно отправлять заранее определённые подсказки для заполнения сеанса, чтобы модель могла начать обработку раньше.
Хотя 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()
выполняется после проверки, обработки и добавления запроса в сеанс. Если запрос не может быть добавлен, обещание отклоняется.
Устойчивость сеанса и ограничения
В каждом сеансе отслеживается контекст разговора. Предыдущие взаимодействия учитываются в будущих взаимодействиях до тех пор, пока окно контекста сеанса не заполнится.
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);
Каждый сеанс может обработать ограниченное количество токенов. Проверьте свой прогресс в достижении этого лимита с помощью следующих инструментов:
console.log(`${session.inputUsage}/${session.inputQuota}`);
Передать схему 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 });
Клонировать сеанс
Для экономии ресурсов можно клонировать существующий сеанс с помощью функции 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 choosing between a t-shirt
and a polo."
);
Мультимодальные возможности
Пробная версия Prompt API Origin поддерживает аудио и изображения. API возвращает текстовый вывод.
Используя эти возможности, вы сможете:
- Разрешить пользователям транскрибировать аудиосообщения, отправленные в чат-приложении.
- Опишите изображение, загруженное на ваш веб-сайт, для использования в подписи или альтернативном тексте.
const session = await LanguageModel.create({
// { type: 'text' } only required when including expected input languages.
expectedInputs: [{ type: 'audio' }, { type: 'image' }],
});
const referenceImage = await (await fetch('/reference-image.jpeg')).blob();
const userDrawnImage = document.querySelector('canvas');
const response1 = await session.prompt([
{
role: 'user',
content: [
{
type: 'text',
value:
'Give an artistic critique of how well the second image matches the first:',
},
{ type: 'image', value: referenceImage },
{ type: 'image', value: userDrawnImage },
],
},
]);
console.log(response1);
const audioBlob = await captureMicrophoneInput({ seconds: 10 });
const response2 = await session.prompt([
{
role: 'user',
content: [
{ type: 'text', value: 'My response to your critique:' },
{ type: 'audio', value: audioBlob },
],
},
]);
Демонстрацию Mediarecorder Audio Prompt можно посмотреть в демонстрации использования Prompt API с аудиовходом, а демонстрацию Canvas Image Prompt — в демонстрации использования Prompt API с вводом изображений.
Стратегия эффективности
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 .
- Присоединяйтесь к программе предварительного просмотра .