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

Небольшая ремарка по использованию ChatGPT и аналогов.
На мой взгляд самая большая проблема с ними возникает не тогда, когда они генерируют ерунду - это сразу видно.
Ну например, отсутствующие классы или методы. Такой код или сразу отбрасывается, или благодаря подсказкам IDE дописывается.

Плохо, когда генерируемый код похож на правильный. Даже очень похож. Тогда ты принимаешь рекомендацию, мысленно помечаешь задачу как выполненную и пытаешься идти дальше. А приложение падает в неожиданном месте. Пример из моей практики - сгенерированная командная строка. Выглядит как настоящая, отличается одним отсутствующим пробелом. Такие же проблемы возможны с RegExp.
Да, часто проблема решается тестами. Но есть тривиальный код, который с одной стороны не хочется писать самому, т.к. он тривиальный, а с другой стороны он часто покрывается не модульными, а интеграционными тестами. А condition coverage у интеграционных тестов по понятным причинам хуже, чем у модульных.

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

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

Что ж, появилась первая книжка про ChatGPT для разработчиков на русском.
https://www.piter.com/collection/all/product/razrabotka-prilozheniy-na-baze-gpt-4-i-chatgpt
С почином!
Книжка небольшая, 180 страниц, про основы LLM и работу с API ChatGPT.
Я купил, буду изучать.

P.S. Python конечно же)

P.P.S. На Хабре издательство Питер выкладывает статью про каждую книгу с промокодом. https://habr.com/ru/companies/piter/articles/807039/

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

Как LLM модели могут помочь разработчику? Накидаю варианты, которые видел и\или пробовал.

1) Самое очевидное - генерация больших кусков типового кода. Например, реализация алгоритма быстрой сортировки на языке Kotlin. Это пример вымышленный - не надо так делать на самом деле, наверняка уже есть подходящая библиотека. Еще пример - код инициализации RestTemplate без реактивщины с настройкой mTLS, таймаутов и обработкой ошибок. Существующие модели уже неплохо справляются с этим, но я вижу направление для развития - в больших компаниях со своими фреймворками\платформами доработка модели с использование DAG - локальной векторной БД с данными по используемому в компании ПО.

2) анализ существующего кода - что делает этот метод, этот класс, модуль, сервис. У большинства моделей пока здесь проблемы из-за ограничения по размеру подаваемого контекста, но ChatGPT-4o похоже эту проблему решает. Что не убирает требования к хорошей читаемости кода, конечно же))))

3) AutoCompetion кода в IDE. На этой поляне работают GitHub Copylot, IntelliJ и Sber GigaCode. Работают скажем так с переменным успехом. Здесь два рода проблем. Во-первых, контекст должен собираться автоматически плагином для IDE, а это нелегко - понять чего хочет разработчик. Да, есть имя класса, метода, переменных, уже написанный код, открытые в IDE файлы, печатаемый в данный момент код - но важно все эти ингредиенты правильно приготовить) Но даже если их приготовить - часть знаний все равно останется в голове разработчика. О второй проблеме уже писал - т.к. в данном кейсе код содержит больше генерируемого на лету, чем вытащенного из глубин модели, то велика вероятность мелких ошибок синтаксиса, см. https://t.me/javaKotlinDevOps/279 Задача сложная, но перспективная, т.к. набор встроенных AutoCompletion ограничен "фантазией" и размерами команды разработки IDE и, а главное - слабо учитывает контекст

4) генерация тестов - тоже уже есть, тоже с переменным успехом, но кажется, что эта задача проще, т.к. контекст - метод для тестирования - четко задан. Область расширения - генерация интеграционных или приемочных тестов с указанным фреймворком.

5) генерация комментариев для commit и Pull Request - уже писал про это https://t.me/javaKotlinDevOps/252

6) краткий пересказ статей и книг - много пробовал, пока слабовато, т.к. контекст - что мне интересно в тексте - сложно извлечь из головы. Но опять же есть надежда на ChatGPT-4o и его последователей. И рекомендую по возможности не просто пользоваться кнопкой "пересказать", а задавать контекст явно. Перспективно, т.к. объем информации, необходимый для изучения разработчиком чтобы "быть в тренде" - очень высок. Но важное замечание - важные вещи я бы читал сам, чтобы не упустить детали.

7) автоматический анализ ошибок. В частности стектрейсов, но не ограничиваясь ими. Почему важно - по моим наблюдениям гораздо больше времени тратится на отладку ошибок, чем на собственно разработку. Кажется, что по stackoverflow модели уже неплохо работают, но как и с генерацией кода важно дообучение на ошибках, специфичных для конкретной компании. Еще одна область для развития - автоматический анализ логов, автоматическое создание инцидентов, выстраивание их в иерархию, автоматическое создание багов в трекере. И ещё одна - встраивание инструмента в IDE, переход на стройку с ошибкой из stack trace (уже есть в IDEA) и предложения по исправлению

Что я забыл в плане разработки?

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

Ну что, началось)
https://www.piter.com/collection/all/product/programmirovanie-na-python-s-pomoschyu-github-copilot-i-chatgpt
Ок, ещё одна книжка про ChatGPT. Смотрим аннотацию: «Используя GitHub Copilot, можно простым языком описать, что должна делать программа, а искусственный интеллект тут же сгенерирует ее.
Узнайте, как создавать и улучшать программы на Python с помощью ИИ, даже если прежде вы не написали ни строчки компьютерного кода.». И ещё: « Глава 4 — первая из двух глав, в которых вы научитесь читать код на языке Python. Действительно, Copilot будет писать код за вас, но вам нужно уметь читать его, чтобы определить, будет ли он делать то, что вы хотите. И не волнуйтесь: Copilot поможет вам читать код!»
И это не ролик, не статья, целая книга...
Войти в IT, если с первого раза не получилось) Интересно, на собесах Copylot уже используют?)
Меня только один вопрос мучает: если человек не захотел или не смог освоить язык программирования (фреймворк) - как хорошо он сможет спроектировать сервис или алгоритм?

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

Немного мыслей по 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 и Java.

Для начала про LLM. Чтобы LLM дала осмысленный ответ - ей нужен правильный промт и побольше контекста. Не даром в новых версиях моделей объем контекста растет - возьмем тот же Gemini с 1 млн токенов.
Но с точки зрения разработки - важен не только объем, но автоматизация работы с контекстом, т.е. некая бизнес-логики. Например, если мы делаем свой агент и у нас несколько источников точных данных, которые мы хотим скормить модели. И эта бизнес-логика скорее всего будет похожая у разных агентов...
LLM - область достаточно молодая, стандарты в ней зарождаются прямо сейчас. Встречайте MCP https://spec.modelcontextprotocol.io/specification/ - сайт стандарта - и https://habr.com/ru/articles/862312/ - интро на русском.
Он стандартизирует в первую очередь транспортное API - клиент и сервер - для работы с источниками точных данных и LLM. Содержит ряд готовых серверов для работы с файловыми данными, СУБД, веб-поиском.

Как это все относится к Java? А вот как: есть Spring AI, уже писал про него https://t.me/javaKotlinDevOps/241 Он дает универсальное API для обращения к различным LLM. Сейчас туда добавили - в статусе experimental - Spring AI MCP https://docs.spring.io/spring-ai/reference/api/model-context-protocol.html
Причем добавили достаточно быстро, хотя до Python конечно же далеко. Вообще поддержка Python, я полагаю, появилась вместе со стандрартом)

P.S. Да, вспоминая Kotlin в названии канала - если посмотреть примеры Spring AI - получите, распишитесь: https://github.com/spring-projects/spring-ai-examples/blob/main/kotlin/

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

Ну что, AI уже заменил джунов
https://habr.com/ru/news/876162/
?
А если серьёзно - это третий шаг в эволюции LLM:
1) запрос-ответ по данным модели
2) обогащение ответа модели актуальным результатами поиска (AI search, например, Perplexity или SearchGPT) или результатами из локальной базы знаний (RAG)
3) AI agent - не просто отдаёт отчёт, но и делает что-то полезное, но рутинное. В IDE, локальной сети или в интернете. По запросу или в фоновом режиме.

Что ж, движение в верном направлении.
Вот пример агента не из мира разработки https://t.me/disruptors_official/2177
Главное, чтобы качество Junie было на уровне, на данный момент AI - не самая сильная сторона JetBrains.

P.S. GigaCode, к слову, идёт туда же. Один из лидеров - Cursor AI. Позволяет восьмилетним детям писать код))) https://vc.ru/services/1456812-vosmiletnie-deti-teper-mogut-sozdavat-prilozheniya-s-pomoshyu-iskusstvennogo-intellekta-obzor-ii-instrumenta-dlya-programmirovaniya-cursor

P.P.S. Вопрос. Если заменить всех джунов - откуда возьмутся миддлы и сеньоры?)

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

В последнее время все чаще вижу, как 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 - в части возможностей и точности ответов - возникает вопрос: что будет с профессией программиста в частности и ИТ-шника в общем?
Пару мыслей по этому поводу.

1) ИТ-шники никуда не денутся - исследовательские задачи по созданию чего-то нового AI не отдашь по определению, аналитику\промты нужно писать, результат - контролировать, AI агенты - кому-то создавать, pipeline - настраивать. Число задач по автоматизации, их сложность растут и похоже будут расти дальше.

Что изменится?

2) Для начала - должна вырасти производительность. Пример: объяснить почему при наличии AI простая формочка делается несколько дней будет сложно. Хочешь - не хочешь, фичей придется выдавать больше. Можно привести аналогию со станками и конвейером - и то, и другое позволило в разы увеличить объем производства. А если брать более близкий нам пример - появление персонального компьютера, на который не надо записываться в очередь и скармливать ему перфокарты - также сильно увеличило производительность программиста. Получаем реально существующий NZT - ускоритель для мозга или bycicle of mind - за напоминание спасибо @AViIgnatov!

3) Со многими вещами из первого пункта можно поспорить - точно ли нельзя человека заменить машиной? Но вот с чем спорить сложно - машина не может нести ответственность. А во многих отраслях - авиация, космос, транспорт в целом, мирный атом, медицина, финансы - отвечать за ошибку кто-то должен. Авторы LLM модели, очевидно, это делать не будут. Иначе условный Сэм Альтман будет не вылезать из судов. Менеджер, внедривший модель тоже - а как он сможет проконтролировать код, созданный моделью? Да, наверняка есть кейсы, когда можно доверить машине и генерацию, и оценку качества кода, а в случае ошибки - просто дообучить модель и перегенерировать код, а клиентам вернуть деньги. Но это, кажется, небольшая часть существующих ИТ систем. Итого - человек нужен, но ответственность его также возрастет. Похожая проблема, кстати, сейчас с автопилотом - там нет LLM (я надеюсь), но вопрос ответственности при аварии при включенном автопилоте пока не решен.

4) интересный вопрос насчет T-Shape vs узкий специалист. С одной стороны узкого специалиста сложнее заменить, особенно, если его фреймворк не очень распространен. С другой стороны рутина отдается на откуп LLM, поэтому от менеджеров будет ожидание горизонтального роста на смежные специализации. Что можно сказать точно - разработчик узкого профиля, умеющий в аналитику, тесты и не боящийся ПРОМа - точно незаменим)

5) Самый интересный момент - что будет с джунами? Т.к. теперь джун должен уметь не только писать промты, но и проверять качество кода. Это либо повышенные требования к ВУЗу\курсам, или растянутая по времени стажировка, во время которой джун должен "обогнать" LLM. Хорошая новость: если вы - джун время прокачаться до сеньора еще есть)

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

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

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

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

#llm #ai #it