Comments 21
Хороший туториал, но метод Find-and-Replace (через old_str и new_str) — это не всегда однозначное решение для продакшена. Любая галлюцинация модели в один символ — и замена не сработает. Инструменты вроде Claude Code или Cursor занимаются именно тем, чтобы приземлить правки модели на реальный файл без ошибок в форматировании. Без перехода на diff-форматы такой агент быстро превратится в генератор синтаксических ошибок.
Доверие теряется, тк в первом же абзаце реализации: «берем openai», а по факту создается антропик инстанс
Хорошо. Статья именно то, что снимает ореол «агенты = особая магия». По факту это чат, где модели дали три руки: list_files, read_file, edit_file. Всё остальное — UX и страховочные барьеры. То есть Claude Code — это не “супер-LLM”, это “LLM + ремни безопасности + каска + регламент”. Самое полезное здесь даже не код, а ментальная модель: LLM не трогает вашу ФС, она только просит, а вы решаете, выполнять ли. В корпоративном/закрытом контуре это вообще золото (факт фактический) : можно дать агенту ровно тот набор инструментов, который не превратит его в junior с root’ом.
Немного «а вот тут начинается взрослая жизнь»:
edit_file“по подстроке” — это как деплой «по ощущениям»: пока работает — красиво, как сломается — будете искать, какой именно символ агент “улучшил”. На практике лучше учить агента предлагать unified diff и применять его через patch, плюс проверять, что diff применился чисто.
Очень не хватает инструмента “сделай вид, что ты взрослый”: run_tests/lint/typecheck. Без этого агент пишет код, как студент на экзамене: уверенно, быстро и без запуска.
И да, path safety: если не ограничить root проекта, однажды получите легендарное: «Создал файл /etc/hosts с полезными импортами».
Теперь и комментарии ллмками пишем?)
Поспешил человек высказаться, а писать было лень.
Но и ллм вполне разумное написала.
Другое дело, что это proof of concept, а не продакшен-волшебная палочка.
Но вот diff-ы точно нужны!
Ну и экономия токенов не помешала бы: гонять туда сюда по целому файлу (а, будем реалистами, там скоро и каталоги полетят) - это прямо "на что бы потратить стопятьсот долларов денег и как бы сжечь стопятьсот киловатт энергии?!"
Да, это ответ, который сформулировать наша система (Тестируем свою систему локально/в закрытом контуре конечно же, но которая может мониторить источники, искать статьи по смыслу, ставит пометки -тезисы/риски/что проверить-, связывает с похожими материалами и сама пингует, когда появляется реально важное под наш профиль. Плюсы: меньше шума, быстрее разбор, прозрачные причины алертов и никакого “джуна с root’ом” — всё в пределах заданных правил и инструментов. Скоро будет статья и репозиторий для скачивания на гитах. ) — мы её сейчас как раз тестируем на реальных обсуждениях. При этом по смыслу я писал про приземлённые вещи: агент = LLM + ограниченные инструменты (list/read/edit) + human‑in‑the‑loop; edit_file “по подстроке” в проде лучше заменять на unified diff + patch; и обязательно иметь run_tests/lint/typecheck и path safety. Скоро выпустим статью про саму систему, и сборку можно будет скачать на гитах — кину ссылку, как выложим. PS скоро это без времени. пока вопросики.
На самом деле вы можете попросить агента выдать вам весь список тулов. Там много всего интересного:)
По факту это чат, где модели дали три руки: list_files, read_file, edit_file.
Еще websearch, console, find, grep
Оно, конечно, прикольно, но слишком уж базовый уровень, который нихера в проде работать не будет, тупо потому-что изобретается свой протокол работы с тулзами, контекст подрастет и модель начнет тупить и вызывать их неправильно, ибо они только описаны в системном промпте, тогда как все современные модели, как правило, натренированны использовать стандартный протокол.
Для этого, там, где в статье идет вызов claude_client.messages.create( помимо того, что передается, можно передать еще и список тулзов. А ответ модели в таком случае может быть не только текст, но и список вызовов тулзов, ибо за один ответ модель может подумать и вызвать несколько тулзов.
Статья больше вредная, чем полезная, на мой взгляд, лучше сразу к нормальной работе приучаться, чем к уровню робких шагов начала 2024, когда еще не знали как тулзы вызывать. Ну и упоминание claude code в заголовке - чистый кликбейт, т.к. помимо вызова тулзов там еще дохера чего есть.
Упд: Ой, глянул оригинал - там в первой же строчке указывается, что он написан в январе 2025! Переводчик, такие вещи надо сразу указывать, что статья - антиквар.
В AI IDE есть режим планирования и режим агента. Значит как минимум есть промпты которые готовят модель к решению задачи планирования или кодинга. Так же, когда ставишь задачу модель повторяет формулировку ещё раз сама себе другими словами. Это часть конкретной рассуждающий модели или это в коде агента? Модель строит план и затем идёт по пунктам, иногда не доводя работу до конца, если она слишком большая. Опять вопрос - это определяется агентом или рассуждающая моделью?
Иными словами, не совсем однозначно насколько король голый.
VSCode Copilot как раз таки голый, если вытащить список тулов, то там будет manage_todo_list с простейшим crud, write, read, и также вызов субагентов в виде такой же функции. Никакой магии
Это часть конкретной рассуждающий модели или это в коде агента? Модель строит план и затем идёт по пунктам, иногда не доводя работу до конца, если она слишком большая. Опять вопрос - это определяется агентом или рассуждающая моделью?
Это обычно делается оркестратором, который разбивает высокороувневую задачу на несколько кусков, и у него есть инструмент “вызов агента”, в котором он указывает роль и входящией данные. Агент получает входящие данные и свой промтп в котором написано “ты архитектор, не пиши код, читай и предлагай варианты”, думает, потом вызывает инструмент “конец работы” в котором отдает результат работы оркестратору. Тот получает результат работы архитектора, и отдает его “программисту”, а тот, как закончит, тоже использует “конец работы” а дальше оркестратор может снова позвать архитектора, чтобы он проверил работу.
И все эти “архитектор” “кодер” “дебаггер” — это просто роли, там может быть одна и та же модель, просто с разными проптами. Но чаще всего в качестве кодера используют модель попроще и подешевле, потому что ей думать сильно не надо, просто реализовать по существующему плану код.
Уж очень примитивно в сравнении с сегодняшними кодинг агентами, которые пишут код, запускают авто тесты, исправляют ошибки по провалам тестов, умеют работать долго в фоновом режиме без зацикливания, имеют глубокую интеграцию в ide и т. д. и т.п.
В Claude code есть:
Режим планирования
Thinking
Модель безопасности и пользовательских разрешений
Параллельный запуск специализированных субагентов
Защита от слишком большого ответа инструмента (например, при чтении огромного файла или результата выполнения шелл-команды, или списка файлов или http-ответа итд)
Автоматическое и ручное сжатие контекста
Поддержка пользовательских скиллов
MCP позволяющий подключать любые сторонние тулы
ACP позволяющий использовать Клода через API. Например, встраивать его в интерфейс IDE
Настройки, кастомные промпты, кастомные команды и правила безопасности уровня проекта и пользователя
Интеграция с IDE (видит открытый в данный момент файл и выделенную строку)
Инструмент редактирования файлов, основанный на diff
Предпросмотр изменений файла
Запуск шелл-команд в фоне и управление фоновыми процессами
Откат беседы и кода к предыдущим состояниям
База данных всех бесед с возможностью вернуться к любой из них
Динамический UI написанный на Ink, вылизанный почти до совершенства множеством итераций, основанных на тысячах пользовательских issues.
Это здоровенная махина, и ни в 200, ни в 20000 строк его не запихнуть.
А так-то да, написание helloworld-агента у вас прекрасно проиллюстрировано, но не стоит забывать, что реальные "промышленные" агенты — это 99.9% сложной логической обвязки, 0.1% LLM-вызовов.
Весь Claude Code без промптов с .md расширением, около трёх десятков файлов на шелле, питоне и тайпскрипте.
Автор сильно упростил список инструментов современного агента, но и в 20000 и даже в 2000 он вполне влезет, потому что большинство указанного функционала — это просто вызов сторонних юниксовых функций, синтаксис которых нейронке уже известен.
Вы точно ни с чем не путаете? У меня исполняемый файл это бинарник на 178 мегабайт.
Исходники Claude Code есть на гитхабе
https://github.com/anthropics/claude-code
То что автор для вашего удобства упаковал зависимости в бинарник, не повод их считать исходником. Большая часть его логики вообще в одном не очень большом файле.
А теперь попробуйте собрать его из этих "исходников". Claude code проприетарный, не опенсорсный, то, что они выложили это не исходники claude code а немножко плагинов к нему.
Большая часть его логики вообще в одном не очень большом файле.
В этом файле логика плагина кастомных хуков, больше ничего там нет.
Edit:
Склонировал qwen-code - опенсорсный аналог клауде кода, там 261 тысяча строк кода на тайпскрипте.
Open Code начинался как опенсорсный, на гитхабе есть исходники июньской ранней версии 0.0.55, там 47 тысяч строк кода на go.
А вообще да, reducer)
Ну, для написания скрипта hello world подойдет :)
А король-то голый! Как написать свой Claude Code в 200 строках кода