Moatless Tools adalah proyek hobi di mana saya bereksperimen dengan beberapa ide yang saya miliki tentang bagaimana LLMS dapat digunakan untuk mengedit kode dalam basis kode yang ada. Saya percaya bahwa alih -alih mengandalkan agen untuk bernilai jalan ke solusi, penting untuk membangun alat yang baik untuk memasukkan konteks yang tepat ke dalam prompt dan menangani respons.
Saat ini saya fokus pada pencarian-tree-tree, versi diperpanjang dari alat-alat moatless yang membangun struktur pohon node dengan solusi paralel dan menggunakan pencarian pohon untuk menemukan lintasan yang optimal. Kode dalam alat-alat Moatless telah disederhanakan dan sekarang menjadi versi ramping dari basis kode yang diperluas ini.
Saya menggunakan tolok ukur swe-bench sebagai cara untuk memverifikasi ide-ide saya.
Dengan versi 0.0.3 saya mendapatkan 38.3% menyelesaikan tingkat dengan Claude 3.5 sonnet V20241022. Biaya rata -rata per instance adalah $ 0,30.
Tiga alasan utama saya dapat beralih dari 27% menjadi 38% terpecahkan dalam versi ini:
Claude 3.5 soneta dan penggunaan komputer
Solusinya telah disesuaikan untuk menggunakan alat text_editor_20241022 yang diperkenalkan dalam versi baru Claude 3.5 sonnet. Ini memberikan hasil yang lebih stabil saat mengedit kode yang ada.
Tes Moatless
Saya mengatur solusi berbasis Kubernetes untuk menjalankan tes dan memberikan umpan balik tentang hasil tes kepada agen. Perlu dicatat bahwa agen harus secara independen mengidentifikasi tes dan tidak dapat bergantung pada data PASS_TO_PASS atau FAIL_TO_PASS untuk setiap instance.
Model yang lebih fleksibel
Dalam versi awal alat Moatless, agen mengikuti aliran kaku di mana pertama kali mengambil konten dan kemudian mengedit kode. Sekarang, secara dinamis dapat memilih antara tindakan untuk pengambilan kode atau pengeditan, tergantung pada situasinya.
Coba Evaluasi Claude 3.5 Sonnet V20241022 yang diatur di Google Colab
Dengan versi 0.0.2 saya mendapatkan tarif pemecahan 26,7% dengan Claude 3.5 sonnet, dengan biaya sedikit lebih tinggi $ 0,17 per instance.
Coba evaluasi Claude 3.5 yang diatur di Google Colab
Alat Moatless 0.0.1 memiliki tingkat pemecahan 24%, dengan setiap contoh benchmark seharga rata-rata $ 0,13 untuk dipecahkan dengan GPT-4O. Menjalankan SWE Bench Lite Dataset dengan 300 instance berharga sekitar 40 dolar.
Cobalah di Google Colab
Saya telah fokus pada pengujian ide -ide saya, dan proyek ini saat ini agak berantakan. Rencana saya adalah mengaturnya di periode mendatang. Namun, jangan ragu untuk mengkloning repo dan mencoba menjalankan buku catatan ini:
Sebelum menjalankan evaluasi, Anda akan membutuhkan:
Anda dapat mengonfigurasi pengaturan ini dengan baik:
.env di root proyek (salin dari .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> " Pengaturan Dasar Menggunakan AgenticLoop untuk memecahkan instance 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 )