RepairAgent: An Autonomous, LLM-Based Agent for Program Repair
<|reference_start|>RepairAgent: An Autonomous, LLM-Based Agent for Program Repair: Automated program repair has emerged as a powerful technique to mitigate the impact of software bugs on system reliability and user experience. This paper introduces RepairAgent, the first work to address the program repair challenge through an autonomous agent based on a large language model (LLM). Unlike existing deep learning-based approaches, which prompt a model with a fixed prompt or in a fixed feedback loop, our work treats the LLM as an agent capable of autonomously planning and executing actions to fix bugs by invoking suitable tools. RepairAgent freely interleaves gathering information about the bug, gathering repair ingredients, and validating fixes, while deciding which tools to invoke based on the gathered information and feedback from previous fix attempts. Key contributions that enable RepairAgent include a set of tools that are useful for program repair, a dynamically updated prompt format that allows the LLM to interact with these tools, and a finite state machine that guides the agent in invoking the tools. Our evaluation on the popular Defects4J dataset demonstrates RepairAgent's effectiveness in autonomously repairing 164 bugs, including 39 bugs not fixed by prior techniques. Interacting with the LLM imposes an average cost of 270,000 tokens per bug, which, under the current pricing of OpenAI's GPT-3.5 model, translates to 14 cents of USD per bug. To the best of our knowledge, this work is the first to present an autonomous, LLM-based agent for program repair, paving the way for future agent-based techniques in software engineering.<|reference_end|>
@article{bouzenia2024repairagent:,
    title={RepairAgent: An Autonomous, LLM-Based Agent for Program Repair},
    author={Islem Bouzenia, Premkumar Devanbu, Michael Pradel},
    journal={arXiv preprint arXiv:2403.17134},
    year={2024},
    archivePrefix={arXiv},
    eprint={2403.17134},
    primaryClass={cs.SE cs.AI}
}