Подсказка API

Опубликовано: 20 мая 2025 г., Последнее обновление: 21 сентября 2025 г.

Пояснительная записка Веб Расширения Статус Chrome Намерение
GitHub Испытание происхождения Испытание происхождения Хром 138 Вид Намерение провести эксперимент

С помощью API Prompt вы можете отправлять запросы на естественном языке в Gemini Nano прямо из браузера.

Существует множество способов использования API Prompt. Например, вы можете создать:

  • Поиск на основе ИИ : отвечайте на вопросы, основываясь на содержании веб-страницы.
  • Персонализированные новостные ленты : Создайте ленту, которая динамически классифицирует статьи по категориям и позволяет пользователям фильтровать контент.
  • Настраиваемые фильтры контента . Анализ новостных статей и автоматическое размытие или скрытие контента на основе заданных пользователем тем.
  • Создание событий в календаре . Разработайте расширение для Chrome, которое автоматически извлекает подробную информацию о событиях с веб-страниц, чтобы пользователи могли создавать записи в календаре всего за несколько шагов.
  • Беспроблемное извлечение контактной информации . Создайте расширение, которое извлекает контактную информацию с веб-сайтов, упрощая пользователям связь с компанией или добавление данных в список контактов.

Это лишь несколько вариантов, и нам не терпится увидеть, что вы создадите.

Ознакомьтесь с требованиями к оборудованию.

Для разработчиков и пользователей, использующих функции этих API в Chrome, существуют следующие требования. Для других браузеров могут действовать иные требования.

API-интерфейсы определения языка и перевода работают в Chrome на настольных компьютерах. На мобильных устройствах эти API-интерфейсы не работают. API-интерфейсы подсказок, суммирования, записи, переписывания и проверки орфографии работают в 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.
  • GPU или CPU : Встроенные модели могут работать как с GPU, так и с CPU.
    • Графический процессор : строго более 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 , отслеживайте ход загрузки и информируйте пользователя , поскольку загрузка может занять некоторое время.

Использовать на локальном компьютере

Все встроенные API для ИИ доступны на localhost в Chrome. Установите следующие флаги в значение «Включено» :

  • chrome://flags/#optimization-guide-on-device-model
  • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input

Затем нажмите «Перезапустить» или перезапустите Chrome. Если возникнут ошибки, выполните диагностику localhost .

Параметры модели

Функция params() предоставляет информацию о параметрах языковой модели. Объект имеет следующие поля:

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,
});

В необязательном объекте options функции 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 .
    • Для expectedOutputs ) API подсказок допускает только text .
  • languages : Массив для указания ожидаемого языка или языков. API подсказок принимает "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 для использования API Prompt с аудиовходом и демонстрацией Canvas Image Prompt для использования API Prompt с изображением в качестве входного сигнала.

Добавить сообщения

Процесс вывода может занять некоторое время, особенно при использовании многомодальных входных данных. Полезно заранее отправлять заранее определенные подсказки для заполнения сессии, чтобы модель могла начать обработку раньше.

Хотя 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() принимает необязательный объект options с полем 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."
);

Демонстрации

Мы создали несколько демонстрационных версий, чтобы показать множество вариантов использования API Prompt. Следующие демонстрации представляют собой веб-приложения:

Чтобы протестировать API подсказок в расширениях Chrome, установите демонстрационное расширение. Исходный код расширения доступен на GitHub.

Стратегия повышения эффективности

API для отправки подсказок в веб-браузере все еще находится в разработке. Пока мы создаем этот API, рекомендуем ознакомиться с нашими рекомендациями по управлению сессиями для обеспечения оптимальной производительности.

Политика разрешений, iframe и веб-воркеры

По умолчанию 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 подсказок в настоящее время недоступен в веб-воркерах из-за сложности создания ответственного документа для каждого воркера для проверки статуса политики разрешений.

Принимайте участие и делитесь отзывами.

Ваши предложения могут напрямую повлиять на то, как мы будем создавать и внедрять будущие версии этого API и всех встроенных API для искусственного интеллекта .

,

Опубликовано: 20 мая 2025 г., Последнее обновление: 21 сентября 2025 г.

Пояснительная записка Веб Расширения Статус Chrome Намерение
GitHub Испытание происхождения Испытание происхождения Хром 138 Вид Намерение провести эксперимент

С помощью API Prompt вы можете отправлять запросы на естественном языке в Gemini Nano прямо из браузера.

Существует множество способов использования API Prompt. Например, вы можете создать:

  • Поиск на основе ИИ : отвечайте на вопросы, основываясь на содержании веб-страницы.
  • Персонализированные новостные ленты : Создайте ленту, которая динамически классифицирует статьи по категориям и позволяет пользователям фильтровать контент.
  • Настраиваемые фильтры контента . Анализ новостных статей и автоматическое размытие или скрытие контента на основе заданных пользователем тем.
  • Создание событий в календаре . Разработайте расширение для Chrome, которое автоматически извлекает подробную информацию о событиях с веб-страниц, чтобы пользователи могли создавать записи в календаре всего за несколько шагов.
  • Беспроблемное извлечение контактной информации . Создайте расширение, которое извлекает контактную информацию с веб-сайтов, упрощая пользователям связь с компанией или добавление данных в список контактов.

Это лишь несколько вариантов, и нам не терпится увидеть, что вы создадите.

Ознакомьтесь с требованиями к оборудованию.

Для разработчиков и пользователей, использующих функции этих API в Chrome, существуют следующие требования. Для других браузеров могут действовать иные требования.

API-интерфейсы определения языка и перевода работают в Chrome на настольных компьютерах. На мобильных устройствах эти API-интерфейсы не работают. API-интерфейсы подсказок, суммирования, записи, переписывания и проверки орфографии работают в 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.
  • GPU или CPU : Встроенные модели могут работать как с GPU, так и с CPU.
    • Графический процессор : строго более 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 , отслеживайте ход загрузки и информируйте пользователя , поскольку загрузка может занять некоторое время.

Использовать на локальном компьютере

Все встроенные API для ИИ доступны на localhost в Chrome. Установите следующие флаги в значение «Включено» :

  • chrome://flags/#optimization-guide-on-device-model
  • chrome://flags/#prompt-api-for-gemini-nano-multimodal-input

Затем нажмите «Перезапустить» или перезапустите Chrome. Если возникнут ошибки, выполните диагностику localhost .

Параметры модели

Функция params() предоставляет информацию о параметрах языковой модели. Объект имеет следующие поля:

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,
});

В необязательном объекте options функции 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 .
    • Для expectedOutputs ) API подсказок допускает только text .
  • languages : Массив для указания ожидаемого языка или языков. API подсказок принимает "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 для использования API Prompt с аудиовходом и демонстрацией Canvas Image Prompt для использования API Prompt с изображением в качестве входного сигнала.

Добавить сообщения

Процесс вывода может занять некоторое время, особенно при использовании многомодальных входных данных. Полезно заранее отправлять заранее определенные подсказки для заполнения сессии, чтобы модель могла начать обработку раньше.

Хотя 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() принимает необязательный объект options с полем 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."
);

Демонстрации

Мы создали несколько демонстрационных версий, чтобы показать множество вариантов использования API Prompt. Следующие демонстрации представляют собой веб-приложения:

Чтобы протестировать API подсказок в расширениях Chrome, установите демонстрационное расширение. Исходный код расширения доступен на GitHub.

Стратегия повышения эффективности

API для отправки подсказок в веб-браузере все еще находится в разработке. Пока мы создаем этот API, рекомендуем ознакомиться с нашими рекомендациями по управлению сессиями для обеспечения оптимальной производительности.

Политика разрешений, iframe и веб-воркеры

По умолчанию 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 подсказок в настоящее время недоступен в веб-воркерах из-за сложности создания ответственного документа для каждого воркера для проверки статуса политики разрешений.

Принимайте участие и делитесь отзывами.

Ваши предложения могут напрямую повлиять на то, как мы будем создавать и внедрять будущие версии этого API и всех встроенных API для искусственного интеллекта .