As ferramentas sem fossas são um projeto de hobby, onde experimento algumas idéias que tenho sobre como os LLMs podem ser usados para editar o código em grandes bases de código existentes. Acredito que, em vez de confiar em um agente para raciocinar seu caminho para uma solução, é crucial criar boas ferramentas para inserir o contexto certo no prompt e lidar com a resposta.
No momento, estou focando na pesquisa de árvore sem fossa, uma versão estendida de ferramentas sem fossas que constrói uma estrutura de árvores de nós com soluções paralelas e usa pesquisa de árvore para encontrar a trajetória ideal. O código nas ferramentas sem folhas foi simplificado e agora é uma versão simplificada desta base de código expandida.
Eu uso a referência do SWE-banch como uma maneira de verificar minhas idéias.
Com a versão 0.0.3, recebo uma taxa de resolução de 38,3% com o Claude 3,5 Sonnet V20241022. O custo médio por instância é de US $ 0,30.
Os três principais motivos pelos quais pude passar de 27% a 38% resolvidos nesta versão:
Claude 3,5 sonetos e uso de computador
A solução foi ajustada para usar a ferramenta text_editor_20241022 introduzida na nova versão do soneto Claude 3.5. Isso fornece resultados mais estáveis ao editar o código existente.
testes sem fossos
Configurei uma solução baseada em Kubernetes para executar testes e fornecer feedback sobre os resultados dos testes para o agente. Vale a pena notar que o agente precisa identificar independentemente os testes e não pode confiar nos dados PASS_TO_PASS ou FAIL_TO_PASS para cada instância.
Modelo mais flexível
Na versão anterior das ferramentas sem folhas, o agente seguiu um fluxo rígido, onde recuperou o conteúdo primeiro e depois editou o código. Agora, ele pode escolher dinamicamente entre ações para recuperação ou edição de código, dependendo da situação.
Experimente a avaliação Claude 3,5 Sonnet V20241022 configurada no Google Colab
Com a versão 0.0.2, recebo uma taxa de resolução de 26,7% com o Claude 3,5 sonetos, com um custo um pouco maior de US $ 0,17 por instância.
Experimente a avaliação Claude 3.5 configurada no Google Colab
As ferramentas sem fossas 0.0.1 têm uma taxa de resolução de 24%, com cada instância de referência custando uma média de US $ 0,13 para resolver com o GPT-4O. A execução do conjunto de dados do SWE Bench Lite com 300 instâncias custa aproximadamente 40 dólares.
Experimente no Google Colab
Eu me concentrei em testar minhas idéias, e o projeto está atualmente um pouco confuso. Meu plano é organizá -lo no próximo período. No entanto, fique à vontade para clonar o repositório e tentar executar este notebook:
Antes de executar a avaliação, você precisará:
Você pode definir essas configurações por:
.env na raiz do projeto (copie 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> " Configuração básica usando o AgenticLoop para resolver uma instância do SWE-banch.
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 )