← AI Advent 2026

День 27: локальная модель в приложениях

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

Что это значит

Локальная модель в приложениях уже работает, и поэтому у этого дня нет своего замера.

Веб-приложения проекта выбирают модель по имени из общего реестра. Среди имён есть локальная: она отвечает на ноутбуке владельца, а не у поставщика в облаке. Запрос доходит до неё тем же путём, что до облачной, — через сервис агентов и роутер; разница только в том, какая запись реестра выбрана. В дне 11 есть и режим, где к локальной модели не примешивается ни один облачный вызов.

  • Модель живёт на ноутбуке владельца. Она доступна сайту только при включённой частной сети на ноутбуке; когда ноутбук выключен или сеть остановлена, роутер отвечает отказом «провайдер недоступен», и посетитель видит именно отказ, а не пустой ответ.
  • Сборка без встроенных отказов доступна только по именному ключу: без ключа её в списке дня 11 нет вовсе.
  • Полностью локальный контур проверяется конфигурацией, а не замером: страница показывает, где это видно в коде, и не обещает чисел.
Почему у этого дня нет замера

Задание дня 27 — «приложение шлёт запросы в локальную LLM, получает и отображает ответы, работает без облачных моделей». Оно было закрыто раньше, чем началась неделя локальной LLM: локальная модель попала в реестр роутера и в списки моделей дней 5 и 11 ещё в сентябре, а полностью локальный контур — в начале октября. Пробела не осталось, а значит, нечего и мерить.

Остальные четыре дня недели закрывают настоящие пробелы и показывают числа прогонов. Эта страница их не показывает не потому, что прогон не удался, а потому что прогона не было: подставить сюда дату правки файла или чужие числа значило бы соврать. Решение — ADR 2026-10-09-1335, п. 5.

Что уже было закрыто

Пробела не было: к началу недели приложение уже спрашивало локальную модель и показывало её ответы, поэтому своего прогона у этого дня нет. Отсутствие пробела — тоже результат недели.

Как запрос доходит до модели

  1. Посетитель выбирает модель на экране дня 11 и пишет реплику; экран шлёт её своему серверу. days/day11/public/index.html
  2. Сервис агентов собирает контекст профиля и берёт выбранное имя модели из своего списка — локальная запись стоит там рядом с облачными. agents/src/params.js
  3. Роутер находит запись реестра по имени и видит у неё ярус self-hosted: вызов пойдёт не поставщику, а на свою машину. router/config/providers.json
  4. Запрос уходит с сервера на ноутбук по частной сети: наружу, в публичный интернет, он при этом не выходит, а служба на ноутбуке другого адреса и не слушает. deploy/mac/ai.zpq.ollama-tailnet.plist
  5. Ollama на ноутбуке генерирует ответ, адаптер роутера приводит его к общей форме, и экран показывает текст — так же, как показал бы ответ облачной модели. router/src/adapters/ollama.js
Что именно значит «без облака»

Обычный профиль дня 11 после каждого отвеченного хода просит модель сжать историю в сводку и пополнить память профиля. Если модель для ответа выбрана локальная, эти служебные вызовы всё равно могут идти к облачной — и тогда «локально» верно только про сам ответ.

В ключевом профиле дня 11 оба служебных механизма выключены: контекст собирается стратегией окна, сводка не заказывается, память профиля не пополняется. Ни промпт, ни порождённый моделью текст не уходят внешнему поставщику — это условие, под которым профиль вообще существует, и видно оно в конфигурации и в коде сервиса агентов, а не в числах замера.

Где это записано: ADR 2026-10-07-1349, раздел про память профиля; у записи реестра для этого профиля нет ни поиска в сети, ни инструментов — router/config/providers.json.

Посмотреть, как это работает

Приложение, которое спрашивает локальную модель и показывает её ответы, — чат дня 11. Эта страница его не воспроизводит.

Открыть день 11

Локальная модель отвечает в нём, пока на ноутбуке включена частная сеть. Сборка без встроенных отказов видна только внутри профиля, созданного с именным ключом; ключ выдаёт владелец.

Задание дня

День 27 «Интеграция локальной LLM в приложение»: CLI/телеграм-бот/веб-приложение; приложение шлёт запросы в локальную LLM, получает и отображает ответы, работает без облачных моделей.