Moatless Tools เป็นโครงการงานอดิเรกที่ฉันทดลองกับแนวคิดบางอย่างที่ฉันมีเกี่ยวกับวิธีการใช้ LLMS ในการแก้ไขรหัสในรหัสฐานขนาดใหญ่ที่มีอยู่ ฉันเชื่อว่าแทนที่จะพึ่งพาตัวแทนเพื่อให้เหตุผลในการแก้ปัญหามันเป็นสิ่งสำคัญในการสร้างเครื่องมือที่ดีในการแทรกบริบทที่เหมาะสมลงในพรอมต์และจัดการการตอบสนอง
ตอนนี้ฉันกำลังมุ่งเน้นไปที่ Moatless-Tree-Search เวอร์ชันขยายของเครื่องมือ Moatless ที่สร้างโครงสร้างต้นไม้ของโหนดด้วยโซลูชันแบบขนานและใช้การค้นหาต้นไม้เพื่อค้นหาวิถีที่เหมาะสมที่สุด รหัสใน Moatless-tools นั้นง่ายขึ้นและตอนนี้เป็นรุ่นที่มีความคล่องตัวของ codebase ที่ขยายตัวนี้
ฉันใช้เกณฑ์มาตรฐาน SWE-BENCH เป็นวิธีการตรวจสอบความคิดของฉัน
ด้วยเวอร์ชัน 0.0.3 ฉันได้รับอัตราการแก้ปัญหา 38.3% ด้วย Claude 3.5 Sonnet V20241022 ต้นทุนเฉลี่ยต่ออินสแตนซ์คือ $ 0.30
เหตุผลหลักสามประการที่ฉันสามารถไปจาก 27% เป็น 38% อินสแตนซ์ที่แก้ไขได้ในเวอร์ชันนี้:
Claude 3.5 Sonnet และการใช้คอมพิวเตอร์
โซลูชันได้รับการปรับให้ใช้เครื่องมือ text_editor_20241022 ที่แนะนำใน Claude 3.5 Sonnet เวอร์ชันใหม่ สิ่งนี้ให้ผลลัพธ์ที่เสถียรมากขึ้นเมื่อแก้ไขรหัสที่มีอยู่
Moatless-testbeds
ฉันตั้งค่าโซลูชันที่ใช้ Kubernetes เพื่อเรียกใช้การทดสอบและให้ข้อเสนอแนะเกี่ยวกับผลการทดสอบกับตัวแทน เป็นที่น่าสังเกตว่าเอเจนต์จะต้องระบุการทดสอบอย่างอิสระและไม่สามารถพึ่งพาข้อมูล PASS_TO_PASS หรือ FAIL_TO_PASS สำหรับแต่ละอินสแตนซ์ได้
รุ่นที่ยืดหยุ่นมากขึ้น
ในเวอร์ชันก่อนหน้าของเครื่องมือ Moatless เอเจนต์ได้ติดตามการไหลที่เข้มงวดซึ่งเนื้อหาที่ดึงมาก่อนแล้วแก้ไขรหัส ตอนนี้มันสามารถเลือกแบบไดนามิกระหว่างการกระทำสำหรับการดึงรหัสหรือการแก้ไขขึ้นอยู่กับสถานการณ์
ลองใช้การประเมินผล Claude 3.5 Sonnet V20241022 บน Google Colab
ด้วยเวอร์ชัน 0.0.2 ฉันได้รับอัตราการแก้ปัญหา 26.7% กับ Claude 3.5 Sonnet โดยมีค่าใช้จ่ายสูงกว่า $ 0.17 ต่ออินสแตนซ์
ลองใช้การประเมินผลของ Claude 3.5 บน Google Colab
Moatless Tools 0.0.1 มีอัตราการแก้ปัญหา 24%โดยแต่ละอินสแตนซ์เกณฑ์มาตรฐานมีราคาเฉลี่ยอยู่ที่ $ 0.13 เพื่อแก้ไขด้วย GPT-4O เรียกใช้ชุดข้อมูล SWE Bench Lite ด้วยค่าใช้จ่าย 300 อินสแตนซ์ประมาณ 40 ดอลลาร์
ลองใช้ใน Google Colab
ฉันมุ่งเน้นไปที่การทดสอบความคิดของฉันและโครงการนี้ค่อนข้างยุ่ง แผนของฉันคือการจัดระเบียบในช่วงเวลาที่จะมาถึง อย่างไรก็ตามอย่าลังเลที่จะโคลน repo และลองใช้สมุดบันทึกนี้:
ก่อนที่จะทำการประเมินผลคุณจะต้อง:
คุณสามารถกำหนดค่าการตั้งค่าเหล่านี้ได้โดย:
.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 )