Moateless Tools est un projet de passe-temps où j'expérimente certaines idées que j'ai sur la façon dont les LLM peuvent être utilisées pour modifier le code dans les grandes bases de code existantes. Je crois que plutôt que de compter sur un agent pour raisonner pour une solution vers une solution, il est crucial de créer de bons outils pour insérer le bon contexte dans l'invite et de gérer la réponse.
À l'heure actuelle, je me concentre sur Moatsless-Tree-Search, une version étendue des outils sans moments qui construit une structure d'arbre de nœuds avec des solutions parallèles et utilise la recherche d'arbres pour trouver la trajectoire optimale. Le code dans Moatless-tools a été simplifié et est maintenant une version rationalisée de cette base de code étendue.
J'utilise la référence SWE Bench comme moyen de vérifier mes idées.
Avec la version 0.0.3, j'obtiens un taux de résolution de 38,3% avec Claude 3.5 Sonnet V20241022. Le coût moyen par instance est de 0,30 $.
Les trois principales raisons pour lesquelles j'ai pu passer de 27% à 38% ont résolu des instances dans cette version:
Claude 3.5 Sonnet et utilisation de l'ordinateur
La solution a été ajustée pour utiliser l'outil text_editor_20241022 introduit dans la nouvelle version de Claude 3.5 Sonnet. Cela fournit des résultats plus stables lors de la modification du code existant.
moabes-tests-tests
J'ai configuré une solution basée sur Kubernetes pour exécuter des tests et fournir des commentaires sur les résultats des tests à l'agent. Il convient de noter que l'agent doit identifier indépendamment les tests et ne peut pas s'appuyer sur les données PASS_TO_PASS ou FAIL_TO_PASS pour chaque instance.
Modèle plus flexible
Dans la version précédente des outils de moabes, l'agent a suivi un flux rigide où il a d'abord récupéré du contenu, puis a édité le code. Maintenant, il peut choisir dynamiquement entre des actions pour la récupération ou l'édition de code, selon la situation.
Essayez la configuration de l'évaluation Claude 3.5 Sonnet V20241022 sur Google Colab
Avec la version 0,0.2, j'obtiens un taux de résolution de 26,7% avec Claude 3.5 Sonnet, avec un coût un peu plus élevé de 0,17 $ par instance.
Essayez l'évaluation Claude 3.5 configurée sur Google Colab
Les outils sans moabes 0,0,1 ont un taux de résolution de 24%, chaque instance de référence coûtant en moyenne 0,13 $ à résoudre avec GPT-4O. L'exécution de l'ensemble de données SWE Bench Lite avec 300 instances coûte environ 40 dollars.
Essayez-le dans Google Colab
Je me suis concentré sur le test de mes idées et le projet est actuellement un peu désordonné. Mon plan est de l'organiser dans la période à venir. Cependant, n'hésitez pas à cloner le repo et à essayer de gérer ce cahier:
Avant d'exécuter l'évaluation, vous aurez besoin:
Vous pouvez configurer ces paramètres par soit:
.env dans la racine du projet (copier à partir de .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> " Configuration de base à l'aide de l' AgenticLoop pour résoudre une 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 )