해자리스 도구는 LLM이 기존 코드베이스에서 코드를 편집하는 데 어떻게 사용될 수 있는지에 대한 아이디어를 실험하는 취미 프로젝트입니다. 에이전트에 의존하여 솔루션에 대한 이유를 추론하는 대신 올바른 컨텍스트를 프롬프트에 삽입하고 응답을 처리하는 좋은 도구를 구축하는 것이 중요합니다.
지금은 병렬 솔루션을 갖춘 노드의 트리 구조를 구축하고 트리 검색을 사용하여 최적의 궤적을 찾는 연장 버전의 해자리스 툴 버전 인 해자리스 트리 검색에 중점을 둡니다. 해자리스 툴의 코드는 단순화되었으며 이제이 확장 된 코드베이스의 간소화 된 버전입니다.
SWE-Bench 벤치 마크를 내 아이디어를 확인하는 방법으로 사용합니다.
버전 0.0.3을 사용하면 Claude 3.5 Sonnet V20241022로 38.3% 해결 속도를 얻습니다. 인스턴스 당 평균 비용은 $ 0.30입니다.
이 버전에서 27%에서 38%의 해결 된 인스턴스로 갈 수 있었던 세 가지 주요 이유는 다음과 같습니다.
클로드 3.5 소네트 및 컴퓨터 사용
이 솔루션은 Claude 3.5 Sonnet의 새 버전에 소개 된 text_editor_20241022 도구를 사용하도록 조정되었습니다. 이는 기존 코드를 편집 할 때보다 안정적인 결과를 제공합니다.
해자없는 테스트
Kubernetes 기반 솔루션을 설정하여 테스트를 실행하고 대리인에게 테스트 결과에 대한 피드백을 제공합니다. 에이전트는 독립적으로 테스트를 식별해야하며 각 인스턴스에 대해 PASS_TO_PASS 또는 FAIL_TO_PASS 데이터에 의존 할 수 없습니다.
보다 유연한 모델
해자리스 도구의 이전 버전에서 에이전트는 엄격한 흐름을 따라 컨텐츠를 처음 검색 한 다음 코드를 편집했습니다. 이제 상황에 따라 코드 검색 또는 편집 작업 중에서 동적으로 선택할 수 있습니다.
Claude 3.5 Sonnet V20241022 평가를 시도해 Google Colab에 설정하십시오.
버전 0.0.2를 사용하면 Claude 3.5 Sonnet으로 26.7%의 해결 요금을 받고 인스턴스 당 약간의 비용이 $ 0.17입니다.
Google Colab에 설정된 Claude 3.5 평가를 시도해보십시오.
해자리스 도구 0.0.1의 해결 속도는 24%이며 각 벤치 마크 인스턴스는 GPT-4O로 해결하는 데 평균 $ 0.13의 비용이 듭니다. 300 인스턴스로 SWE 벤치 라이트 데이터 세트를 실행하는 데 약 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> " SWE 벤치 인스턴스를 해결하기 위해 AgenticLoop 을 사용한 기본 설정.
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 )