- BrainTools - https://www.braintools.ru -
В прошлой статье [1] я писал про GitBor [2], git‑клиент, через который я проверяю, что на самом деле наворотил ИИ‑агент. Эта статья про самого агента. Делал я их параллельно. Один инструмент пишет код, второй показывает, что получилось.
Закрытый контур, энергетика, живая ИБ. Copilot и Cursor нам не светят, потому что код уходит на чужие серверы. Зато внутри есть свой шлюз с Qwen.
Модель хорошая. Свежий Qwen среднего размера, короткие задачи делает отлично. Беда в контексте, у нас это около 100 тысяч токенов. Агент прочитал пять файлов, поправил два, посмотрел вывод тестов, и места уже нет. Модель забывает [3] начало задачи и начинает ходить по кругу.
Популярные агенты рассчитаны на облачные модели с огромным контекстом и тратят его как хотят. Я пересмотрел несколько открытых: Cline, Kilo Code, Continue. От каждого взял понемногу, от кого‑то больше, от кого‑то меньше, и стал переделывать под себя. Так появился Skycode.
Начинал я вообще с форка всего VS Code, как сделан Cursor. Для одного человека это оказалось неподъёмно. Каждое обновление Microsoft приходилось вливать руками, чинить сборку, мучиться с подписью установщика. В итоге переехал в обычное расширение, и для корпоратива это оказалось даже лучше. Почему, расскажу ниже.
Сюда ушла основная работа. Нужно, чтобы за 100 тысяч токенов агент успел и прочитать что нужно, и сделать работу.
Читать по кусочкам. Файл можно читать по строкам, а не целиком. Есть отдельный инструмент read_symbol: он достаёт из файла один метод или класс. Модели обычно нужен как раз метод, а не файл на две тысячи строк. Если модель второй раз читает файл, который не менялся, она получает короткое «файл тот же», без всего текста.
Не повторять [4] модели то, что она уже видела. После правки она получает кусок вокруг изменения, весь файл заново ей не нужен. Длинный вывод терминала режется, остаются начало и конец. Описание окружения отправляется, только если что‑то поменялось.
Сжимать историю. Когда контекст подходит к пределу, сессия сжимается в краткое содержание: что сделано и что осталось. Тут меня ждал сюрприз. В той части, что пришла из Cline, для моделей «не из топа» вместо сжатия молча выкидывалась половина истории. Модель просто забывала, что делала. В свежем Cline сжатие тоже сильно переделали, но я больше старался, чтобы контекст вообще не забивался.
Видеть, куда он ушёл. В интерфейсе есть кольцо, по нему видно, сколько занято и на что: файлы, вывод команд, история. Если половину съел один лог, это сразу заметно.
По пути закрыл несколько вещей, которые к уму модели отношения не имеют, но мешали. Модель иногда повторяла одну фразу сотни раз. Виновата оказалась температура 0, с рекомендованными для Qwen настройками петли почти пропали. Ещё модель любила написать «Начну с чтения файлов.» и закончить ответ, ничего не сделав. Теперь агент в таких случаях подталкивает её продолжить. И если ответ обрывается по лимиту длины прямо посреди записи файла, обрезанный файл больше не сохраняется. Модель получает подсказку разбить работу на части.
Жёстких запретов в промпте я почти не ставил. Слабое место модели проще подстраховать подсказкой в нужный момент.
Этим я сам пользуюсь больше всего. Задачи открываются во вкладках, как файлы в редакторе. В одной агент разбирается в модуле, в другой пишет тесты. Работают параллельно.
Пока агент занят, можно писать дальше, сообщения встанут в очередь. Если срочно, второй Enter прерывает агента и отправляет сообщение сразу.
Короткий контекст тут даже помогает: пару небольших задач в разных вкладках модель тянет лучше, чем одну огромную. Ещё агент умеет рисовать прямо в чате схемы связей и таблицы, которые потом копируются в Word или Excel. С чужим legacy это здорово выручает.
Голосовой набор, где текст появляется пока говоришь, есть много где. Но почти везде звук уходит на сервер, а в закрытом контуре так нельзя.
Сначала у меня стоял Whisper, по‑русски маленькие его версии распознают так себе. Перешёл на GigaAM v3 от Сбера. 17 секунд речи он распознаёт примерно за секунду на обычном процессоре, сразу с запятыми и точками, а текст появляется в поле ввода по ходу речи. Модель скачивается один раз, дальше интернет не нужен.
Показывал Skycode коллегам. Один сказал: прикольно, но я сижу на OpenCode или Claude Code в терминале. Тут я понял, что разработчики с агентами делятся примерно на два лагеря. Одним удобно в консоли, и для них хорошие инструменты уже есть. Я из вторых, люблю визуал и контроль. Хочу видеть правку прямо в файле и откатить её одним кликом, если что. Skycode как раз для таких.
А в закрытом контуре решающей оказалась разница между программой и расширением. GitBor устанавливается как программа, и версию с ИИ мне в контур не пустили, пришлось делать сборку без ИИ. С консольными агентами будет то же самое, это тоже отдельные программы. Skycode же расширение для VS Code. У нас, как и во многих компаниях, VS Code стоит у всех, а расширения ставятся из Marketplace без отдельного согласования. Если где‑то закрыты и они, с ИБ всё равно проще договориться: расширение ходит только во внутренний шлюз, телеметрии нет, код открыт.
Делаюодин, поэтому что‑то я просто не успел проверить.
Проверял в основном на Windows. На macOS и Linux почти не гонял.
Контекст всё равно короткий. Все эти хитрости его растягивают, но большую задачу лучше резать на части и смотреть diff глазами.
Телеметрии нет специально, поэтому о проблемах у пользователей я узнаю только от них самих.
Skycode бесплатный, код открыт. Мне кажется, в корпоративной среде ближайшие годы будут работать на тех моделях, что подняты внутри, а не на топовых облачных. И важно уже не то, какая модель умнее, а то, как инструмент вокруг неё бережёт её контекст.
Если вы тоже сидите за шлюзом с Qwen, GigaChat или локальной моделью, расскажите в комментариях, что ломается у вас. Самые полезные доработки в Skycode появились как раз из таких историй.
Найти можно в VS Code по запросу «Skycode AI».
Страница проекта [5]
Исходники [6]
Автор: l2mega
Источник [7]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/37234
URLs in this post:
[1] прошлой статье: https://habr.com/ru/articles/1048796/
[2] GitBor: https://gitbor.ru/
[3] забывает: http://www.braintools.ru/article/333
[4] повторять: http://www.braintools.ru/article/4012
[5] Страница проекта: https://ruslansinkevich.ru/skycode/
[6] Исходники: https://github.com/RuslanSinkevich/skycode
[7] Источник: https://habr.com/ru/articles/1096732/?utm_source=habrahabr&utm_medium=rss&utm_campaign=1096732
Нажмите здесь для печати.