ИИ на своём железе: как скормить модели свой контекст мимо облака
Разбираю на своих кейсах, зачем держать модель локально, когда данные жалко отдавать наружу, и как подложить ей свой контекст — от вставки в промпт до RAG и агентов.
Почему я вообще полез в локаль
Когда я разбирал для проекта RFMT вопрос «скрапить или покупать данные», уперся в ФЗ-152. Как только ты хранишь контакт конкретного человека — телефон или почту, привязанные к имени, — на тебе висит обязанность по уведомлению (ст. 18 ч. 3). Метод получения тут роли не играет. И вот такие данные я не хочу гонять через чужой API. Одно дело отправить в облако обезличенную метрику канала, другое — прогнать через него базу с реальными владельцами. Отсюда и запрос: держать модель у себя, кормить её своим контекстом, ничего наружу не отдавать.
Что «локальная модель» реально означает
Локально — это модель с открытыми весами, которая крутится на твоём железе. Ты скачиваешь файл весов, поднимаешь рантайм, шлёшь запросы на localhost. Дальше два уровня приватности:
- Веса на диске — трафик не покидает машину.
- Контекст в оперативке — твои документы модель видит только в момент запроса и забывает после.
Порог входа ниже, чем кажется. Модели уровня 7B (я гонял Qwen 3.5 7B) запускаются на потребительской видеокарте, а квантованные версии влезают даже туда, где памяти в обрез. Мощный сервер для старта не нужен.
Как дать модели свой контекст
Сама по себе локальная модель знает ровно то, что было в обучении. Твои таблицы, переписки, регламенты она увидит, только если ты их подложишь. Три рабочих способа, от простого к сложному:
- Прямо в промпт. Один документ на пару страниц — вставляешь текст в запрос. Дёшево, работает сразу, упирается в размер окна.
- RAG. Складываешь базу в векторное хранилище, на каждый вопрос достаёшь релевантные куски и подкладываешь их модели. Это то, что я собирал под RFMT: база живёт локально, модель дёргает из неё нужное.
- Агент с инструментами. Модель сама ходит по твоим источникам — файлам, локальной БД, скриптам. Такой стек я поднимал на Smolagents поверх Qwen: агент получает задачу, вызывает инструменты, собирает ответ из твоих данных.
Для большинства бытовых задач хватает первого-второго пункта. Агент нужен, когда шагов много и модель должна сама решать, куда сходить.
Минимальный стек, который я бы советовал
- Рантайм. Ollama или llama.cpp — поднимается в пару команд, сам тянет веса.
- Модель. Что-то в районе 7B для старта. Крупнее — если железо позволяет и качество не устраивает.
- Контекст. На старте — просто вставка в промпт. Когда документов станет много, добавляешь RAG.
- Оркестрация. Smolagents, если дошёл до агентов. Для одиночных запросов она избыточна.
Такая связка ставится за вечер и уже отвечает на вопросы по твоим файлам.
Где локаль честно проигрывает облаку
Скажу прямо, чтобы потом не было разочарования. 7B-модель слабее топовых облачных: она чаще путается в длинных рассуждениях и хуже держит сложную логику. Скорость упирается в твою видеокарту. За качество уровня near-frontier придётся либо докупать железо, либо мириться с просадкой.
Поэтому я делю работу по типу данных: чувствительное и внутреннее остаётся на локальной модели, обезличенное и неважное спокойно уходит в облако к сильной. Это тот же принцип, к которому я пришёл в истории со скрапингом — граница проходит по слою данных, метод получения вторичен.
С чего начать сегодня
Возьми одну задачу, где данные жалко отдавать наружу. Подними Ollama, скачай 7B-модель, вставь нужный документ прямо в запрос. Если ответы устраивают и документов набирается много — прикручиваешь RAG. Дошёл до многошаговых сценариев — смотришь в сторону агентов. Каждый шаг проверяется руками за вечер, и на любом можно остановиться.