惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threatpost
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Security Affairs
N
News and Events Feed by Topic
T
Tenable Blog
P
Proofpoint News Feed
W
WeLiveSecurity
Simon Willison's Weblog
Simon Willison's Weblog
Google DeepMind News
Google DeepMind News
C
CERT Recently Published Vulnerability Notes
Help Net Security
Help Net Security
I
Intezer
T
Threat Research - Cisco Blogs
S
Secure Thoughts
C
Cyber Attacks, Cyber Crime and Cyber Security
L
Lohrmann on Cybersecurity
AWS News Blog
AWS News Blog
Google Online Security Blog
Google Online Security Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Know Your Adversary
Know Your Adversary
Project Zero
Project Zero
The Hacker News
The Hacker News
Security Archives - TechRepublic
Security Archives - TechRepublic
T
Tor Project blog
N
News | PayPal Newsroom
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
A
Arctic Wolf
Forbes - Security
Forbes - Security
O
OpenAI News
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Security Latest
Security Latest
P
Palo Alto Networks Blog
S
Schneier on Security
S
Securelist
C
Cybersecurity and Infrastructure Security Agency CISA
H
Heimdal Security Blog
V
Vulnerabilities – Threatpost
www.infosecurity-magazine.com
www.infosecurity-magazine.com
博客园_首页
T
Troy Hunt's Blog
Latest news
Latest news
Recent Announcements
Recent Announcements
MyScale Blog
MyScale Blog
人人都是产品经理
人人都是产品经理
L
LINUX DO - 热门话题
M
MIT News - Artificial intelligence
N
Netflix TechBlog - Medium
V
Visual Studio Blog
H
Hacker News: Front Page

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Коллаборация человека и ИИ в Kotlin‑разработке: скрытые практики эффективных команд
sproshchaev · 2026-04-30 · via Все публикации подряд на Хабре

Уровень сложностиСредний

Время на прочтение7 мин

Охват и читатели1.3K

Туториал

Всем привет, меня зовут Сергей Прощаев. Я Tech Lead и руководитель направления Java / Kotlin разработки в FinTech, а также преподаю на курсах по архитектуре и бэкенд‑разработке в OTUS. В этой статье хочу разрушить один опасный миф: якобы скоро нейросети заменят разработчиков, и нам останется только пить кофе, пока ИИ пишет микросервисы.

Спойлер: это не так.

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

Агенты не пишут код. Они решают задачи

Когда я только начинал экспериментировать со связкой Kotlin + AI‑агенты, я думал, как и многие: «Сейчас объясню бизнес‑требование, и оно само превратится в Pull Request». На деле получил лапшу из классов, нарушающую все принципы SOLID. Потому что ИИ, будь то Copilot, Cursor с агентами или самописные воркеры на базе LangChain4j, отлично решает задачу «в лоб». Но плохо понимает контекст всей системы, если этот контекст ему не дать.

Можно потратить месяц, переписывая один модуль Ktor‑приложения, где ИИ‑агент генерировал эндпоинты без спецификации OpenAPI. Каждый новый метод будет работать, но вместе все это превращается в кашу. Именно тогда я и сформулировал правило: «Кодинг — это доставка. Архитектурный дизайн и контракты — рулевое управление». И рулить должен разработчик (рис. 1).

Рис. 1 Иллюстрация концепции: разработчик как дирижер ИИ-команды

Рис. 1 Иллюстрация концепции: разработчик как дирижер ИИ‑команды

Благодаря этому у меня сформировалось понимание того, что подход Agent‑Oriented Programming имеет место быть, но с жестким контролем. Весь входящий поток бизнес‑требований необходимо сначала «упаковывать» в строгую архитектурную схему, используя проверенные шаблоны. Только после этого даем волю ИИ‑команде.

Подготовка фундамента: не дайте агенту сойти с рельсов

Главная ошибка новичков — дать агенту промпт: «Создай CRUD для пользователей на Ktor с Exposed». Он создаст. Но как потом это поддерживать? Без абстракций, без Clean Architecture, без разделения на слои.

Мой Best Practice теперь выглядит так: шаблон решает всё. Я не стартую проект с пустого main.kt, а использую stage‑driven генерацию (пошаговое создание структуры).

Сначала необходимо вручную или с помощью второго агента‑архитектора создает каркас. Например, для типового микросервиса на Kotlin можно использовать следующий скелет:

  • domain — модели и чистые интерфейсы репозиториев (никаких фреймворков).

  • usecases — бизнес‑логика, которая дергает интерфейсы.

  • adapters — реализации репозиториев (Exposed, Ktor Client), контроллеры.

Я называю это «подготовкой загона». Агентам по разработке я разрешаю писать код только внутри контрактов, определенных интерфейсами. Если бизнес говорит: «Нужна авторизация через госключ», мы не просим ИИ сразу писать код. Мы просим:

  1. Агента‑аналитика: Проанализируй вводные и предложи модель данных и sequence‑диаграмму (Mermaid).

  2. Человека: Утверди диаграммы, добавь нефункциональные требования (NFR).

  3. Агента‑разработчика: Имплементируй строго по утвержденной спецификации в подготовленных файлах.

Работа с ИИ‑командой: декомпозиция под надзором

Перейдем к практике. Допустим, задача — сделать функциональный узел «Управление подписками пользователей» на Kotlin.

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

Я даю агенту промпт: «Распиши Use Case „Оформление подписки“. Учти, что платеж проходит через внешний эквайринг, возможна задержка колбэка до 30 секунд, пользователь должен видеть актуальный статус в реальном времени».

Агент выдает:

  1. Сохранить запись в БД со статусом PENDING.

  2. Сходить в эквайринг.

  3. Обновить статус.

Как человек, смотрю на это и вижу фатальную дыру. А если эквайринг отвечает долго, а пользователь нажал кнопку 5 раз подряд? Идемпотентность! Агент часто игнорирует идемпотентность, если ему не напомнить.

Дальше подключаем второго агента для написания интеграционных тестов. Мы не пишем тесты руками. Мы скармливаем ему спецификацию в формате Gherkin (Given/When/Then), и он генерирует Kotlin‑код с использованием kotest и test containers. Человек на этом этапе следит только за одним: покрыты ли тестами те самые граничные условия, которые нашел архитектор.

Посмотрите на диаграмму последовательности ниже. Это результат работы связки «Человек‑Архитектор + ИИ‑аналитик». Мы специально развели синхронные и асинхронные вызовы, чтобы не связывать основной поток пользователя с внутренней кухней платежей (рис. 2).

Рис. 2 Диаграмма последовательности: идемпотентное оформление подписки с разделением на синхронный ответ и асинхронный callback

Рис. 2 Диаграмма последовательности: идемпотентное оформление подписки с разделением на синхронный ответ и асинхронный callback

Схема показывает, как мы развели синхронную и асинхронную ветки в сценарии оформления подписки. Пользователь получает моментальный ответ 202 Accepted и не ждёт, пока отработает платёж. В этот момент запись уже лежит в базе в статусе PENDING, а событие ушло в очередь. Дальше фоновый агент спокойно общается с эквайрингом (до 30 секунд) и обновляет статус, не нагружая основной пользовательский поток. Ключевой момент — insertOrIgnore с идемпотентным ключом, который предотвращает дублирование подписок при повторных запросах.

Таким образом, схема еще раз иллюстрирует центральную идею: архитектор‑дирижёр определяет, что делается синхронно, а что — асинхронно, какие контракты использовать, а ИИ‑команда исполняет в этих рамках. Без такого разделения мы бы получили хрупкий сервис, склонный к каскадным отказам!

Инженерный контроль: когда ИИ ошибается красиво и незаметно

Правило, которое я вывел: автоматика отлично справляется с happy path. Как только начинаются сетевые проблемы, гонки состояний или обратное давление (backpressure) — нужен инженерный контроль. ИИ сегодня — это мощный, но все еще Junior‑разработчик. А когда Junior пишет сложный многопоточный код в продакшен, за ним нужен Lead.

Чтобы минимизировать риски, можно использовать практику «Авто‑ревью». Один ИИ‑агент генерирует код, второй (с промптом «ты вредный сеньор‑проверяльщик») ищет типовые уязвимости: блокировки на уровне БД, утечки корутин, нарушения контрактов. И роль человека — принимать окончательное решение в спорных ситуациях между ними.

История одного рефакторинга: от хаоса к оркестру

Как‑то в сети мне попалась история, когда команда переводила легаси‑проект с Java на Kotlin и прикрутить умный поиск. Бизнес хотел «как в Google, но внутри ERP». Изначально команда пыталась просто писать промпты в ChatGPT и вставлять код. Закончилось это тем, что сервис поиска падал при любом запросе длиннее трех слов.

Но после применения коллаборативного подхода все взлетело. Был взят шаблон Ports and Adapters (Hexagonal Architecture):

  1. Разработчик спроектировал порт SearchEnginePort с одним методом.

  2. ИИ‑агент сгенерировал три адаптера: простой полнотекстовый поиск, поиск через векторную базу (pgvector) и гибридный с ранжированием.

  3. Архитектор (человек) написал фабрику, переключающую стратегии в зависимости от типа запроса без перезагрузки сервиса.

В итоге это решение стало обрабатывать 500 RPS на довольно скромных контейнерах. Но главное не цифры, а то, как быстро были перебраны гипотезы. Без агентов написание трех параллельных адаптеров заняло бы недели две. С ними команде удалось сделать прототип за 3 дня. Но дирижировал процессом человек. Именно он решил, что pgvector надо использовать не напрямую, а через обертку, чтобы избежать проблем с драйвером PostgreSQL!

Результат: пошаговое создание работающего функционала

Как это выглядит в итоге на проекте?

  1. Инициализация: берем готовый Gradle‑шаблон с Ktor, Exposed, Koin. (1 минута).

  2. Анализ: загружаем требования в NotebookLM или LangChain‑агента, получаем каркас Use Case и диаграмму (Рис. 2).

  3. Контракты: разработчик‑человек пишет 20–30 строк интерфейсов в domain и usecases. Это и есть границы дозволенного для ИИ.

  4. Реализация: агент генерирует DefaultSubscriptionUseCase и SubscriptionController. Код компилируется с первого раза, потому что контракты жестко заданы типами Kotlin.

  5. Проверка: второй агент генерирует property‑based тесты, проверяет на утечки по шаблонам. Человек проверяет критический сценарий с таймаутами.

Заключение: дирижер, а не исполнитель

Возвращаясь к началу статьи: стоит ли бояться ИИ? Нет. Стоит ли учиться с ним работать по‑новому? Однозначно да!

Мир уходит от ремесленного написания тысяч строк однотипного кода. Ценность разработчика смещается в область архитектурных решений, понимания компромиссов и настройки автономных агентов. Это как переход от ручного труда к работе оператора сложного станка с ЧПУ. Вроде бы работу делает станок, но без мастера, который его настроит и проконтролирует, он настрогает брака.

Если вам близок подход «ИИ не вместо разработчика, а как часть инженерной системы», тему можно разобрать глубже на курсе «Проектирование и разработка Kotlin‑бэкенда». Он подойдет тем, кто хочет не просто писать код на Kotlin, а проектировать backend‑сервисы с понятными контрактами, архитектурными границами, тестируемой бизнес‑логикой и устойчивостью к реальным продакшен‑сценариям.

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