by AutoCodeRover (open source) GPT, Claude, Llama, Gemini, Groq, модели Anthropic через AWS Bedrock
Автономный software engineer, осознающий структуру проекта, нацеленный на автономное улучшение программ. Решает 37.3% задач SWE-bench lite и 46.2% SWE-bench verified (pass@1) при стоимости менее $0.7 за задачу. Академический исследовательский проект.
Agentless-подход к автоматическому решению задач разработки ПО — без агентного цикла планирования/действия, упрощённый и воспроизводимый пайплайн. …
Архив джейлбрейк-промптов и техник обхода ограничений LLM для исследований в области AI security и red teaming. …
Claude Skill для помощи в исследовании семейной истории и планировании генеалогических изысканий.
Claude Code skill для рекурсивного исследования вплоть до уровня PhD в любой предметной области. Тирирование источников, …
# установка переменной окружения с API-ключом OpenAI
export OPENAI_KEY=sk-YOUR-OPENAI-API-KEY-HERE
# для моделей Anthropic вместо предыдущей команды:
export ANTHROPIC_API_KEY=sk-ant-api...
# сборка и запуск Docker-образа AutoCodeRover
docker build -f Dockerfile.minimal -t acr .
docker run -it -e OPENAI_KEY="${OPENAI_KEY:-OPENAI_API_KEY}" acr
# альтернатива: локальная установка зависимостей через conda
conda env create -f environment.yml
<img src="https://github.com/nus-apr/auto-code-rover/assets/16000056/8d249b02-1db4-4f58-a5a4-bdb694d65ab1" alt="autocoderover_logo" width="200px" height="200px">
<a href="https://arxiv.org/abs/2404.05427"><strong>Статья на ArXiv</strong></a>
<a href="https://autocoderover.dev/"><strong>Веб-сайт</strong></a>
<a href="https://discord.gg/ScXsdE49JY"><strong>Discord-сервер</strong></a>
<br>

<br>
> [!NOTE]
> Это публичная версия проекта AutoCodeRover. Актуальные результаты смотрите на нашем [веб-сайте](https://autocoderover.dev/).
## 📣 Обновления
- [21 ноября 2024] AutoCodeRover(v20240620) достигает эффективности **46,20%** на SWE-bench Verified и **24,89%** на полном SWE-bench.
- [14 августа 2024] На наборе данных SWE-bench Verified, выпущенном OpenAI, AutoCodeRover(v20240620) достигает эффективности **38,40%**, а AutoCodeRover(v20240408) — 28,8%. Подробнее в [посте в блоге](https://openai.com/index/introducing-swe-bench-verified/) от OpenAI и в [таблице лидеров SWE-bench](https://www.swebench.com/).
- [18 июля 2024] AutoCodeRover теперь поддерживает новый режим, который выводит список потенциальных мест исправления.
- [20 июня 2024] AutoCodeRover(v20240620) теперь достигает эффективности **30,67%** (pass@1) на SWE-bench-lite!
- [08 июня 2024] Добавлена поддержка моделей Gemini, Groq (спасибо [KasaiHarcore](https://github.com/KasaiHarcore) за вклад!) и моделей Anthropic через AWS Bedrock (спасибо [JGalego](https://github.com/JGalego) за вклад!).
- [29 апреля 2024] Добавлена поддержка моделей Claude и Llama. Список поддерживаемых моделей можно найти [здесь](#using-a-different-model)! Поддержка большего числа моделей появится скоро.
- [19 апреля 2024] AutoCodeRover теперь поддерживает работу с [GitHub issues](#github-issue-mode-set-up-and-run-on-new-github-issues) и [локальными issues](#local-issue-mode-set-up-and-run-on-local-repositories-and-local-issues)! Попробуйте — мы будем рады вашей обратной связи!
## [Discord](https://discord.gg/ScXsdE49JY) — сервер для общего обсуждения, вопросов и обратной связи.
## 👋 Обзор
AutoCodeRover — это полностью автоматизированный подход к решению GitHub issues (исправление багов и добавление новой функциональности), в котором LLM объединяются с возможностями анализа и отладки для приоритизации мест патчей, что в конечном счёте приводит к созданию патча.
[Обновление от 20 июня 2024] AutoCodeRover(v20240620) теперь решает **30,67%** issues (pass@1) в SWE-bench lite! AutoCodeRover достиг этой эффективности, оставаясь при этом экономичным — каждая задача стоит **менее $0,7** и выполняется в течение **7 минут**!
<img src=https://github.com/nus-apr/auto-code-rover/assets/16000056/78d184b2-f15c-4408-9eac-cfd3a11a503a width=500/>
<img src=https://github.com/nus-apr/auto-code-rover/assets/16000056/83253ae9-8789-474e-942d-708495b5b310 width=500/>
[08 апреля 2024] Первый релиз AutoCodeRover(v20240408) решает **19%** issues в [SWE-bench lite](https://www.swebench.com/lite.html) (pass@1), превосходя текущие лучшие показатели эффективности ИИ-инженеров по программному обеспечению.
AutoCodeRover работает в два этапа:
- 🔎 Извлечение контекста: LLM предоставляются API поиска по коду для навигации по кодовой базе и сбора релевантного контекста.
- 💊 Генерация патча: LLM пытается написать патч на основе извлечённого контекста.
### ✨ Ключевые особенности
У AutoCodeRover есть две уникальные особенности:
- API поиска по коду *учитывают структуру программы*. Вместо поиска по файлам посредством простого сопоставления строк AutoCodeRover ищет релевантный контекст кода (методы/классы) в абстрактном синтаксическом дереве.
- Когда доступен набор тестов, AutoCodeRover может использовать тестовые случаи для достижения ещё более высокого процента исправлений, применяя *статистическую локализацию дефектов*.
## 🗎 Статья на arXiv
### AutoCodeRover: Автономное улучшение программ [[arXiv 2404.05427]](https://arxiv.org/abs/2404.05427)
<a href="https://arxiv.org/abs/2404.05427">
<img src="https://github.com/nus-apr/auto-code-rover/assets/48704330/c6422951-a6e8-4494-9403-b5ada3d9ee7d" alt="Первая страница статьи arXiv" width="570">
</a>
При ссылке на нашу работу, пожалуйста, цитируйте и упоминайте:
@inproceedings{zhang2024autocoderover, author = {Zhang, Yuntong and Ruan, Haifeng and Fan, Zhiyu and Roychoudhury, Abhik}, title = {AutoCodeRover: Autonomous Program Improvement}, year = {2024}, isbn = {9798400706127}, publisher = {Association for Computing Machinery}, address = {New York, NY, USA}, url = {https://doi.org/10.1145/3650212.3680384}, doi = {10.1145/3650212.3680384}, booktitle = {Proceedings of the 33rd ACM SIGSOFT International Symposium on Software Testing and Analysis}, pages = {1592–1604}, numpages = {13}, keywords = {automatic program repair, autonomous software engineering, autonomous software improvement, large language model}, location = {Vienna, Austria}, series = {ISSTA 2024} }
## ✔️ Пример: Django Issue #32347
В качестве примера, AutoCodeRover успешно исправил issue #32347 в Django. Посмотрите демо-видео для полного процесса:
https://github.com/nus-apr/auto-code-rover/assets/48704330/719c7a56-40b8-4f3d-a90e-0069e37baad3
AutoCodeRover может решать ещё больше issues, если доступны тесты. Смотрите пример в видео:
https://github.com/nus-apr/auto-code-rover/assets/48704330/26c9d5d4-04e0-4b98-be55-61c1d10a36e5
Мы рекомендуем запускать AutoCodeRover в Docker-контейнере.
Установите переменную окружения OPENAI_KEY равной вашему ключу OpenAI:
export OPENAI_KEY=sk-YOUR-OPENAI-API-KEY-HERE
Для моделей Anthropic установите переменную окружения ANTHROPIC_API_KEY; где её найти, описано здесь
export ANTHROPIC_API_KEY=sk-ant-api...
Аналогично с GROQ_API_KEY
Соберите и запустите Docker-образ для инструмента AutoCodeRover:
docker build -f Dockerfile.minimal -t acr .
docker run -it -e OPENAI_KEY="${OPENAI_KEY:-OPENAI_API_KEY}" acr
В качестве альтернативы вы можете иметь локальную копию AutoCodeRover и управлять зависимостями Python с помощью environment.yml.
Это рекомендуемая настройка для запуска экспериментов SWE-bench с AutoCodeRover.
При наличии работающей установки conda выполните conda env create -f environment.yml.
Аналогично, установите OPENAI_KEY или ANTHROPIC_API_KEY в вашей оболочке перед запуском AutoCodeRover.
Вы можете запустить AutoCodeRover в трёх режимах:
Если вы хотите использовать AutoCodeRover для новых GitHub issues в проекте, подготовьте следующее:
git clone ...).git checkout ...).Затем в Docker-контейнере (или вашей локальной копии AutoCodeRover) выполните следующие команды для настройки целевого проекта и генерации патча:
cd /opt/auto-code-rover
conda activate auto-code-rover
PYTHONPATH=. python app/main.py github-issue --output-dir output --setup-dir setup --model gpt-4o-2024-05-13 --model-temperature 0.2 --task-id <task id> --clone-link <link for cloning the project> --commit-hash <any version that has the issue> --issue-link <link to issue page>
Вот пример команды для запуска ACR на issue из багтрекера langchain на GitHub:
PYTHONPATH=. python app/main.py github-issue --output-dir output --setup-dir setup --model gpt-4o-2024-05-13 --model-temperature 0.2 --task-id langchain-20453 --clone-link https://github.com/langchain-ai/langchain.git --commit-hash cb6e5e5 --issue-link https://github.com/langchain-ai/langchain/issues/20453
<task id> может быть любой строкой, используемой для идентификации этого issue.
Если генерация патча прошла успешно, путь к сгенерированному патчу будет записан в файл с именем selected_patch.json в выходном каталоге.
Вместо клонирования удалённого проекта и запуска ACR на онлайн-issue вы также можете заранее подготовить локальный репозиторий и issue, если это подходит для вашего случая использования.
Для запуска ACR на локальном issue и локальной кодовой базе подготовьте локальную кодовую базу и запишите описание issue в файл, затем выполните следующие команды:
cd /opt/auto-code-rover
conda activate auto-code-rover
PYTHONPATH=. python app/main.py local-issue --output-dir output --model gpt-4o-2024-05-13 --model-temperature 0.2 --task-id <task id> --local-repo <path to the local project repository> --issue-file <path to the file containing issue description>
Если генерация патча прошла успешно, путь к сгенерированному патчу будет записан в файл с именем selected_patch.json в выходном каталоге.
Этот режим предназначен для запуска ACR на существующих задачах-issues, содержащихся в SWE-bench.
Мы используем форк SWE-bench docker для запуска регрессионных тестов (не тестов FAIL_TO_PASS, а всех тестов в дефектных программах). Чтобы установить его, выполните
conda activate auto-code-rover
git submodule update --init --recursive
cd SWE-bench-docker
pip install .
Для режима SWE-bench мы рекомендуем настраивать ACR на хост-машине, а не запускать его в режиме Docker.
Во-первых, настройте экземпляры задач SWE-bench локально.
Клонируйте этот форк SWE-bench и следуйте инструкции по установке, чтобы установить зависимости.
Поместите задачи для запуска в файл, по одной на строку:
cd <SWE-bench-path>
echo django__django-11133 > tasks.txt
Или при запуске на arm64 (например, Apple silicon) попробуйте этот вариант, который не зависит от Python 3.6 (который не поддерживается в этом окружении):
echo django__django-16041 > tasks.txt
Затем настройте эти задачи, выполнив: 3. Настройте задачи из файла, выполнив:
cd <SWE-bench-path>
conda activate swe-bench
python harness/run_setup.py --log_dir logs --testbed testbed --result_dir setup_result --subset_file tasks.txt
После завершения настройки этой задачи будут выведены следующие две строки:
setup_map is saved to setup_result/setup_map.json
tasks_map is saved to setup_result/tasks_map.json
Каталог testbed теперь будет содержать клонированный исходный код целевого проекта.
Также для этого экземпляра задачи будет создано conda-окружение.
Если вы хотите настроить несколько задач одновременно, укажите несколько идентификаторов в tasks.txt и выполните те же шаги.
Перед запуском задачи (здесь это django__django-11133) убедитесь, что она была настроена, как описано выше.
cd <AutoCodeRover-path>
conda activate auto-code-rover
PYTHONPATH=. python app/main.py swe-bench --model gpt-4o-2024-05-13 --setup-map <SWE-bench-path>/setup_result/setup_map.json --tasks-map <SWE-bench-path>/setup_result/tasks_map.json --output-dir output --task django__django-11133
Результаты запуска (например, для django__django-11133) можно найти по пути вида: output/applicable_patch/django__django-11133_yyyy-MM-dd_HH-mm-ss/ (поле даты и времени в имени каталога будет отличаться в зависимости от того, когда был проведён эксперимент).
Путь к итоговому сгенерированному патчу записывается в файл с именем selected_patch.json в выходном каталоге.
Сначала поместите идентификаторы всех задач для запуска в файл, по одному на строку. Предположим, что этот файл называется tasks.txt, тогда задачи можно запустить с помощью
cd <AutoCodeRover-path>
conda activate auto-code-rover
PYTHONPATH=. python app/main.py swe-bench --model gpt-4o-2024-05-13 --setup-map <SWE-bench-path>/setup_result/setup_map.json --tasks-map <SWE-bench-path>/setup_result/tasks_map.json --output-dir output --task-list-file <SWE-bench-path>/tasks.txt
ПРИМЕЧАНИЕ: убедитесь, что все задачи из tasks.txt были настроены в SWE-bench. См. шаги выше.
В качестве альтернативы можно использовать конфигурационный файл, чтобы указать все параметры и задачи для запуска. Пример см. в conf/example.conf.
Подробности об элементах конфигурационного файла см. также в EXPERIMENT.md.
Конфигурационный файл можно использовать так:
python scripts/run.py conf/example.conf
AutoCodeRover работает с различными базовыми моделями. Вы можете задать используемую базовую модель с помощью аргумента командной строки --model.
Текущий список поддерживаемых моделей:
| Модель | Аргумент командной строки AutoCodeRover | |
|---|---|---|
| OpenAI | gpt-4o-2024-08-06 | --model gpt-4o-2024-08-06 |
| gpt-4o-2024-05-13 | --model gpt-4o-2024-05-13 | |
| gpt-4-turbo-2024-04-09 | --model gpt-4-turbo-2024-04-09 | |
| gpt-4-0125-preview | --model gpt-4-0125-preview | |
| gpt-4-1106-preview | --model gpt-4-1106-preview | |
| gpt-3.5-turbo-0125 | --model gpt-3.5-turbo-0125 | |
| gpt-3.5-turbo-1106 | --model gpt-3.5-turbo-1106 | |
| gpt-3.5-turbo-16k-0613 | --model gpt-3.5-turbo-16k-0613 | |
| gpt-3.5-turbo-0613 | --model gpt-3.5-turbo-0613 | |
| gpt-4-0613 | --model gpt-4-0613 | |
| Anthropic | Claude 3.5 Sonnet v2 | --model claude-3-5-sonnet-20241022 |
| Claude 3.5 Sonnet | --model claude-3-5-sonnet-20240620 | |
| Claude 3 Opus | --model claude-3-opus-20240229 | |
| Claude 3 Sonnet | --model claude-3-sonnet-20240229 | |
| Claude 3 Haiku | --model claude-3-haiku-20240307 | |
| Meta | Llama 3 70B | --model llama3:70b |
| Llama 3 8B | --model llama3 | |
| AWS Bedrock | Claude 3 Opus | --model bedrock/anthropic.claude-3-opus-20240229-v1:0 |
| Claude 3 Sonnet | --model bedrock/anthropic.claude-3-sonnet-20240229-v1:0 | |
| Claude 3 Haiku | --model bedrock/anthropic.claude-3-haiku-20240307-v1:0 | |
| Claude 3.5 Sonnet | --model bedrock/anthropic.claude-3-5-sonnet-20241022-v2:0 | |
| Nova Pro | --model bedrock/us.amazon.nova-pro-v1:0 | |
| Nova Lite | --model bedrock/us.amazon.nova-lite-v1:0 | |
| Nova Micro | --model bedrock/us.amazon.nova-micro-v1:0 | |
| LiteLLM | Любая модель LiteLLM | --model litellm-generic- |
| Groq | Llama 3 8B | --model groq/llama3-8b-8192 |
| Llama 3 70B | --model groq/llama3-70b-8192 | |
| Llama 2 70B | --model groq/llama2-70b-4096 | |
| Mixtral 8x7B | --model groq/mixtral-8x7b-32768 | |
| Gemma 7B | --model groq/gemma-7b-it |
[!NOTE] Использование моделей Groq на бесплатном тарифе может привести к превышению лимита контекста даже при работе с простыми issue.
[!NOTE] Некоторые замечания о запуске ACR с локальными моделями, такими как llama3: 1. Перед использованием моделей llama3, пожалуйста, установите ollama и загрузите соответствующие модели с помощью ollama (например,
ollama pull llama3). 2. Вы можете запустить сервер ollama на хост-машине, а ACR — в его контейнере. ACR будет пытаться связаться с сервером ollama на хосте. 3. Если ваша конфигурация — ollama на хосте + ACR в его контейнере, мы рекомендуем установить на хост Docker Desktop в дополнение к Docker Engine. - Docker Desktop содержит Docker Engine, а также имеет виртуальную машину, которая упрощает доступ к портам хоста изнутри контейнера. С Docker Desktop такая конфигурация будет работать без дополнительных усилий. - Если установлена только Docker Engine без Docker Desktop, вам может понадобиться добавить либо--net=host, либо--add-host host.docker.internal=host-gatewayк командеdocker runпри запуске контейнера ACR, чтобы ACR мог взаимодействовать с сервером ollama на хост-машине. Если вы столкнётесь с какой-либо проблемой в инструменте или эксперименте, вы можете связаться с нами по электронной почте ridwan.shariffdeen@sonarsource.com или через наш discord-сервер.
Информацию о репликации экспериментов см. в EXPERIMENT.md.
Информацию о настройке и запуске тестов см. в TESTING.md.
По любым вопросам вы можете открыть issue. Либо свяжитесь с нами по адресу acr@sonarsource.com
Эта работа была частично поддержана грантом Министерства образования Сингапура (MoE) уровня Tier 3 «Automated Program Repair» («Автоматическое исправление программ»), MOE-MOET32021-0001.