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

推荐订阅源

V
Visual Studio Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
G
Google Developers Blog
J
Java Code Geeks
爱范儿
爱范儿
Microsoft Azure Blog
Microsoft Azure Blog
美团技术团队
人人都是产品经理
人人都是产品经理
Martin Fowler
Martin Fowler
IT之家
IT之家
博客园_首页
B
Blog RSS Feed
Google DeepMind News
Google DeepMind News
B
Blog
U
Unit 42
Apple Machine Learning Research
Apple Machine Learning Research
L
LangChain Blog
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
N
Netflix TechBlog - Medium
T
Tailwind CSS Blog
博客园 - 聂微东
腾讯CDC
A
About on SuperTechFans

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

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет 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 за минуты Опыт разработчика как экономика внимания
Агент написал код за 12 секунд и чинил его 40 минут: как ...
Виктория · 2026-06-27 · via Все публикации подряд на Хабре

Средний

6 мин

54

Я прочитала десяток разборов «Copilot vs Claude Code vs Cursor vs Windsurf vs Cline» и поймала себя на мысли:

Все обзоры меряют одно — как быстро агент печатает код. Но на моём боевом Java-проекте на тысячи строк самый «быстрый» агент выдал решение за 12 секунд, а потом 40 минут гонял сборку в терминале, пытаясь заставить код компилироваться. Это втрое больше заходов до зелёной сборки, чем у Veai – агента, который читает ошибки компиляции прямо из индекса IDE, без прогона в терминале. Кто быстрее печатает код — тот дольше его чинит, а типовые сравнения этап починки не считают вовсе.

Чтобы проверить это, я взяла одну и ту же задачу «добавь фичу и покрой её тестами» и дала её трём типам агентов: CLI в терминале (Claude Code, Codex, OpenCode), кросс-IDE плагинам (Cursor через ACP, Copilot, Cline, Kilo Code, Windsurf) и агенту, встроенному в JetBrains Platform (Veai). Меряла не секунды на генерацию, а число итераций до зелёной сборки и расход токенов. Ниже — шесть метрик, которые я добавила, и почему они переворачивают выводы типовых обзоров.

TL;DR

  • Привычные критерии (цена, скорость, SWE-bench) меряют генерацию, а не результат.

  • Написать код — первый шаг из пяти. Дальше компиляция, тесты, отладка и рефакторинг — и вот тут агент на терминале, grep и логах сжигает время и токены.

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

  • Главное различие — в архитектуре: агент опирается на текст модели + grep/embeddings + логи терминала (у части CLI — ещё LSP) — или на факты из ядра IDE (PSI, diagnostics, debugger, индексы).

  • На больших легаси-базах разрыв максимален: grep и векторный поиск деградируют по скорости и качеству, индексы IDE работают за константу.

Почему привычные метрики обманывают

SWE-bench и замеры скорости считаются на изолированных задачах. А реальная разработка с агентом выглядит иначе — это цикл из пяти шагов:

Шаг

Что происходит

Кто ускоряет

1. Генерация

агент пишет код

быстрая модель

2. Компиляция

код собирается или нет

?

3. Тесты

прогон, если они есть и не случайные

?

4. Отладка

что-то упало, ищем причину

?

5. Рефакторинг

правки расходятся по проекту

?

Быстрая модель закрывает только шаг 1. На шагах 2–5 агент на терминале буксует: гоняет компилятор в консоли и читает полный лог, вставляет System.out.println, грепает файлы при переименовании. Метрика «секунды на генерацию» про эти шаги не говорит ничего.

Вывод к которому я пришла: скорость генерации ≠ скорость результата.

Где проходит главное различие — в архитектуре

Сравнивать агентов по моделям бессмысленно — Sonnet, GPT-5 и Gemini доступны почти всем (Cursor, Copilot, Windsurf, Kilo Code тянут одни и те же frontier-модели). Разница — в том, на какие факты о проекте опирается агент между вызовами модели.

  • CLI-агенты (Claude Code, Codex, OpenCode) живут в терминале. Контекст — grep/glob, чтение файлов, у части есть LSP-диагностика. Сборку и тесты запускают в консоли.

  • Кросс-IDE плагины с общим бэкендом (Cline, Kilo Code, частично Windsurf) рендерят свой UI в окне JB IDE и работают через те же grep + embeddings. Cursor в JetBrains вообще подключается по ACP и индексирует проект отдельно от IDE.

  • Агент внутри JetBrains Platform (Veai) вызывает то же, что разработчик кликает в IDE: PSI и индексы для поиска, diagnostics компилятора, рефакторинги, debugger, run-конфигурации с SDK проекта.

Дальше — шесть метрик, на которых эта разница в архитектуре превращается в разницу в счёте за токены.

Шесть метрик, которые я добавила

1. Корректность сборки в реальном времени

Claude Code, Codex, Cursor узнают об ошибке компиляции после запуска сборки — и читают полный лог компилятора. Агент внутри IDE видит ошибки и предупреждения прямо при редактировании файла, через ту же подсветку, что и я. Часть простых ошибок (недобавленный импорт) чинится quick-fix'ами IDE — без повторного вызова модели. Большие модели роняют импорты регулярно, так что это экономит токены на ровном месте.

2. Покрытие тестами: случайное против предсказуемого

Любой агент сгенерирует какие-то тесты. Но данные он берёт случайно — гарантий по покрытию нет: прогнал, получил 60%, дальше как повезёт. Альтернатива — символьное исполнение: код превращается в систему уравнений, они решаются относительно входных данных, и покрытие растёт предсказуемо до нужной цифры. Это разница между «накидать тестов» и «довести ветку до 90%». Под капотом — движки символьного исполнения по языкам (та же идея, что в SBST/Test-Comp — академических соревнованиях по генерации тестов).

3. Данные для тестов: придуманные против реальных

Обычно данные я придумываю сама или беру то, что нагенерила модель, — и получаю тесты на синтетике. Другой путь — присоединиться к живому процессу (прогон e2e или ручной тест в UI) через интерфейс debugger'а и собрать юнит-тесты на реальных данных из рантайма. Внешние зависимости при этом мокируются, чтобы тесты не были хрупкими, а потом агент размножает кейсы по краевым случаям, оставаясь в рамках реалистичных данных.

4. Отладка: дебаггер против принтов

Когда баг не объясняется чтением кода, агент на логах угадывает: вставляет println, перезапускает, читает вывод, повторяет — и так по кругу. Я хочу, чтобы агент работал как я: ставил брейкпоинты, запускал код под отладкой, смотрел значения переменных и проверял гипотезы пошагово. Принты в проект при этом не попадают, а расследование не превращается в серию догадок по консоли.

5. Рефакторинг: grep против действий IDE

Переименование через grep — это поиск по файлам и ручная правка с риском пропустить геттер, сеттер, тест или импорт. Так работают Cline, Kilo Code и CLI-агенты: грепнули, прочитали в контекст, поправили текстом. Rename средствами IDE меняет символ вместе со всеми usages, потому что платформа понимает язык, импорты и проектную модель — тот же Shift+F6, что жму я. Меньше токенов и ноль шансов оставить оборванную ссылку.

6. Запуск с SDK и конфигурациями проекта

Агент, гоняющий компиляторы через терминал, спотыкается, когда стоят несколько версий JDK/Python или когда у проекта десятки run-конфигураций с секретами, профилями и JVM-аргументами. Типичный случай: агент не видит .venv в PyCharm-проекте и настраивает окружение заново. Правильное поведение — находить и запускать run-конфигурации проекта так же, как это делаю я, и брать SDK проекта, а не собирать окружение на ходу.

Сводная таблица

Критерий

Агент на терминале, grep и логах

Агент на фактах из IDE

Кто это

Claude Code, Codex, Cursor (ACP), Cline, Kilo Code

Veai (внутри JetBrains Platform)

Ошибки компиляции

после прогона в терминале, читают полный лог

сразу при редактировании, из diagnostics

Простые фиксы

повторный вызов модели

quick-fix IDE без вызова LLM

Покрытие тестами

случайное, без гарантий

предсказуемое (символьное исполнение)

Данные для тестов

придуманные/галлюцинации

реальные из рантайм-процесса

Отладка

println и догадки

брейкпоинты и значения переменных

Диагностика

grep, у части CLI — LSP

PSI + diagnostics ядра IDE

Рефакторинг

grep, риск пропустить usage

Rename со всеми usages через PSI

Запуск и сборка

терминал, проблемы с SDK

SDK и run-конфигурации проекта

Большие легаси-базы

деградация grep и embeddings

индексы за константу

Где разрыв виден сильнее всего

На большом легаси-проекте. grep и векторный поиск там деградируют по скорости и качеству: неделимый код режется по чанкам, поиск промахивается мимо нужного символа. Индексы IDE работают за константу — время поиска не зависит от размера проекта, а первичная индексация даже на 1+ млн строк занимает пару минут, сравнимо с самими JetBrains IDE. Чем больше кодовая база, тем шире разрыв — и тем дороже обходится агент, который каждый раз перечитывает чанки в контекст.

Как я теперь провожу сравнение

  1. Беру ту же задачу, что в типовых обзорах: «добавь фичу и покрой её тестами».

  2. Считаю не секунды генерации, а число итераций до зелёной сборки и суммарный расход токенов.

  3. Проверяю тесты на содержательность: проверяют ли они что-то или просто проходят.

  4. Делаю рефакторинг и проверяю, не осталось ли оборванных ссылок (компиляция + usages).

  5. Повторяю на большом рабочем проекте, а не на маленьком демо-репозитории.

Вывод

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

И главное: проверить агента на маленьком демо-проекте и на большом рабочем enterprise-проекте — это две разные проверки. На демо работают почти все: проект помещается в контекст, зависимостей мало, grep быстрый. На реальном легаси на миллионы строк с десятками модулей, внешними зависимостями и десятками run-конфигураций вылезают именно те проблемы, о которых шла речь выше. Поэтому выбирайте агента на том проекте, на котором вы будете работать каждый день.

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