Приватный ИИ-агент на своём железе: собираем связку Qwen 3.5 7B и Smolagents
Разбираю, как поднять рабочего ИИ-агента локально, без облака и утечки данных наружу: локальная модель Qwen 3.5 7B плюс лёгкий фреймворк Smolagents. С честным списком того, где 7B упирается.
Я долго откладывал этот эксперимент. Казалось, что локальный агент — это возня с драйверами ради модели, которая всё равно уступает облаку. Собрал связку и передумал. Для узких рабочих задач приватный агент на своём железе закрывает 80% того, ради чего я раньше ходил в API. Расскажу, как это выглядит на практике.
Зачем держать агента у себя
Главная причина одна — данные остаются со мной. Агент читает мои внутренние документы, выгрузки из аналитики, черновики клиентских стратегий, и я хочу быть уверен, что всё это лежит только на моей машине. Ни один провайдер этих файлов не видит, логировать нечего.
Второе — предсказуемая стоимость. Локальный прогон стоит электричества. Можно гонять агента в цикле сотни раз на отладке и вообще не смотреть на счётчик токенов. Мне как исполнителю это развязывает руки: экспериментируй сколько влезет.
Третье — автономность. Интернет отвалился, у провайдера сбой, лимиты кончились — агент на своём железе продолжает работать.
Почему именно Qwen 3.5 7B
Модель на 7 миллиардов параметров после квантизации помещается в память обычной пользовательской видеокарты. Ей не нужен сервер за конские деньги. При этом последние поколения Qwen заметно подтянулись в двух критичных для агента вещах: следование инструкциям и генерация кода.
Агенту нужна прежде всего дисциплина. Он должен понять задачу, выбрать инструмент, вызвать его с правильными аргументами и разобрать ответ. Эрудиция тут вторична. С такой работой 7B-модель справляется стабильно, если задачи узкие и хорошо описаны. Запускаю через Ollama — самый ленивый путь: одна команда, и у тебя локальный OpenAI-совместимый эндпоинт.
Что делает Smolagents
Smolagents — маленький агентный фреймворк от Hugging Face. Его фишка в том, что агент пишет свои действия обычным кодом на Python. Никакого громоздкого JSON с вызовами инструментов. Модель генерирует короткий скрипт, фреймворк исполняет его в песочнице, результат возвращается обратно в диалог. Для слабой локальной модели это подарок: пару строк питона написать проще, чем безошибочно заполнить сложную схему аргументов.
Сам фреймворк лёгкий, без десятка зависимостей и слоёв абстракций. Мне это близко: чем меньше кода между мной и моделью, тем меньше мест, где что-то молча ломается.
Как я собирал связку
Порядок вышел такой:
- Поднял Qwen 3.5 7B в Ollama, проверил, что эндпоинт отвечает.
- Подключил его к Smolagents как локальную модель через OpenAI-совместимый интерфейс.
- Дал агенту два-три своих инструмента: поиск по локальным файлам, вызов калькулятора, запрос к моей аналитике.
- Прогнал на реальной рабочей задаче — свести данные из нескольких выгрузок и выдать короткий вывод.
Первые прогоны были кривыми: модель то забывала вернуть результат, то плодила лишние шаги. Замена модели тут не поможет. Помогает точный системный промпт и короткое описание инструментов. Чем яснее сказано, что делает каждый инструмент и в каком виде ждём ответ, тем ровнее работает 7B.
Где 7B честно упирается
Не хочу продавать сказку. Локальная модель на 7 миллиардов параметров — рабочая лошадка с потолком.
Длинные цепочки рассуждений она держит хуже облачных гигантов. Если задача требует пяти-шести последовательных выводов с ветвлениями, растёт шанс, что агент собьётся на середине. Я разбиваю такие задачи на короткие шаги и не жду от одного прогона слишком многого.
Сложный незнакомый код она пишет с ошибками. Для агентных действий из пары строк этого хватает. Для генерации целого модуля — уже нет.
Редкие узкоспециальные знания в 7B просто не помещаются. Когда нужна широкая эрудиция, я всё ещё иду в большую модель. Локальный агент закрывает повторяющиеся операции над моими же данными.
Что забрать с собой
Приватный агент на своём железе — это уже не игрушка для энтузиастов. Связка Qwen 3.5 7B и Smolagents собирается за вечер и честно тянет узкие рабочие задачи: разобрать файлы, посчитать, свести, выдать вывод. Данные остаются у тебя, стоимость прогонов около нуля, потолок модели известен заранее.
Совет тем, кто пробует впервые: начните с одной понятной задачи и двух инструментов. Расширяйте связку, когда убедитесь, что базовый цикл работает стабильно. Так вы быстро нащупаете, где локальной модели достаточно, а где всё же стоит дёрнуть облако.