AI Пробуем использовать локальные LLM для написания кода

AI

Команда форума
Редактор
Регистрация
23 Авг 2023
Сообщения
4,113
Реакции
0
Баллы
36
Ofline

Интро​


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

93807ad871e30f76694243271f0dbd72.jpg

Ограничения у облачных моделей​


У всех облачных моделей есть ряд ограничений. Рассмотрим основные из них.

Лимиты (часовые, суточные и недельные). Когда квоты заканчиваются, вы не можете пользоваться моделью до начала нового периода с новыми квотами. Решения тут могут быть только такими: использовать другого провайдера или перейти на более дорогой тарифный план с большими квотами.

Приватность. Всё, с чем работает ваш агент (код, промпты, файлы), передаётся на удалённые серверы провайдера LLM, который предоставляет вам модель. Моделям нужны ваши данные для анализа и подготовки ответов — по‑другому практически никак.
Но есть альтернатива: развернуть модель локально и не передавать данные никуда.

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


Локальные модели: компромисс качества и ресурсовЛокальные модели и ресурсы​


Сразу становится понятно, что за приватность придётся платить качеством модели. На серверах работают огромные модели, которым нужно много ресурсов. Критически важные из них — это оперативная память (RAM) и видеопамять (VRAM). Локально у нас нет столько ресурсов, и приходится балансировать между нашими ресурсами и качеством модели. И как следствие — использовать модели с меньшим числом параметров.

Для быстрой работы нужно, чтобы вся модель помещалась в VRAM — это идеальный вариант. Если она полностью поместится в RAM — это рабочий вариант, но уже не такой хороший по скорости.

Наша основная цель — проверить, может ли локальная модель отвечать за время, сравнимое с облачной, и при этом с приемлемым качеством.

Память Apple Silicon​


Тестировать мы будем на MacBook Pro с процессором M4 Pro и 48 ГБ памяти. Машина достаточно мощная и должна себя хорошо показать. Мы ожидаем, что скорость её работы будет ненамного хуже, чем у облачных моделей, но качество — ниже. На других конфигурациях могут быть другие результаты.

Стоит ещё немного рассказать про память в устройствах Apple. Архитектура Apple Silicon: процессоры серии M используют так называемую unified memory (унифицированная память) — это общая память и для графического, и для центрального процессора. Значит, у нас нет раздельной оперативной памяти и видеопамяти. У нас один пул памяти, который доступен как центральному, так и графическому процессору. С одной стороны, это для нас очень хорошо, так как 48 ГБ памяти (за исключением затрат на приложения) доступны нам для модели, и это очень хорошие цифры. Но с другой стороны, все работающие приложения потребляют ту же память, что и модель, и могут мешать друг другу.

Поиск локальной модели​

Как найти и выбрать локальную модель?​


Теперь, когда мы разобрались с возможностями Mac, перейдём к выбору подходящей модели. Для поиска моделей существуют специальные агрегаторы с фильтрами, например Hugging Face, где представлено множество моделей, доступных для локального использования. Там есть фильтры, которые помогают в поиске.

Что важно знать при поиске модели:


  • Специализация. Модели могут быть узконаправленными (например, Qwen3-Coder, для написания кода — в названии часто встречается [I]coder[/I]) или более общими (например, Qwen3.5, которая может работать как с текстом, так и с картинками).


  • Ресурсы и совместимость. Если зарегистрироваться и добавить свою конфигурацию ресурсов, можно отслеживать, какая модель совместима с вашим железом, а какая потребует слишком много ресурсов. Такая же возможность проверки есть в поиске модели в LM Studio. Тут стоит помнить, что кроме ресурсов для модели вам еще нужна память для контекста, с которым модель будет работать.


  • Форматы: GGUF и MLX

    • GGUF — универсальный формат, работает на любых системах, обычно имеет больше настроек запуска модели


    • MLX — специальная версия для Mac с процессорами M-серии, оптимизированная для максимальной скорости.

  • Думающие модели (thinking mode). Это модели, которые перед тем как дать ответ, как бы «думают» — вы видите их рассуждения и финальный результат. Обычно они медленнее, но дают лучший результат. Qwen3.5 пример такой модели. Также стоит уточнить, что такие модели полезны для сложных рассуждений, но не для быстрого кодинга.


  • Использование сторонних инструментов (Function Calling) — поддержка вызова инструментов (Function Calling) важна для агентов, так как позволяет модели взаимодействовать с внешними программами.

Разбор аббревиатур в названии модели​


После того как вы познакомились с критериями выбора, полезно разобраться, что означают буквы и цифры в названии модели. Чтобы лучше понимать модели, разберём обозначения в названии модели на примере Qwen3-Coder-30B-A3B-Instruct-MLX-4bit


  • Qwen3 — семейство моделей от Alibaba Cloud.


  • Coder — указание на то, что модель ориентирована на работу с кодом.


  • 30B — размер модели в миллиардах параметров (30 миллиардов). Обычно больше параметров даёт лучшее качество, но модель работает медленнее и требует больше памяти.


  • A3B — обозначение архитектуры MoE (Mixture of Experts). Может отсутствовать в названии. Позволяет выжать максимум скорости: активируются только 3 миллиарда параметров из 30, благодаря чему скорость близка к 3B-модели, а качество — к 30B.


  • Instruct — модель, которая даёт ответ без предварительного «размышления» (без режима Thinking). Обычно отвечает быстрее и точнее реагирует на ваши команды.


  • MLX — версия для архитектуры Apple Silicon.


  • 4bit — квантизация (количество бит на один слой). Чем больше бит, тем точнее модель, но медленнее; чем меньше — тем быстрее, но менее качественные ответы может давать.

Далее посмотрим на еще одну характеристику моделей, которую редко встретишь на агрегаторах.

Оценки скорости работы моделей​


Вопрос довольно сложный, так как нужно искать баланс между качеством и скоростью работы. Ограничение сверху — модель должна помещаться в вашу память, и лучше с запасом. Есть ресурсы, например VRAM-калькулятор или Performance Explorer, которые помогают оценить скорость генерации токенов на вашей конфигурации для разных моделей. Стоит на него посмотреть, чтобы оценить производительность вашего железа. Вряд ли вас устроит модель, которая часами будет генерировать ответ. Однако слепо доверять таким прогнозам не стоит — это лишь ориентир для первичного сравнения.

Оценка M4 Pro для модели типа Qwen3-30B-A3B-4bit ~ 150 t/c
78966350281c90950e2af42354875f4f.png


Если у вас Mac с процессорами M-серии, то есть интересный проект oMLX, который пытается максимально оптимизировать скорость работы LLM, сам проект я не пробовал использовать. Но у него есть интересная страница, с реальными замерами разных моделей с разными конфигурациями железа и с разными размерами контекстов. Данные со страницы выглядят достоверными и согласуются с моими наблюдениями.


Запуск LLM локально​


Теперь, когда мы разобрались с оценкой скорости, перейдём к практическому запуску моделей. На сегодняшний день есть много способов запустить LLM локально. Рассмотрим несколько самых популярных из них:


  • Ollama — консольный интерфейс, который позволяет скачивать и запускать LLM (на мой взгляд, больше подходит для развёртывания на своих серверах из-за отсутствия удобного интерфейса).


  • LM Studio — имеет удобный графический интерфейс, работать в котором приятнее. Имеет встроенный чат и совместимый API со многими агентами.

Можно взять любую из них или любое другое решение — подход будет одинаковым. Мы же остановимся на LM Studio. Скачать её можно с официального сайта и установить. После запуска стоит сразу включить локальный сервер, чтобы агенты могли подключаться к модели по API. Сервер будет обрабатывать наши запросы и передавать их локальной модели.

Загрузка и настройка модели в LM Studio​


После того как мы выбрали LM Studio в качестве инструмента, перейдём к загрузке и настройке конкретной модели. Возьмём для примера модель Qwen3-Coder-30B-A3B-Instruct-MLX-4bit, которую ранее нашли на Hugging Face. Открываем LM Studio, вводим в поиск название модели и скачиваем её.

Скачиваем модель через LM Studio
e7ffe9f5a16c40392fedcbdcf868014d.png


После того, как скачали, нам нужно её загрузить.

Подсказки в интерфейсе
826e937931cecc9fa65bc0634c4ead27.png


Для корректной работы с расширениями нужно ещё в настройках сервера включить CORS. CORS необходим для того, чтобы внешние агенты (например, Claude Code) могли подключаться к серверу LM Studio.

Настройка CORS
alt


В результате мы получаем модель, готовую к использованию с локальным сервером, который будет принимать запросы от наших агентов.

Работающий сервер с загруженой моделью
c5714a81a8a7b19e975dd2982d85d6ad.png


В LM Studio уже есть встроенный чат, через который мы можем общаться с LLM. Это довольно удобно, если нам не нужно менять существующий код (например, для генерации разового скрипта или других одноразовых задач). Кроме того, там есть встроенный замер скорости генерации ответа — очень полезная вещь, чтобы сравнить реальные результаты моделей между собой и с прогнозируемыми оценками.

82 ток/сек реальный результат вместо 150
c9020aad998349da65cdc647589b7c4d.png


Теперь, когда модель загружена и настроена, перейдём к подключению агентов.

Подключаем агентов​


Тестировать мы будем на нескольких агентах: Claude Code, Kilo Code, Open Code, Aider. У нас будет несколько агентов, некоторые из них работают через CLI, другие — как плагины для VS Code. Не буду рассказывать, как установить каждый из них, про это есть много статей, только кратко расскажем как их подключить к локальной модели.


  • Kilo Code (v5.12.0) — в эксперименте был как плагин для VS Code, также плагин для IntelliJ IDEA и есть CLI. Kilo Code — форк Roo Code, который, в свою очередь, является форком Cline. Поэтому эти агенты так похожи между собой.


  • Open Code — CLI-агент с большим количеством звезд на GitHub.


  • Claude Code — наверное самый популярный CLI агент на сегодня от Anthropic.


  • Aider — небольшой CLI агент, который себя позиционирует как помощник по кодингу

Claude Code​


Нам нужно научить Claude Code работать с нашей локальной LLM. Первое, что стоит знать: у Claude Code свой API, немного другой, чем у всех остальных. В прошлый раз мы использовали Claude Code Router. Но в этот раз нам это не нужно — LM Studio поддерживает этот формат API из коробки.

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

Код:
export ANTHROPIC_BASE_URL=http://localhost:1234 - смотрим на локальный сервер
export ANTHROPIC_AUTH_TOKEN=lmstudio - тут просто заглушка
env | grep ANTHROPIC - проверим что все установилось

Запуск через стандартный вариант из консоли — нужно только указать название модели (можно скопировать из LM Studio):

claude --model qwen3-coder-30b-a3b-instruct-mlx

Kilo Code​


Kilo Code из коробки поддерживает LM Studio, поэтому просто добавляем нового провайдера и переключаем все профили для него.

Просто добавляем LM Studio как еще одного провайдера
90849b1e515968edc0b45cd96c2c9a3c.png

Не забываем переключить все профили на локальный
084f53d648d3ed2cf04ffe5206f3e21c.png

Open Code​


Настройка конфигурации Open Code делается через файл, расположенный по пути ~/.config/opencode/opencode.json . Вот пример файла с конфигурацией для 2 локальных моделей.

opencode.json

Код:
{
  "$schema": "https://opencode.ai/config.json",
  "provider": {
    "lmstudio": {
      "npm": "@ai-sdk/openai-compatible",
      "name": "LM Studio (local)",
      "options": {
        "baseURL": "http://127.0.0.1:1234/v1"
      },
      "models": {
        "qwen3-coder-30b-a3b-instruct-mlx-4bit": {
          "name": "qwen3-coder-30b (local)",
          "tools": true
        },
        "gemma-4-26b-a4b-it": {
          "name": "gemma-4-26b-a4b (local)",
          "tools": true
        }
      }
    }
  }
}

Далее при запуске Open Code в терминале нужно переключить на нужную нам модель, через команду /models

Меню с переключением моделей
4a35d9dde4e77ff543475e0ddff8a1e5.png

Aider​


Aider настраивается схожим способом с Claude Code через переменные окружения

Код:
export LM_STUDIO_API_KEY=dummy-api-key
export LM_STUDIO_API_BASE=http://localhost:1234/v1

и запускается с указанием имени модели:

aider --model lm_studio/qwen3-coder-30b-a3b-instruct-mlx-4bit

После настройки всех агентов мы можем приступать к тестированию их работы.


Что и как попробуем тестировать​


Данное тестирование очень субъективное и не отражает полной картины работы моделей или агентов, оно не предназначено для сравнения моделей или агентов между собой. К результатам стоит относиться с большой долей скепсиса. Но должно дать какое-то представление о времени работы моделей.

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

Краткое описание моделей​


Возьмем несколько моделей, которые попробуем потестировать, я выбрал самые интересные для меня:

План тестирования​


Тест состоит из нескольких этапов: сначала модель получает код на рефакторинг, затем — на ревью, и наконец — замечания для исправления.

Подробное описание плана:

Поэтапный план

  • Этап 1

    • даем LLM задачу на рефакторинг


    • замеряем время выполнения


    • делаем оценку результата работы

  • Этап 2

    • просим модель сделать ревью полученного кода и найти проблемы


    • просим устранить проблемы, которые она нашла


    • замеряем время выполнения


    • делаем оценку результата работы

  • Этап 3

    • даем модели замечания к устранению


    • замеряем время


    • делаем оценку результата работы


    • суммируем общее время работы

Делать оценку кода мы будем тоже через LLM, возьмем deepseek и прямо в чате будем ему давать код и файлы для оценки.

После нескольких подходов с deepseek, пришли к 10-балльной шкале оценок:

Скрытый текст

Критерий​

Макс. балл​

Точность денежных расчётов (BigDecimal + округление + корректное преобразование)​

3.0​

Типобезопасность (enum для категорий, DTO вместо Map)​

2.0​

Настраиваемость порога (не магическое число)​

1.0​

Валидация и обработка ошибок (null, неотрицательность, диапазон скидки, пропуск элементов)​

1.5​

Логирование (не System.out/err)​

0.5​

Модульные тесты (наличие)​

1.0​

Иммутабельность DTO​

0.5​

Чистая архитектура (разделение ответственности, внедрение зависимостей)​

0.5​

Итого​

10.0​

Это формальные критерии. Баллы также будут снижаться за дублирование кода, нерабочий код и другие недочёты


Сам же изначальный код для рефакторинга оставим такой же как и в прошлой статье

Сам код на Java

Код:
import java.util.*;

public class DataProcessor {
    public List<Map<String, Object>> processData(List<Map<String, Object>> data, Map<String, Object> options) {
        if (options == null) {
            options = new HashMap<>();
        }
        List<Map<String, Object>> result = new ArrayList<>();
        for (Map<String, Object> item : data) {
            if (item.containsKey("price") && item.containsKey("quantity")) {
                double price = ((Number) item.get("price")).doubleValue();
                int quantity = ((Number) item.get("quantity")).intValue();
                double discount = options.containsKey("discount") ? ((Number) options.get("discount")).doubleValue() : 0.0;
                double total = price * quantity * (1 - discount);
                
                Map<String, Object> processedItem = new HashMap<>();
                processedItem.put("name", item.getOrDefault("name", "Unnamed"));
                processedItem.put("total", total);
                if (total > 100) {
                    processedItem.put("category", "expensive");
                } else {
                    processedItem.put("category", "cheap");
                }
                result.add(processedItem);
            } else {
                System.out.println("Skipping item: " + item);
            }
        }
        return result;
    }

    public static void main(String[] args) {
        DataProcessor processor = new DataProcessor();
        List<Map<String, Object>> data = new ArrayList<>();
        
        Map<String, Object> item1 = new HashMap<>();
        item1.put("name", "Laptop");
        item1.put("price", 1000);
        item1.put("quantity", 1);
        data.add(item1);
        
        Map<String, Object> item2 = new HashMap<>();
        item2.put("name", "Mouse");
        item2.put("price", 25);
        item2.put("quantity", 2);
        data.add(item2);
        
        Map<String, Object> item3 = new HashMap<>();
        item3.put("price", 50);
        item3.put("quantity", 3);
        data.add(item3);
        
        Map<String, Object> item4 = new HashMap<>();
        item4.put("name", "Keyboard");
        item4.put("price", 80);
        item4.put("quantity", 1);
        data.add(item4);
        
        Map<String, Object> options = new HashMap<>();
        options.put("discount", 0.1);
        
        List<Map<String, Object>> result = processor.processData(data, options);
        System.out.println(result);
    }
}

Замеры в режиме чата​


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


локальная модель

скорость генерации токенов (ток/сек)

время 1 этапа (сек)

оценка после 1 этапа

время review (сек)

время 2 этапа
(сек)

оценка после 2 этапа

время 3 этапа (сек)

оценка после 3 этапа

суммарное время работы (мин:сек)

qwen3-coder-30b-a3b-instruct-4bit-gguf​

52-64​

37​

1.0​

0​

35​

1.5​

86​

8.5​

2:38​

qwen3-coder-30b-a3b-instruct-mlx@4bit​

56-73​

23​

1.0​

0​

24​

1.0​

82​

8.5​

2:09​

qwen3-coder-30b-a3b-instruct-mlx@5bit​

49-64​

29​

2.0​

0​

38​

2.5​

91​

9.0​

2:38​

qwen3-coder-30b-a3b-instruct-mlx@6bit​

44-59​

27​

1.5​

24​

32​

1.5​

91​

9.0​

2:54​

qwen3-coder-next-reap-48b-a3b-oq3.5​

54-62​

46​

1.0​

42​

47​

1.5​

77​

8.5​

3:32​

Qwen3.5-27B-4bit (thinking)​

14-15​

589​

5.5​

160​

554​

9.0​

469​

9.5​

29:32​

Qwen3.5-9B-4bit (thinking)​

39-45​

234​

1.0​

84​

82​

2.0​

587+​

2.0​

16:27​

qwen3.5-35b-a3b-4bit (thinking)​

69-77​

91​

3.0​

98​

70​

3.0​

93​

10.0​

5:43​

qwen3.5-35b-a3b-claude-4.6-opus-4bit (thinking)​

55-64​

62​

3.0​

46​

81​

3.0​

91​

9.0​

4:40​

nvidia-nemotron-3-nano-30b-a3b (thinking)​

81-89​

47​

3.0​

32​

48​

3.0​

71​

6.0​

3:18​

gemma-4-26b-a4b-it-gguf​

46-48​

42​

2.5​

21​

37​

8.0​

43​

10.0​

2:23​

Пояснения:


  • (thinking) в названии модели обозначает, что часть токенов, которые генерирует модель, уходит на подготовку ответа, поэтому ее реальная скорость генерации ответа на 30-50% ниже и общий ответ получается дольше


  • время review 0 - модель сразу начинала генерировать исправленный код, без предварительного анализа. Поэтому фактического ревью не проводилось


  • время 587+ секунд на 3 этапе у Qwen3.5 9B указано, так как модель запуталась и не смогла исправить код и начала бесконечно генерировать тесты

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


облачная модель

время 1 этапа (мин:сек)

оценка после 1 этапа

время review (мин:сек)

время 2 этапа
(мин:сек)

оценка после 2 этапа

время 3 этапа (мин:сек)

оценка после 3 этапа

суммарное время работы (мин:сек)

Qwen 3.6 plus (thinking) cloud chat​

2:51​

5.0​

1:20​

1:50​

5.0​

2:23​

10.0​

8:24​

Qwen 3.6 plus (fast) cloud chat​

0:38​

2.5​

0​

1:04​

4.0​

1:18​

10.0​

3:00​

Qwen 3 coder cloud chat​

0:17​

2.5​

0​

0:27​

2.0​

0:28​

2.0​

1:12​

DeepSeek (thinking) cloud chat​

0:52​

2.0​

0:52​

0:52​

2.5​

1:24​

9.0​

4:00​

ChatGPT 5.3​

0:27​

2.5​

0:27​

0:32​

2.5​

0:34​

10.0​

2:00​

Анализ результатов​


  • скорость работы в режиме чата локальных моделей сравнима со скоростью облачных, однако локальные модели в общем дают худший результат (но не всегда) за то же время


  • плотные модели Qwen3.5-27B-4bit и Qwen3.5-9B-4bit очень тяжелыми оказались для данного замера, было заметно, как кулеры начинали шуметь и компьютер начинал греться, хотя результаты у них получились лучше, время оказалось намного больше других результатов. На других моделях нагрузка не чувствовалась


  • режим thinking помогает и локальным и облачным моделям генерировать лучший результат


  • на втором этапе высокие оценки получили только 2 модели Qwen3.5-27B-4bit и Gemma-4-26B-A4B


  • Gemma-4-26B-A4B очень хорошо выглядит на фоне других по качеству и скорости


  • облачным моделям тоже нужно время на ответ, и иногда оно дольше, чем у локальных моделей, особенно в режиме thinking


  • чем больше битность, тем дольше отвечает модель, особого прироста в качестве не было замечено


  • GGUF и MLX: разница в скорости на Mac ожидаема, но оказалась не такой огромной

Далее посмотрим, как те же модели справляются в агентском режиме.

Замеры в режиме агента​


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


агент

локальная модель

время 1 этапа (мин:сек)

оценка после 1 этапа

время review (мин:сек)

время 2 этапа
(мин:сек)

оценка после 2 этапа

время 3 этапа (мин:сек)

оценка после 3 этапа

суммарное время работы (мин:сек)

Kilo Code​

Qwen3.5-27B-4bit​

1:04:16​

3.5​

-​

-​

-​

-​

-​

-​

Kilo Code​

nvidia-nemotron-3-nano-30b-a3b​

10:16​

1.0​

-​

-​

-​

-​

-​

-​

Kilo Code​

qwen3-coder-30b-a3b-instruct-mlx@4bit​

2:53​

2.0​

1:40​

3:10​

2.5​

7:22​

6​

15:05​

Kilo Code​

qwen3-coder-30b-a3b-instruct-mlx@5bit​

3:47​

2.5​

2:36​

5:23​

3​

9:34​

7.5​

21:20​

Kilo Code​

qwen3.5-35b-a3b-4bit​

5:49​

3.5​

4:17​

13:44​

3.5​

33:13​

9.0​

57:03​

Aider​

qwen3-coder-30b-a3b-instruct-mlx@4bit​

0:28​

2.0​

0​

0:46​

2​

1:36​

9.5​

2:50​

Open Code​

qwen3-coder-30b-a3b-instruct-mlx@4bit​

2:32​

2.0​

0:42​

0:33​

2.5​

3:46​

9​

7:33​

Kilo Code​

gemma-4-26b-a4b​

4:53​

3.5​

3:12​

5:39​

4.5​

4:54​

9​

18:38​

Claude Code​

gemma-4-26b-a4b​

1:14+2:01​

3.0​

3:30​

4:36​

6.0​

9:53​

10​

21:14​

Пояснения:


  • Qwen3.5-27B-4bit и nvidia-nemotron-3-nano-30b-a3b после первого этапа нет изменений. Эксперимент с этими моделями был остановлен из-за слишком долгого выполнения первого этапа


  • Claude Code два времени в 1 этапе, так как сначала делалась команда /init , а потом уже выполнялась сама задача


  • хотелось сделать замер qwen3-coder-30b-a3b-instruct-mlx@4bit и Claude Code, но на этапе ревью модель постоянно крашилась с ошибкой: Anthropic streaming error: The model has crashed without additional information. (Exit code: null). Возможная причина — нехватка памяти для контекста.


  • при замерах MacBook заметно грелся и кулеры гудели, работать было не особо комфортно, температура под нагрузкой держалась около 100 градусов на GPU
Скрин с температурой
aa61a126a94c1ee03554edfb0a3009dd.png


И как и в прошлом эксперименте с чатом, попробуем сделать эксперимент с агентом и облачной моделью


агент

облачная модель

стоимость

время 1 этапа (мин:сек)

оценка после 1 этапа

время review (мин:сек)

время 2 этапа (мин:сек)

оценка после 2 этапа

время 3 этапа (мин:сек)

оценка после 3 этапа

суммарное время работы (мин:сек)

Qwen Code CLI​

Qwen3.6 Plus​

0​

3:05​

5.0​

4:32​

2:45​

4.5​

3:03​

8.5​

13:25​

Qwen Code plugin​

Qwen3.6 Plus?​

0​

1:56​

4.5​

4:31​

0:32​

5.0​

3:39​

7​

10:38​

Kilo Code​

Qwen3.5 Plus​

$0,31​

2:03​

4.0​

0:22​

0:39​

4.0​

3:49​

9​

6:53​

Kilo Code​

Claude Opus 4.6​

$3.35​

2:22​

5.5​

0:50​

3:47​

8​

5:16​

10​

12:15​

Пояснения​


  • модель для Qwen Code указана как Qwen3.6 Plus, но достоверного подтверждения этому нет, информация взята из самого агента

Анализ результатов​


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


  • во всех замерах с локальными моделями, разве что за исключением Aider, MacBook заметно нагревался и было ощущение, что Mac пытается взлететь. Кулеры практически не останавливаясь шумели.


  • Gemma-4 единственная из моделей показала хорошие результаты на 2 этапе


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


  • при работе агентов нужно много памяти не только на модель, но и на контекст, иногда файл подкачки раздувался до 20 ГБ


  • чем проще агент, например Aider, тем быстрее он работает, но тем больше нужно с ним взаимодействовать


  • Open Code работает заметно быстрее, поскольку генерирует меньше контекста


  • Claude Code и Kilo Code генерируют больше контекста из-за чего модели тяжелее и она дольше работает


  • агенты — это не только про написание кода, в половине замеров агенты предлагали скомпилировать java код, а также его запустить. Думаю тут зависит не только от агента, но и от модели. На модели qwen3-coder-30b-a3b-instruct-mlx@4bit редко были предложения скомпилировать, на остальных почти всегда.


  • для локальных моделей лучше подходят более простые агенты Open Code и Aider, для Kilo Code и Claude Code кажется нужно заметно больше ресурсов.

Итоги и рекомендации​

Общие выводы​


С одной стороны, полученные выводы довольно очевидны, с другой — интересны.

Если отвечать на вопрос, можно ли сегодня на компьютере уровня MacBook M4 работать с локальными моделями, однозначного ответа нет. Точнее, он есть, но с уточнениями.

В режиме чата сегодня вполне можно работать с локальными ИИ и получать довольно приемлемые результаты за приемлемую скорость, при этом данные остаются у вас. Стоит выбирать модели с MoE-архитектурой — они хороши по скорости и приемлемы по качеству.

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

Для себя ещё отметил разницу в скорости работы агентов. И что ревью кода разумно делать другой моделью, чем той, которая его писала — так результат получается лучше.

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

Рекомендации, которых я бы придерживался, если бы был ограничен только локальными моделями​


После работы с локальными моделями у меня сформировались следующие мысли, которыми я бы руководствовался, если бы у меня не было выбора и стояла задача использовать только локальную модель:


  • Развернуть модель на отдельном компьютере (например, Mac mini) и поставить его куда-нибудь подальше, где он будет шуметь. Так вам будет комфортнее работать на рабочем компьютере — не будет конфликта ресурсов между моделью, контекстом и вашими программами.


  • Выбирать более свежие модели на MoE-архитектурах. Протестируйте несколько, посмотрите, какая лучше справляется с вашими задачами. Например, недавно вышла Qwen3.6


  • Для простых задач лучше работать в режиме чата — это быстрее и продуктивнее.


  • Если вы всё же решили использовать агентский режим, присмотритесь к более простым агентам, таким как Aider или OpenCode, вместо продвинутых вроде Kilo Code и Claude Code.


  • Если думаете о покупке компьютера именно для LLM, лучше посмотреть расчёты скорости (например, VRAM-калькулятор). А если планируете покупать Mac — ориентироваться на реальные замеры.


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

Результаты работы моделей, исходные коды тестов и полные таблицы с замерами можно посмотреть на GitHub.
 
Назад
Сверху Снизу
Яндекс.Метрика Рейтинг@Mail.ru