(java || kotlin) && devOps
369 subscribers
6 photos
1 video
6 files
307 links
Полезное про Java и Kotlin - фреймворки, паттерны, тесты, тонкости JVM. Немного архитектуры. И DevOps, куда без него
Download Telegram
Всем привет!

Немного мыслей по AI моделям.

Вышло довольно много open source моделей - LLama от запрещенной Meta, Mistral, DeepSeek, Grok 1 от Twitter. Еще есть Gemma от Google - легкая, возможно не самая новая модель, специализированные модели от OpenAI. Это хорошо, так как дает возможность подключения к разработке моделей команд, не имеющих большого числа денег на GPU. Дообучение моделей (fine tuning) дешевле первичного обучения. Запуск уже обученной модели - тоже дешевле. Плюс open source - это гарантия, что к AI будет доступ даже если сервисы, описанные мной ранее по тем или иным причинам закроются. И Мета конечно выделяется среди остальных тем, что отдала в open source последнюю тяжелую (большое число параметров) версию модели.

Второй момент: в тестах и в новостях сравниваются 2 группы моделей - общего назначения и специализированные. Общего назначения - ChatGPT, Claude, Gemini, Llama, Grok, DeepSeek, Mistral, YandexGPT, GigaChat. Специализированные, на примере разработки - DeepSeek-Coder-V2, Codestral, CodeLlama, Phind, GigaCode. Можно сделать вывод, что модели последнего поколения достаточно мощные, чтобы хорошо справляться со специализированными задачами, типа написания кода. Но любую модель всегда можно подтюнить, и тогда она или превзойдет модель общего назначения или будет сравнима с ней даже имея меньший размер (требуя меньше железа).

Еще тренд - разделение моделей на легкие и тяжелые. Например, LLama 8b, 70b и 405b, это число параметров в billions. Т.е. есть понимание, что большие модели - это дорого в облуживании, при этом во многих случаях применяются для "стрельбы из пушки по воробьям". Некоторые модели позиционируются как доступные для запуска локально. Локально с правильной видеокартой или AI чипом https://ru.msi.com/Landing/AI-Laptop/nb конечно)

#ml #ai #llm
Всем привет!

Наткнулся сегодня на еще одну книжку про AI. Что опять?)
Для начала у нее интересное название - "Охота на электроовец" https://markoff.science/#book
Но есть еще две причины, по которым я решил про нее написать.
1) книжка научно-популярная - история развития AI и обзор текущего состояния. До сих пор не встречал таких. При этом написана программистом (бывшим программистом судя по текущей должности). Кажется, для вкатывания в тему, если есть пробелы\проблемы в математическом образовании - неплохой вариант.
2) автор - Сергей Марков - из России, что встречается не часто. Более того - автор живет в России на данный момент. Т.е. его можно в теории встретить на какой-либо конференции и позадавать вопросы. Ну и проблем перевода точно не будет)

Скачать можно бесплатно, бумажную версию скоро выпустят тут https://dmkpress.com/catalog/computer/data/978-5-93700-333-1/
Я лично планирую прочитать.
Да, о минусах - иллюстрация на обложке для электронной версии .. ну такое. Ну и 2 тома, 1200 страниц - не всякую дорогу осилит идущий)

P.S. Угадайте, в какой компании работает автор?)

#ai #books
Всем привет!

Не так давно ChatGPT начала тестировать "умный поиск" - назвав его SearchGPT. В отличие от AI чата умный поиск ищет по существующим в интернете источникам, после чего делает выжимку из источника, оставляя ссылку на него. Что-то знакомое... Да, именно так работает Perplexity, см. https://t.me/javaKotlinDevOps/331. При этом исходный запрос может быть на естественном языке, и есть этап преобразования запроса в вид, оптимальный для поиска. И еще важно - учитывается контекст разговора, т.е. предыдущие запросы. Итого получаем смесь чата и поиска. Главное отличие от чатов - некая гарантия, что ответ не был синтезирован. Как этого удается добиться - очень интересный вопрос, ответа на него не знаю)

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

Чем ответят на это поисковики?
У Google и Bing пока не вижу ничего подобного. Я не про возможность добавить ссылки для ответа чат-бота, а про интеграцию в поиск и некие гарантии точности ответа. Хотя возможности у них есть - Gemini и Copylot соответственно.
А вот Yandex совместил поиск с чатом, и это можно увидеть выбрав тип поиска Нейро. Подробнее как это работает - см. https://vk.com/video-17796776_456241214 Это не бета, не ограниченный доступ.
Круто, что могу сказать!

P.S. Perplexity похоже задал тренд.

P.P.S. Как все-таки они гарантируют отсутствие галюцинаций???

#ai #search
Всем привет!

Уже писал про импортозамещение в ПО:

1) IDE https://t.me/javaKotlinDevOps/353
2) Spring plugins https://t.me/javaKotlinDevOps/358

Две ремарки - термин импортозамещение сильно скомпрометировали, но другой более удачный я пока не придумал) И некоторые из описываемых продуктов разрабатывались не для импортозамещения, но события последних лет дали неплохой импульс для их развития.

Так вот, на Highload-е нашёл 2 аналога GitLab/GitHub:

1) GitVerse от Сбера. Как и GigaIDE находится в процессе разработки, в частности аналог Git Actions планируют допилить в ближайших релизах, сейчас для настройки требуется много ручных действий. Две основные фишки: интеграция с GigaCode и облачная IDE на основе VS Code, доступная в рамках бета-тестирования. Для облачной IDE нужен аккаунт и настройка в облаке Сбера - cloud.ru. И к сожалению не поддерживается Java - зато есть Python, Go, С#. Интерфейс аскетичный, но подсветка синтаксиса, AutoComplete, работа с тестами, отладка и консоль есть. Пока все бесплатно, конечно временно) Еще фишка - доступно AI ревью кода https://gitverse.ru/docs/collaborative-work/code-review/#ai-ревью И в целом ревью неплохое - я скормил ему кусок кода "с запахами", и AI нашел там 6 багов из 18. Минус: все работает медленно - думаю сказывается бесплатность и статус беты.

2) GitFlic от Астра (которая Linux). В нём есть Ci/CD, реестр артефактов, статический анализ кода (названный почему-то SAST), REST API и интеграция с Telegram и JIRA. И платная версия, позволяющая добавлять более 5 человек в private репозиторий плюс расширенную поддержку https://gitflic.ru/price Пока нет полноценно баг-трекера, обещают сделать. Еще плюс - тут я быстро нашел как разрешить force push, в отличие от GitVerse)

GitFlic на данный момент выглядит законченным продуктом, но у GitVerse есть свои плюсы - см. выше. Плюс тесная интеграция с облачным провайдером cloud.ru

#импортозамещение #git
Всем привет!

В последнее время все чаще вижу, как LLM в IDE используют для генерации каркаса приложения. Казалось бы - это же задача генератора, а не LLM. Какого-нибудь Spring Initializr (https://start.spring.io/) Почему он этого не делает, а ограничивается по сути только pom-ников или *.gradle?

Потому что это отдельный сервис, требующий поддержки. Который со временем - по мере развития библиотеки, фреймворка или платформы, для которой он предназначен - будет обрастать все более сложной логикой. Обновился фреймворк - нужно обновлять генератор. Появился смежный компонент - будут запросы на добавление интеграции с ним. И при этом генератор все равно будет ограничен в возможностях. Возьмем тот же Amplicode - контроллеры, обработчики ошибок и тесты для Spring приложения он генерировать умеет, что-то еще - нет. Со временем возможностей для генерации будет больше, но 100% кейсов не будет покрыто.

А LLM в теории может сгенерировать что угодно, главное "скормить" ей побольше типового кода. Ключевое слово здесь - типового. Т.е. какую-то сложную логику тоже можно сгенерировать в LLM, но если размер диалога будет в 10 раз больше сгенерированного кода, а время - сравнимо, есть ли в этом смысл? Да, модель нужно будет периодически "подкармливать", но видится, что эту процедуру можно автоматизировать взяв за исходные данные открытый код из того же github.

Есть еще нюанс. LLM - это аналог MP3 128 kBit Joint Stereo ))) Сжатие с потерями. Это если что моя оценка вида "пальцем в небо", очень может быть степень сжатия больше. Распаковка - генерация кода - тоже приведет к потерям. Как проверить, что потерь нет - компиляция, тесты, а главное - предварительная оценка того, насколько типовой код нужен. В итоге для простых задач мы получаем универсальный генератор. И это круто!

P.S. Может показаться, что я наехал на Spring Initializr. Нет, штука полезная. Фактически Spring задали стандарт на рынке - все конкуренты Spring сделали свои инициализаторы: https://code.quarkus.io/ и https://start.microprofile.io/ И в Enterprise я видел попытки сделать свои инициализаторы разной степени успешности.

#llm #ai #code_generation
Всем привет!

Вот только написал, что исследовательские задачи — точно не место для AI, как на тебе https://t.me/andre_dataist/172 )))

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

P.S. Ещё интересны 4 и 5 уровень развития моделей из поста выше.

#llm #ai #it
Всем привет!

Я долго держался, но не написать о Deepseek всё же не смог)

Что хотелось бы отметить:
1) Модели уже больше года, а в январе стали известны (распиарены) результаты её последней версии

2) Начиналось всё с модели для разработчиков, называется Coder, потом был Coder v2

3) Тренд на универсализацию моделей продолжается, сейчас Coder недоступен на официальном сайте, только основная модель

4) В окне ввода промпта можно включить объяснение логики получения ответа — и это новый тренд. По сути это данные аудита. В применении к AI-агенту — данные будут храниться определённое время для разбора полётов

5) И последняя фича DeepSeek — возможность AI-поиска, уже не тренд, а скорее становится базовым требованием

6) Разработчики Deepseek связаны с алгоритмическим трейдингом. С одной стороны, это деньги на разработку модели и железо, с другой — источник знаний для оптимизации модели. В алгоритмическом трейдинге решают миллисекунды

7) Ну и наконец — «я же говорил».
Пост про сравнение AI-моделей: https://t.me/javaKotlinDevOps/331. Единственный момент — тогда мне больше понравилась Perplexity. Надо будет сравнить ещё раз)

8) В Perplexity уже встроили модель Deepseek как один из вариантов

9) Deepseek можно развернуть локально, см. инструкцию https://habr.com/ru/articles/878276/. Т. е., в open source выложили всю модель. Удивляют системные требования

10) Ходят слухи, что Deepseek будут внедрять и в одной крупной российской ИТ-компании.

#llm #ai
Всем привет!

AI быстро развивается, интегрируется с традиционным ПО и было бы странно, если бы и для AI не появились ... свои паттерны)
Встречаем, от одного из лучших специалистов по паттернам: https://martinfowler.com/articles/gen-ai-patterns/

Маленький комментарий: да, AI паттерны могут показаться элементарными, но свою роль они выполняют - это некий язык, кубики, из которых строится архитектура приложения/корпоративная архитектура.
Еще хорошо написано про такую важную штуку как оценка (eval). Ведь модели не идемпотентны - могут менять свой ответ на одних и тех же входных данных. А значит традиционные практики тестирования не подходят. Модель тестирующая сама себя - прямой путь к скайнету) А вот если взять другую модель, а для страховки отдать результат на проверку человеком...

#llm #ai #testing #patterns
Всем привет!

Не отпускает меня тема AI)
Напомню, что с одной стороны AI ~= Python, но с другой стороны Java потихоньку подтягивается, о чем я уже писал на канале, см. по тегам.

Вот отличный пример генерации данных с помощью AI с запоминанием контекста на Spring AI https://piotrminkowski.com/2025/01/28/getting-started-with-spring-ai-and-chat-model/
Обратите внимание на "магию" Spring - в части преобразования ответа модели в коллекцию.
А вот тут https://piotrminkowski.com/2025/01/30/getting-started-with-spring-ai-function-calling/
на "магию" привязки функций, забирающих данные из API брокера и с сервиса-поставщика биржевой информации к вызову модели.
Красиво, черт возьми!)

P.S. Интересно, учитывая недетерминистическое поведение модели - всегда ли эта магия работает. Буду проверять)

#ai #java #spring
Всем привет!

Протестировал последнюю версию GigaCode, доступную наружу, небольшой итог.

Что понравилось:
1) неплохо генерирует тесты, подбирает разные входные данные для попадания в разные ветки алгоритма. Не уверен, что полнота покрытия 100%, но неплохо
2) генерирует каркас для Spring приложения - контроллер, сервис, адаптер. Да, AI генерация рулит.
3) можно использовать для подключения новых библиотек по имени класса. Единственный минус - подставляет не последние версии
4) может заменить все println на вызов логгера в файле
5) GigaCode научился работать с контекстом всего проекта, а не только открытых файлов. По факту: на больших проектах не тестировал, но на малых все равно делает ошибки - в autocomplete предлагает несуществующий метод. Похоже имя метода генерируется как производная от названия переменной, в которую сохраняется результат вызова) К слову, встроенный в IDEA бесплатный AI делает ровно те же ошибки. Нужен ретест, но в любом случае это движение в правильном направлении.
6) находит ошибки при вызове /improve. Не все, на моем тестовом файле с порядка 50 ошибками нашел 4. Уже что-то. Предложил использовать try-with-resources, конкатенацию строк заменить на StringBuilder, также нашел проглатывание ошибки без логирования и некорректное удаление в цикле. Также умеет удалять дублирующиеся методы. Но не умеет выносить повторяющийся код в отдельный метод.
7) вызов /review - тут уже интереснее. Я вызывал его до /improve и после. На первом ревью модель нашла отличающийся по сравнению с improve набор проблем. Понятно, для некоторых из них простого фикса нет, но например найденный на ревью возврат null можно было бы пофиксить на improve. Еще интереснее прошло ревью после применения улучшений. Модель поставила под сомнение использование try-with-resources и StringBuilder сказав, что "в данном случае это не имеет большого значения, так как количество строк в файле, вероятно, не очень велико". Как она поняла, что данных мало - непонятно) Вообще говоря, замечание справедливо, в разработке очень редко можно дать однозначный ответ без уточнения деталей. Но как будто бы пропущен вопрос - с каким объемом данных мы работаем? Аналогично, про правку при удалении в цикле - уменьшение счетчика, сказала, что он затрудняет читаемость и может привести к ошибкам. Т.е. 3 из 4 собственных правок под вопросом) Еще модель выдала неверное замечание про то, что try-catch приводит к созданию объекта исключения, хотя по факту он возникает в библиотечном коде, который вызывается внутри try-catch

И три недостатка:
1) команда /doc Да, она хорошо генерирует JavaDoc по названию и содержанию метода. И да, есть такое правило в SonarQube. Но я считаю, что правило обязательных JavaDoc надо отключать, методы, переменные и классы называть осмысленно, и только в отдельных сложных случаях добавлять JavaDoc. Видимо сделано для ленивых программистов)
2) кэширование. Тестируя /review и /improve на изменяющемся файле постоянно сталкиваюсь с тем, что ошибка уже поправлена, а модель все еще ругается на нее. Да, для review помогает ctrl+enter, непонятно зачем на обновление контекста нужно отдельное сочетание клавиш. А improve по-прежнему пытается исправить уже исправленные ошибки)
3) для improve напрашивается кнопка "заменить", т.к. сейчас приходится выделять все и жать на insert

Вывод - в целом использовать можно.

#llm #ai #gigacode