Moatless Toolsは、LLMSを使用して大規模な既存のコードベースでコードを編集する方法についていくつかのアイデアを試してみる趣味のプロジェクトです。エージェントに頼ってソリューションへの道を推論するのではなく、適切なコンテキストをプロンプトに挿入して応答を処理するための優れたツールを構築することが重要であると思います。
現在、私はMoat-Lese-Tree-Searchに焦点を当てています。これは、並列ソリューションを使用してノードのツリー構造を構築し、ツリー検索を使用して最適な軌跡を見つけるための堀のないトゥールの拡張バージョンです。 Moatless-Toolsのコードは簡素化されており、現在、この拡張されたコードベースの合理化されたバージョンになっています。
私は自分のアイデアを検証する方法として、SWEベンチベンチマークを使用しています。
バージョン0.0.3では、Claude 3.5 Sonnet V20241022で38.3%の解決率が得られます。インスタンスあたりの平均コストは0.30ドルです。
このバージョンの27%から38%の解決されたインスタンスに進むことができる3つの主な理由:
Claude 3.5ソネットとコンピューターの使用
このソリューションは、Claude 3.5 Sonnetの新しいバージョンで導入されたtext_editor_20241022ツールを使用するように調整されています。これにより、既存のコードを編集するときに、より安定した結果が得られます。
堀のないテストベッド
Kubernetesベースのソリューションを設定して、テストを実行し、テスト結果に関するフィードバックをエージェントに提供します。エージェントがテストを独立して特定する必要があり、各インスタンスのPASS_TO_PASSまたはFAIL_TO_PASSデータに依存することはできないことは注目に値します。
より柔軟なモデル
堀のないツールの以前のバージョンでは、エージェントは剛性の流れをたどり、最初にコンテンツを取得してからコードを編集しました。これで、状況に応じて、コード検索または編集のアクションを動的に選択できます。
Google Colabに設定されたClaude3.5 Sonnet V20241022評価をお試しください
バージョン0.0.2では、Claude 3.5 Sonnetで26.7%の解決レートを取得し、インスタンスあたり0.17ドルのコストが少し高くなります。
Google ColabでセットアップされたClaude3.5評価をお試しください
Moatless Tools 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> " AgenticLoopを使用してSWEベンチインスタンスを解く基本セットアップ。
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 )