Мой опыт практического использования ИИ-алгоритмов для помощи в создании ПО (Qt-Qml-C++) для ОС Аврора на примере локальных нейросетевых gguf-моделей, запускаемых при помощи llama.cpp на CPU
Год назад, в феврале 2025 года, я написал свое мнение по поводу использования нейросетей, а именно больших языковых моделей LLM:
Примером для той статьи было общение с бесплатными вариантами GigaChat и Deepseek. С тех пор прошел год, я периодически обращаюсь по каким-то вопросам (скорее для тестирования) к бесплатной онлайн-gigachat и опробовал за это время несколько локальных llama.cpp моделей, которые запускал на своем железе (ЦП AMD 7500f, ОЗУ 32gb ddr5, без применения видеокарты) в формате gguf:
- deepseek-coder-33b-instruct (модель примерно 2023 года, размер 18.9 Гб, сжатие Q4_K_S)
- granite-4h-small от IBM (размер 19,5 Гб, 3-4 токена/сек, сжатие Q4_K_M)
- nemotronic-3-nano от NVidia (размер 20.7 Гб, 6-7 токенов/сек, сжатие Q3_K_L)
Касательно того поста годичной давности - мнения я своего не поменял, даже несмотря на качественный прогресс в сфере нейросетей. Если спрашиваешь у нейросети что-то, что мне незнакомо - 100 % информацию нужно перепроверять по нескольким источникам, а лучше в первоисточниках - очень часто смесь из корректных и некорректных данных. То есть для такого применения нейросеть (по крайней мере локальную) использовать нежелательно.
Тем не менее, я на сегодняшний день увидел для себя следующие практические применения локальных llm-нейросетей, которые у меня хоть и в экспериментальном режиме, но уже работают и приносят какой-то практический результат:
1) работа нейросети по шаблону: у меня есть готовый шаблонный допустим qml-код, который при определенных условиях делает то-то. Ставится задача нейросети переписать этот код для похожей задачи, но с другими входными данными.
Пример:
Промт (запрос) для нейросети на примере приложения MyBusiness (Управление.бизнесом):
"Вот приложенный qml-код для sqlite-базы NORMDOC (ID Integer Primary Key Autoincrement NOT NULL, NAME Varchar(255), OPISANIE Varchar(1000), PRIMECHANIE Varchar(1000),FILENAME Varchar(1000));\").
Напиши аналогичный код по шаблону для AUTO (ID Integer Primary Key Autoincrement NOT NULL, MARKA Varchar(255), GOSNOMER Varchar(255), COLOR Varchar(255), TEHOSMOTRNOMER Varchar(255), TEHOSMOTRDATA_D Integer, TEHOSMOTRDATA_M Integer, TEHOSMOTRDATA_Y Integer, TEHOSMOTRSLEDDATA_D Integer, TEHOSMOTRSLEDDATA_M Integer, TEHOSMOTRSLEDDATA_Y Integer, OSAGODATA_D Integer, OSAGODATA_M Integer, OSAGODATA_Y Integer, OSAGONOMER Varchar(255), OSAGOCOMPANY Varchar(255), OSAGODATAEND_D Integer, OSAGODATAEND_M Integer, OSAGODATAEND_Y Integer, OSAGOPREVDATA_D Integer, OSAGOPREVDATA_M Integer, OSAGOPREVDATA_Y Integer, OSAGOPREVNOMER Varchar(255), OSAGOPREVCOMPANY Varchar(255), OSAGOPREVDATAEND_D Integer, OSAGOPREVDATAEND_M Integer, OSAGOPREVDATAEND_Y Integer, KASKODATA_D Integer, KASKODATA_M Integer, KASKODATA_Y Integer, KASKONOMER Integer, KASKOCOMPANY Varchar(255), KASKODATAEND_D Integer, KASKODATAEND_M Integer, KASKODATAEND_Y Integer, KASKOPREVDATA_D Integer, KASKOPREVDATA_M Integer, KASKOPREVDATA_Y Integer, KASKOPREVNOMER Varchar(255), KASKOPREVCOMPANY Varchar(255), KASKOPREVDATAEND_D Integer, KASKOPREVDATAEND_M Integer, KASKOPREVDATAEND_Y Integer, AUTOpokupkaDATA_D Integer, AUTOpokupkaDATA_M Integer, AUTOpokupkaDATA_Y Integer, AUTOdocument Varchar(255), AUTOdocumentDATA_D Integer, AUTOdocumentDATA_M Integer, AUTOdocumentDATA_Y Integer, AUTOzeroPROBEG Integer, AUTOPTS Varchar(255), AUTOSTS Varchar(255), AUTOVLADELEC Varchar(255), AUTOVIN Varchar(255), AUTOENGINE Varchar(255), VODITEL1_IDD Varchar(255), VODITEL2_IDD Varchar(255), PRIMECHANIE Varchar(10000));\"). Не объединяй поля, на каждое поле свой виджет. Используй только те QML элементы, которые есть в шаблоне, не используй никаких других. "
И к промту прикладывается qml-файл, содержащий рабочий пример qml-кода для ОС Аврора с использованием библиотеки Silica. Кстати, Silic'у для Sailfish популярные нейросети знают плохо, а под Аврору вообще не знают:
qml
Edit_NORMDOC.qml3.45 Kb
Ответ, полученный при помощи нейросети NVIDIA-Nemotron-3-Nano-30B-A3B-Q3_K_L.gguf (в файле включены промт, размышление и ответ нейросети):
txt
Ответ Nemotron-3-Nano (3 попытка).txt56.48 Kb
Неплохой результат, требующий небольших правок. Размышления нейросети так же бывают достаточно полезны для обратной связи - для корректировки промта и уточнения деталей в запросе.
Время формирования ответа нейросети в llama.cpp без использования видеокарты (только cpu) - 27 минут 13 секунд, 7.73 токен/с, 12.631 токенов всего.
Не супербыстро, но пока гуляешь с ребенком или ужинаешь - нейронка справится с задачей на таком железе.
Результат работы нейросети: легко проверить правильность, оценить, поправить, если шаблон делал сам или полностью понимаешь, как он устроен
2) Преобразование формы данных, выделение данных:
Например, есть данные в csv, а нужно их преобразовать в json или подготовить код, чтобы загнать в массив или map, а парсер писать лень/нет времени/нет желания (частный случай работы по шаблону)
Результат работы нейросети: легко проверить правильность, оценить, поправить
3) машинный перевод текста с другого иностранного языка, который я знаю (например, с немецкого или английского на русский) - пробовал, неплохо как черновой вариант перевода какого-нибудь мануала, но править в итоге все равно нужно
Результат работы нейросети: легко проверить правильность, оценить, поправить
4) перевод между языками программирования, но тут не все гладко - зачастую код от llm идет с ошибками, опять же нужно разбираться в этих языках программирования. Часто такая история: даешь llm список ошибок, которые по ее коду выдает компилятор С++, она вроде как их правит и пишет что-то в стиле "ну все, этот код точно без ошибок и соберется", а на самом деле ошибок становится ещё больше и компилятор ругается все сильнее.
5) вопрос по алгоритмам или методу решения той или иной задачи (instruct-нейросеть) - порой нейросеть подсказывает неплохое решение, но случается это далеко не всегда (где-то в половине случае, во второй половине случаев это бред или заведомо тупиковое/нерабочее решение)
Вывод: нейросеть может стать помощником в рутине и ускорить какие-то процессы (но надо понимать - какие и каким образом), но человека она на данном этапе полностью не заменит.
Также, на мой взляд, нейросеть не является какой-то панацеей и средством от всего, и если брать точность подачи информации и строгость вывода, то классические sql-базы данных и структуры данных, где ответ не является результатом работы алгоритмов нечеткой логики, будут все также востребованы, как и раньше, причем с кратно меньшим требованием по железу.
P.S. Если вы только знакомитесь (как и я) с нейросетями и с их локальным запуском - вот пару ссылок, по которым можно получить практическую информацию по llama.cpp и его сборке:
P.S.S. С самого начала я пользовался LM Studio, сейчас же перешел на llama.cpp через браузер, а через LM Studio ищу и скачиваю модели
Сейчас пошла мода на ИИ-агентов, но агентов для создания ПО я разворачивать пока не планирую - для такого нужна отдельная чистая машина в связи с вполне определенными рисками.
P.S.S.S. Промты для программирования, хорошая статья: