- BrainTools - https://www.braintools.ru -

В настройках Chrome появился переключатель «ИИ на устройстве». Он относится к моделям, которые запускаются прямо на компьютере, причем, для целей довольно разнообразных (в частности, даже для обнаружения мошеннических сайтов). В каталоге профиля браузера при этом действительно лежат несколько гигабайт весов Gemini Nano. Хочется сказать: раз модель уже скачана, то встроенный Gemini должен работать локально – например, читать и пересказывать открытую страницу без обращения в облако!
Увы, для Google это оказалось не самым логичным решением. Более того, они даже с неймингом не справились до конца, чем здорово всех запутали
Под словом Gemini у компании скрываются две принципиально разные системы.
Ask Gemini / Gemini in Chrome — облачный сервис. Когда вы просите его пересказать страницу или ответить на вопрос по открытым вкладкам, их содержимое передаётся в инфраструктуру Google.
Gemini Nano — локальная модель. Chrome скачивает её на компьютер и запускает на CPU или GPU. Отдельной кнопки «спросить Gemini Nano» у пользователя нет. Этой моделью пользуются сайты и расширения через специальные API Chrome, а также сам браузер — например, при первичной проверке подозрительных страниц.
Если сократить всё до одной таблицы:
|
Механизм |
Где работает модель |
Кто вызывает |
|---|---|---|
|
Ask Gemini / Gemini in Chrome |
в облаке Google |
пользователь |
|
Gemini Nano через встроенные API |
на компьютере |
сайты и расширения |
|
Gemini Nano в Safe Browsing |
первичный анализ локально |
сам Chrome |
Последний случай немного сложнее: сама модель работает локально, но при включённой «Улучшенной защите» результат её анализа может отправляться в Google Safe Browsing.
Хотели сделать понятно – в итоге, кажется, запутались даже собственные дизайнеры.
В интерфейсе Chrome теперь можно встретить функцию “Ask Gemini”. Открываем статью, “делаем Ask Gemini”, и просим:
Кратко перескажи эту страницу с упором на техническую составляющую.
Для локальной модели задача почти идеальная. Текст уже находится на компьютере, ответ короткий, а несколько гигабайт Gemini Nano могут уже лежать на диске.
Но Ask Gemini не обращается к этой модели. Потому что “Ask Gemini” – функция облачного Gemini Apps. Вы еще не потерялись?
В центре конфиденциальности [1] Google пишет, что при использовании Gemini in Chrome сервис получает содержимое и URL текущей вкладки, а также других вкладок, которыми пользователь поделился. Содержимое страницы временно записывается в учётную запись Google, а при включённом сохранении истории сведения о сайтах попадают в историю действий Gemini.
То есть здесь уже не приходится спорить о значении слова «использует»: содержимое страницы покидает компьютер и оказывается в инфраструктуре Google. В справке Chrome [2] также указано, что Gemini может использовать текущую вкладку и ещё до десяти вкладок, которыми пользователь решил с ним поделиться. Конечно, никто не фильтрует данные или не вырезает чувствительные фрагменты – отправляется всё как есть.
Gemini Nano — уже настоящий «ИИ на устройстве».
Chrome хранит модель как отдельный компонент и выполняет инференс локально. После загрузки весов соединение с интернетом для самого вычисления не требуется.
Но встроенная модель существует не как ещё один чат. Чтобы воспользоваться ей, код должен обратиться к специальному API Chrome. Сейчас среди таких интерфейсов есть Summarizer, Prompt, Writer, Rewriter, Proofreader и другие. Вызывать их могут веб-страницы и расширения.
И вот здесь начинается самая неожиданная часть истории: да, любой сайт может воспользоваться языковой моделью, которую Chrome установил на вашем компьютере.
Общение идет через API. Скажем, для пересказа текста предназначен Summarizer API. Начиная с Chrome 138 веб-приложение может передать ему строку, а браузер обработает её встроенной моделью. Google прямо обещает [3], что при использовании локальной модели данные самого запроса не передаются компании или третьим лицам.
Сайт сначала проверяет состояние модели:
const availability = await Summarizer.availability(options);
Если она доступна, создаёт сеанс:
const summarizer = await Summarizer.create(options);
а затем передаёт текст:
const result = await summarizer.summarize(text);
Никакого обращения к облачной Gemini для этого не требуется – и не производится.
Для более свободных команд существует Prompt API [4]. Там приложение уже может сделать что-нибудь вроде:
const answer = await model.prompt(
`Retell this article as a witty newspaper column:nn${text}`
);
Важно, что сама модель при этом не получает адрес страницы и не ходит по нему. JavaScript сначала добывает текст доступным ему способом и только потом передаёт его Gemini Nano.
<!doctype html>
<meta charset="utf-8">
<textarea id="source" rows="12" cols="80">
Paste an English article here.
</textarea><br>
<button id="run" disabled>Summarize locally</button>
<progress id="progress" value="0" max="1" hidden></progress>
<pre id="result">Checking model…</pre>
<script type="module">
const source = document.querySelector('#source');
const run = document.querySelector('#run');
const progress = document.querySelector('#progress');
const result = document.querySelector('#result');
const options = {
type: 'key-points',
format: 'markdown',
length: 'short',
preference: 'capability',
expectedInputLanguages: ['en'],
outputLanguage: 'en'
};
if (!('Summarizer' in self)) {
result.textContent = 'Summarizer API is not available.';
} else {
const availability = await Summarizer.availability(options);
result.textContent = `Model status: ${availability}`;
run.disabled = availability === 'unavailable';
}
run.addEventListener('click', async () => {
run.disabled = true;
progress.hidden = false;
let summarizer;
try {
summarizer = await Summarizer.create({
...options,
monitor(m) {
m.addEventListener('downloadprogress', e => {
progress.value = e.loaded;
result.textContent =
`Downloaded: ${Math.round(e.loaded * 100)}%`;
});
}
}<!doctype html>
<meta charset="utf-8">
<textarea id="source" rows="12" cols="80">
Paste an English article here.
</textarea><br>
<button id="run" disabled>Summarize locally</button>
<progress id="progress" value="0" max="1" hidden></progress>
<pre id="result">Checking model…</pre>
<script type="module">
const source = document.querySelector('#source');
const run = document.querySelector('#run');
const progress = document.querySelector('#progress');
const result = document.querySelector('#result');
const options = {
type: 'key-points',
format: 'markdown',
length: 'short',
preference: 'capability',
expectedInputLanguages: ['en'],
outputLanguage: 'en'
};
if (!('Summarizer' in self)) {
result.textContent = 'Summarizer API is not available.';
} else {
const availability = await Summarizer.availability(options);
result.textContent = `Model status: ${availability}`;
run.disabled = availability === 'unavailable';
}
run.addEventListener('click', async () => {
run.disabled = true;
progress.hidden = false;
let summarizer;
try {
summarizer = await Summarizer.create({
...options,
monitor(m) {
m.addEventListener('downloadprogress', e => {
progress.value = e.loaded;
result.textContent =
`Downloaded: ${Math.round(e.loaded * 100)}%`;
});
}
});
result.textContent =
await summarizer.summarize(source.value);
} catch (error) {
result.textContent =
`${error.name}: ${error.message}`;
} finally {
summarizer?.destroy();
progress.hidden = true;
run.disabled = false;
}
});
</script>
);
result.textContent =
await summarizer.summarize(source.value);
} catch (error) {
result.textContent =
`${error.name}: ${error.message}`;
} finally {
summarizer?.destroy();
progress.hidden = true;
run.disabled = false;
}
});
</script>
Сохранить страницу можно как index.html, рядом запустить python3 -m http.server 8000 и открыть http://127.0.0.1:8000/ [5]. Встроенные API доступны [3] на localhost [6].
availability() возвращает четыре состояния: available, downloadable, downloading и unavailable. Состояние самой модели и ошибки [7] видны в chrome://on-device-internals.
Да.
Если Gemini Nano уже установлена, веб-страница может создать сеанс и передавать модели задания. Отдельного системного запроса вроде «сайт example.com хочет использовать локальный ИИ — разрешить?» Chrome не показывает.
Если модель ещё нужно скачать, браузер требует любого совершения действия со стороны пользователя [3] перед началом загрузки. Но речь идёт не о специальном разрешении: достаточно обычного клика или другого взаимодействия.
После создания сеанса сайт может продолжать ставить модели задачи, пока работает страница, публично квоты вида «не более N запросов на сайт» Chrome не заявляет. Это не означает полного отсутствия внутренних ограничителей, но рассчитывать на понятную пользователю квоту нельзя.
В итоге CPU, GPU и батарея посетителя становятся ещё одним ресурсом веб-приложения.
Когда-то сайты майнили на компьютерах пользователей криптовалюту. Теперь технически можно майнить пересказы.
Давайте еще раз уточним: локальная модель не умеет сама открыть соседнюю вкладку, прочитать файл с диска или обойти защиту браузера. Она получает только те данные, которые ей передал вызывающий код. А код, собственно, тоже не может получить данные из соседней вкладки – за этим следит давно отработанная модель защиты Chrome. Грубо говоря, если рядом открыта авторизованная вкладка интернет-банка, вызов Gemini Nano не начнет давать ответы, сколько денег на счете он на ней видит.
По сути, обычная веб-страница может обработать только собственное содержимое, введённый пользователем текст, плюс ресурсы, к которым у неё уже есть доступ по Same-origin policy [8] и CORS.
Но есть менее эффектный и вполне практический сценарий.
Владелец сервиса может отправить браузеру посетителя произвольный текст, и там прогнать через Gemini Nano. Данные получает сервис, а вычисление оплачивает пользователь. Если прикинуть число установленных в мире копий Chrome, в теории получает огромную армию солдат Урфина Джуса не очень “умных”, но моделей, часть из которых работает на видеокартах.
Расширение браузера способно читать больше, если пользователь заранее выдал ему соответствующие разрешения. Но и здесь дополнительные возможности появляются из прав расширения, а не из самой модели.
Google заявляет [3], что данные запроса к встроенной модели не отправляются Google или третьим лицам.
Для самого инференса это сильная и довольно однозначная гарантия.
Но она ничего не говорит о приложении, которое вызвало модель.
Сайт видит исходный текст и получает результат. После этого ему ничто не мешает отправить и то, и другое обычным fetch() на свой сервер, сохранить в аналитике или передать другой модели.
Поэтому фразы «модель работает локально» и «данные не покидают компьютер» не равнозначны. Первая описывает только место выполнения модели.
Диагностические следы тоже остаются на машине. В chrome://on-device-internals есть Event Logs, которые можно экспортировать [9] в JSON. В отладочных данных могут встречаться сами запросы, поэтому такой файл стоит проверить перед отправкой в публичный баг-трекер. Кстати, документация Google не описывает автоматическую передачу текстов локальных запросов как телеметрию.
На 8 августа 2026 года России нет в официальном списке [10] стран, где работает веб-приложение Gemini. Gemini in Chrome также доступен только в поддерживаемых регионах [11].
Поэтому отсутствие кнопки Ask Gemini у российского пользователя — штатное региональное ограничение.
С Gemini Nano ситуация другая. Это компонент самого Chrome, и его доступность не определяется списком стран для Gemini Apps. Здесь важны версия браузера, операционная система и оборудование.
Есть, правда, другое ограничение. Начиная с Chrome 149 Gemini Nano поддерживает [3] ввод и вывод на английском, испанском, японском, немецком и французском языках. Русского в списке пока нет.
Это может породить довольно забавную ситуацию: на российском компьютере лежит несколько гигабайт локальной Gemini, облачная кнопка Gemini официально недоступна, а локальная модель ещё и не умеет нормально работать с русским текстом.
Локальная модель устанавливается как компонент Chrome. В профиле появляется каталог OptGuideOnDeviceModel, а внутри — в частности, файл weights.bin.
Его размер не одинаков на всех машинах.
Перед загрузкой Chrome оценивает [12] оборудование и выбирает подходящий вариант модели. Это может быть более крупный 4B или облегчённый 2B — примерно четыре и два миллиарда параметров соответственно. На менее “способных” системах возможно выполнение на CPU.
Для Prompt, Summarizer, Writer, Rewriter и Proofreader API Chrome требует [3] не менее 22 ГБ свободного пространства на разделе, где расположен профиль браузера (это не означает, что сама модель занимает 22 ГБ. Это порог допуска).
Для выполнения на GPU требуется больше 4 ГБ видеопамяти. Для CPU — не менее 16 ГБ оперативной памяти [13] и четырёх ядер.
Если свободного места становится меньше 10 ГБ, Chrome может удалить модель.
Фактические путь, версию и размер лучше смотреть в chrome://on-device-internals, а не искать weights.bin по совету из интернета: вариант модели зависит от конкретного компьютера.
Потому что Gemini Nano нужна не только веб-сайтам.
Chrome сам использует её для некоторых функций, поэтому браузер может скачать модель “в фоне”, и по своему решению. В документации [12] описан очевидный сценарий: приложение вызывает API, Chrome проверяет оборудование и при необходимости загружает модель. Но пользовательская справка [14] отдельно предупреждает, что модели могут скачиваться заранее, чтобы нужные функции были готовы к работе. Поэтому ситуация «я никогда не запускал локальный генератор текста, но нашёл на диске четыре гигабайта весов» совершенно штатная.
Если брать шире, то Gemini Nano используется в Chrome ещё с 2024 года, но появляется на компьютерах не одновременно. Имеют значение оборудование и набор доступных функций.
Кстати, у меня история получилась ещё интереснее. Еще когда я переводил статью [15] про то, что Chrome без спроса скачивает 4 гб модель, я, перед удалением весов, запретил своему браузеру загружать их заново. Сейчас, когда в настройках Chrome появился нормальный переключатель «ИИ на устройстве», я обнаружил его включённым – т.е. Chrome решил, что без модели мне живётся плохо, и решил помочь.
Скорее всего, старая настройка просто не была связана с новой. Но с точки зрения [16] пользователя результат выглядит странно: однажды ты уже сказал браузеру, что локальная модель тебе не нужна, а спустя некоторое время снова обнаруживаешь её разрешённой. Выглядит как-то чрезмерно настойчиво.
Одно из основных применений Gemini Nano — защита от мошеннических сайтов.
Начиная с Chrome 137 модель участвует в обнаружении страниц, которые изображают «техническую поддержку» и пытаются заставить человека срочно позвонить по номеру, заплатить или установить программу.
Chrome при этом не скармливает Gemini Nano каждую открытую страницу.
Анализ запускается только при дополнительных признаках подозрительного поведения [17]. Один из примеров Google — использование Keyboard Lock API [18]. Если страница вызывает подозрение, Chrome локально передаёт её содержимое Gemini Nano. Модель пытается определить не просто тему текста, а намерение страницы: например, убеждает ли она пользователя позвонить по указанному номеру или установить программу.
При «Улучшенной защите» результат анализа — сводка признаков мошенничества — отправляется [19] в Google Safe Browsing. Там он объединяется с другими сведениями о сайте, после чего система принимает окончательное решение.
При «Стандартной защите» такая сводка с компьютера пользователя не отправляется. Пользователь получает блокировку позднее, когда сайт попадёт в общие списки Google.
Поэтому утверждение «Gemini Nano анализирует страницу локально» совершенно верно.
А вот следующий вывод: “раз модель локальная, значит Google ничего не получает” – уже неверен, т.к. при «Улучшенной защите» локален один этап детектирования, а не вся система.
Gemini Nano — не облачный Gemini, только уменьшенный до размеров ноутбука.
Локальная модель работает в гораздо более жёстких пределах по памяти, вычислительным ресурсам и размеру контекста. Chrome подбирает вариант модели под конкретный компьютер, может использовать GPU или CPU.
Особенно заметны ограничения на длинных документах: текст приходится делить на части, пересказывать фрагменты, а затем собирать итог из промежуточных резюме. Google предупреждает [20], что качество при такой обработке ухудшается, а выполнение может занять несколько минут.
Для чернового пересказа, классификации или извлечения ключевых пунктов этого вполне достаточно, но там, где существенная ошибка недопустима, — явно нет.
Несколько гигабайт весов на диске не означают, что Gemini Nano постоянно занимает CPU или GPU. В Chromium стандартный тайм-аут простоя составляет пять минут, после чего модель выгружается.
Во время работы Chrome использует GPU, если оборудование подходит, иначе — CPU. Расход ресурсов зависит от варианта модели, длины текста и задачи. Для встроенной защиты от мошенников Google отдельно ограничивает число токенов, частоту запусков и время работы GPU.
При этом отдельной per-site настройки «этому сайту можно использовать Gemini Nano» у пользователя нет.
И это, пожалуй, важнее самих четырёх гигабайт на диске: веб-страница получает новый вычислительный ресурс, который пользователь контролирует слабее, чем камеру, микрофон или геолокацию.
Gemini Nano обновляется не небольшими патчами. Chrome скачивает новую базовую модель целиком, документация [12] объясняет это тем, что веса между версиями изменяются слишком сильно и эффективное дельта-обновление теряет смысл. Для отдельных функций могут использоваться небольшие дополнительные веса LoRA, но новая базовая модель всё равно приезжает полностью. Во время обновления Chrome продолжает использовать старую версию до переключения на новую, поэтому некоторое время на диске могут находиться обе.
Есть здесь и более экзотический вопрос: что произойдёт, если заменить веса установленной Gemini Nano?
Через штатный канал обновления сделать это просто так нельзя: компоненты Chrome приходят в подписанных CRX-пакетах, а браузер проверяет [21] подпись и открытый ключ. Но это защищает доставку.
Если злоумышленник уже получил право записи в каталог профиля или контроль над системой управления рабочими станциями, он может попробовать изменить распакованные файлы на диске.
В текущем исходном коде Chromium функция проверки модели [22] убеждается только в наличии файла весов и конфигурации, повторного вычисления контрольной суммы weights.bin именно в этой функции нет.
Из этого нельзя делать вывод, что Chrome вообще нигде не проверяет формат или целостность модели, но и механизма, который из этого кода гарантированно обнаруживает любую последующую замену уже установленного файла, сейчас не видно.
Совсем чужой файл, скорее всего, просто не загрузится. Интереснее теоретический вариант совместимой модели с изменённым поведением [23]: например, систематически искажающей резюме или иначе классифицирующей мошеннические страницы.
Google в любом случае рекомендует считать [24] вывод модели недоверенным содержимым.
Эта тема уже тянет на отдельное исследование, но сам факт появления многогигабайтных обновляемых весов как доверенного компонента браузера стоит иметь в виду администраторам.
Если выключить «ИИ на устройстве», Chrome удаляет [14] локальную модель и запрещает её повторную загрузку. Функции, которым требуется Gemini Nano, перестают работать. Ask Gemini от этого никак не становится локальным: это другая, облачная система. При повторном включении Chrome снова получает право скачать модель.
Не хватает промежуточного режима: «временно не запускай Nano, но не удаляй несколько гигабайт весов».
Для ноутбука это было бы вполне практично. Сейчас выбор почти двоичный: либо модель разрешена, либо “с вещами на выход”. Варианта “когда я на батарее, не включай модель”, увы, нет.
Для организаций есть политика Chrome Enterprise GenAILocalFoundationalModelSettings. В описании политики [25] значение 0 разрешает автоматическую загрузку и локальную обработку, а 1 запрещает загрузку и удаляет уже установленную модель. Политика действует на браузер целиком, а не на отдельный профиль.
В Windows это REG_DWORD по пути SoftwarePoliciesGoogleChromeGenAILocalFoundationalModelSettings со значением 1.
В macOS настройка обычно доставляется через MDM. В Linux можно положить в /etc/opt/chrome/policies/managed/ JSON:
{
"GenAILocalFoundationalModelSettings": 1
}
Общие способы применения политик описаны в справке [26], а фактическое состояние видно в chrome://policy.
То есть домен Active Directory для запрета локальной модели совершенно не обязателен.
Основной диагностический адрес — chrome://on-device-internals.
Там можно посмотреть состояние модели, её версию, путь, размер и журнал событий.
В Windows модель обычно оказывается в %LOCALAPPDATA%GoogleChromeUser DataOptGuideOnDeviceModel, в macOS — в ~/Library/Application Support/Google/Chrome/OptGuideOnDeviceModel/.
Но ориентироваться лучше на путь, который показывает сам Chrome.
Есть и простой эксперимент, позволяющий окончательно развести две системы.
Установите Gemini Nano полностью, вызовите Summarizer, затем отключите сеть. Summarizer продолжит работать [3]. “Ask Gemini“ — нет. Две функции находятся в одном браузере, обе называются Gemini, обе могут пересказать одну и ту же страницу, но технически между ними почти нет ничего общего.
История с четырьмя гигабайтами weights.bin сама по себе скорее забавная. Намного интереснее архитектура, которая за ними стоит.
Chrome одновременно развивает две совершенно разные системы.
Ask Gemini — облачный сервис. Пользователь вызывает его через интерфейс браузера, содержимое вкладки уходит Google, там же происходит обработка.
Gemini Nano — локальный вычислительный компонент. У пользователя нет отдельного чата с этой моделью. Её вызывают сайты и расширения через API, а также сам Chrome для собственных функций.
Из этого следуют три довольно практических вопроса.
Первый — конфиденциальность. Надпись «ИИ на устройстве» ещё не означает, что конкретная функция Chrome работает локально. А локальный инференс, в свою очередь, не означает, что вызвавший модель сайт не отправит результат наружу.
Второй — ресурсы. Сайты получают новый вычислительный API и могут использовать CPU, GPU и батарею посетителя без отдельного разрешения для конкретного домена.
Третий — управление. Chrome умеет скачать несколько гигабайт модели в фоне, полностью заменить их при обновлении и использовать в защитных механизмах, но пользователю пока доступно довольно мало информации о том, кто и когда эту модель запускает.
От браузера здесь хотелось бы три простые вещи: разрешение на использование локальной модели для каждого сайта, режим временной паузы без удаления весов и нормальный журнал — кто запускал модель, сколько ресурсов использовал и передавался ли результат дальше.
А пока достаточно помнить короткую формулу:
Ask Gemini — облако. Gemini Nano — локальная модель. Всё остальное зависит от того, кто именно её вызвал и что этот код сделал с данными после ответа.
Автор: achekalin
Источник [27]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/34147
URLs in this post:
[1] центре конфиденциальности: https://support.google.com/gemini/answer/13594961?hl=ru
[2] справке Chrome: https://support.google.com/chrome/answer/16283624?hl=ru
[3] прямо обещает: https://developer.chrome.com/docs/ai/get-started?hl=ru
[4] Prompt API: https://developer.chrome.com/docs/ai/prompt-api?hl=ru
[5] http://127.0.0.1:8000/: http://127.0.0.1:8000/
[6] localhost: http://localhost
[7] ошибки: http://www.braintools.ru/article/4192
[8] Same-origin policy: https://developer.mozilla.org/ru/docs/Web/Security/Same-origin_policy
[9] экспортировать: https://developer.chrome.com/docs/ai/debug-gemini-nano?hl=ru
[10] официальном списке: https://support.google.com/gemini/answer/13575153?hl=ru
[11] поддерживаемых регионах: https://support.google.com/gemini/answer/17140089?hl=ru
[12] оценивает: https://developer.chrome.com/docs/ai/understand-built-in-model-management?hl=ru
[13] памяти: http://www.braintools.ru/article/4140
[14] пользовательская справка: https://support.google.com/chrome/answer/16961953?hl=en
[15] статью: https://habr.com/ru/articles/1032538/
[16] зрения: http://www.braintools.ru/article/6238
[17] поведения: http://www.braintools.ru/article/9372
[18] Keyboard Lock API: https://developer.mozilla.org/ru/docs/Web/API/Keyboard_Lock_API
[19] отправляется: https://security.googleblog.com/2025/05/using-ai-to-stop-tech-support-scams-in.html?hl=ru
[20] предупреждает: https://developer.chrome.com/docs/ai/scale-summarization?hl=ru
[21] проверяет: https://chromium.googlesource.com/chromium/src/+/lkgr/components/component_updater/README.md
[22] проверки модели: https://chromium.googlesource.com/chromium/src/+/HEAD/components/optimization_guide/core/model_execution/on_device_model_component.cc#305
[23] поведением: http://www.braintools.ru/article/5593
[24] считать: https://developer.chrome.com/docs/ai/built-in-ai-dos-donts?hl=ru
[25] описании политики: https://chromeenterprise.google/policies/gen-ai-local-foundational-model-settings/
[26] справке: https://support.google.com/chrome/a/answer/9037717?hl=ru
[27] Источник: https://habr.com/ru/articles/1068242/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1068242
Нажмите здесь для печати.