Содержимое
Как устроен лучший автономный AI-разработчик на сегодня (публично доступный) Anthropic сделали большое дело — опубликовали статью о том, как им удалось добиться лучшего результата в бенчмарке AI-агентов-программистов SWE-bench (см. Verified). Почему дело большое? Потому, что SWE-bench — это поле битвы автономных AI-агентов-программистов, в котором разные компании пытаются зарезловить как можно больше Issues из определенного списка OpenSource проектов. Так вот, Anthropic с их Claude 3.5 Sonnet v2 действительно удалось добиться выдающегося результата, сместив всех предыдущих "Senior AI-инженеров" с пьедестала. А про SWE-bench недавно был хороший пост в канале Сиолошная (последняя новость в посте). Вот, кстати, емкое определение оттуда же, оно мне понравилось: SWE-bench — Это бенчмарк оценки способностей LLM по внесению изменений, описанных текстом, в кодовую базу большого существующего проекта (одни из самых популярных Python-фреймворков, например, Django). В каждом задании бенчмарка ИИ предоставляется настроенная среда Python и копия репозитория в состоянии перед тем, как ошибка была устранена. Модель должна проанализировать, изменить и протестировать код, а затем предложить своё решение. Для тех, кто хочет глубже, вот подробное описание SWE-bench Verified. Как это работает Высокоуровнево, они это сделали через Tool Use (function calling) — это когда разработчик описывает для нейросети список доступных функций и просит ее, когда это уместно, вызывать одну (или несколько) из описанных функций. Например, можно объявить функцию получения текущей даты и времени и когда пользователь спросит текущее время у LLM, она "вызовет" функцию и ответит ему правильно. Ребята реализовали две функции: 1. Bash Tool для запуска bash комманд. 2. Edit Tool для просмотра, создания и редакирования файлов. А Edit Tool, в свою очередь, состоит из 5-х команд: view, create, str_replace, insert, undo_edit. Отдельный интерес представляют промпты (в т. ч. описание тулинга) — только посмотрите на сколько они подробные. В главном промпте хочу обратить внимание на предложение к LLM сначала воспроизвести баг локально (изолированно) и только после этого решать проблему. Челленджы такого подхода в статье описаны отдельно. Пример так же есть в статье. Эти 2 функции LLM выполняет последовательно в том порядке и с теми аргументами, которые считает нужными, а результат выполнения передается обратно в LLM и, таким образом, итеративно накапливается довольно большой контекст, состоящий из messages к LLM (для Claude 3.5 контекст все еще ограничен 200к токенами). Если задача решена, либо модель вышла за пределы контекста, цикл останавливается. Что нам с этого? В принципе, такой подход можно применить и для решения рабочих задач — взять какой-нибудь баг или даже небольшую фичу из таск трекера и делегировать реализацию описанному агенту. Кстати, вместо Sonnet 3.5 v2 можно использовать и другую LLM, поддерживающую function calling. Ну что, будем ждать новый еще более мощный тулинг (а-ля aider), реализованный по статье. Еще, опять же, в кач-ве пет проекта можно повторить описанный подход и самостоятельно. — Пробелов.NET. Спасибо, что читаете :)