Инструменты без рва - это хобби -проект, в котором я экспериментирую с некоторыми идеями о том, как LLMS можно использовать для редактирования кода в больших существующих кодовых базах. Я считаю, что вместо того, чтобы полагаться на агента, чтобы рассуждать о своем решении, крайне важно создать хорошие инструменты, чтобы вставить правильный контекст в приглашение и обработку ответа.
Прямо сейчас я сосредотачиваюсь на прохождении без моата, расширенной версии безмотажных инструментов, которая строит деревьевую структуру узлов с параллельными решениями и использует поиск дерева, чтобы найти оптимальную траекторию. Код в бесцветных инструментах был упрощен и теперь является оптимизированной версией этой расширенной кодовой базы.
Я использую эталон Swe-Bench как способ проверить свои идеи.
С версией 0.0.3 я получаю 38,3% решающую ставку с Claude 3,5 Sonnet V20241022. Средняя стоимость за экземпляр составляет 0,30 долл. США.
Три основные причины, по которой я смог перейти с 27% до 38% решенных экземпляров в этой версии:
Claude 3.5 сонет и компьютер
Решение было скорректировано для использования инструмента text_editor_20241022 , представленного в новой версии Sonnet Claude 3.5. Это дает более стабильные результаты при редактировании существующего кода.
Без рво-тесты
Я настроил решение на основе Kubernetes для запуска тестов и предоставления отзывов о результатах испытаний агенту. Стоит отметить, что агент должен независимо идентифицировать тесты и не может полагаться на данные PASS_TO_PASS или FAIL_TO_PASS для каждого экземпляра.
Более гибкая модель
В более ранней версии безмотажных инструментов агент последовал за жестким потоком, где он сначала получил контент, а затем отредактировал код. Теперь он может динамически выбирать между действиями для поиска кода или редактирования, в зависимости от ситуации.
Попробуйте оценку Claude 3.5 Sonnet v20241022, установленная на Google Colab
С версией 0.0.2 я получаю 26,7% решающую ставку с Sonnet Claude 3,5, с чуть более высокой стоимостью 0,17 долл. США за экземпляр.
Попробуйте оценку Claude 3.5, установленную в Google Colab
Инструменты без рво 0,0,1 имеют решающую ставку 24%, причем каждый базовый экземпляр стоит в среднем 0,13 долл. США для решения с GPT-4O. Запуск набора данных Swe Bench Lite с 300 экземплярами стоит около 40 долларов.
Попробуйте это в Google Colab
Я сосредоточился на тестировании своих идей, и проект в настоящее время немного грязный. Мой план - организовать его в ближайший период. Тем не менее, не стесняйтесь клонировать репо и попробуйте запустить эту ноутбук:
Прежде чем запустить оценку, вам понадобится:
Вы можете настроить эти настройки любым:
.env в корне проекта (копирование из .env.example ): cp .env.example .env
# Edit .env with your values # Directory for storing vector index store files
export INDEX_STORE_DIR= " /tmp/index_store "
# Directory for storing clonedrepositories
export REPO_DIR= " /tmp/repos "
# Required: At least one LLM provider API key
export OPENAI_API_KEY= " <your-key> "
export ANTHROPIC_API_KEY= " <your-key> "
# ...or Base URL for custom LLM API service (optional)
export CUSTOM_LLM_API_BASE= " <your-base-url> "
export CUSTOM_LLM_API_KEY= " <your-key> "
# Required: API Key for Voyage Embeddings
export VOYAGE_API_KEY= " <your-key> "
# Optional: Configuration for testbed environment (https://github.com/aorwall/moatless-testbeds)
export TESTBED_API_KEY= " <your-key> "
export TESTBED_BASE_URL= " <your-base-url> " Базовая настройка с использованием AgenticLoop для решения экземпляра SWE-Bench.
from moatless . agent import ActionAgent
from moatless . agent . code_prompts import SIMPLE_CODE_PROMPT
from moatless . benchmark . swebench import create_repository
from moatless . benchmark . utils import get_moatless_instance
from moatless . completion import CompletionModel
from moatless . file_context import FileContext
from moatless . index import CodeIndex
from moatless . loop import AgenticLoop
from moatless . actions import FindClass , FindFunction , FindCodeSnippet , SemanticSearch , RequestMoreContext , RequestCodeChange , Finish , Reject
index_store_dir = "/tmp/index_store"
repo_base_dir = "/tmp/repos"
persist_path = "trajectory.json"
instance = get_moatless_instance ( "django__django-16379" )
completion_model = CompletionModel ( model = "gpt-4o" , temperature = 0.0 )
repository = create_repository ( instance )
code_index = CodeIndex . from_index_name (
instance [ "instance_id" ], index_store_dir = index_store_dir , file_repo = repository
)
actions = [
FindClass ( code_index = code_index , repository = repository ),
FindFunction ( code_index = code_index , repository = repository ),
FindCodeSnippet ( code_index = code_index , repository = repository ),
SemanticSearch ( code_index = code_index , repository = repository ),
RequestMoreContext ( repository = repository ),
RequestCodeChange ( repository = repository , completion_model = completion_model ),
Finish (),
Reject ()
]
file_context = FileContext ( repo = repository )
agent = ActionAgent ( actions = actions , completion = completion_model , system_prompt = SIMPLE_CODE_PROMPT )
loop = AgenticLoop . create (
message = instance [ "problem_statement" ],
agent = agent ,
file_context = file_context ,
repository = repository ,
persist_path = persist_path ,
max_iterations = 50 ,
max_cost = 2.0 # Optional: Set maximum cost in dollars
)
final_node = loop . run ()
if final_node :
print ( final_node . observation . message )