上海交大:LLM执行多粒度代码调试

在这里插入图片描述

📖标题:From Code to Correctness: Closing the Last Mile of Code Generation with Hierarchical Debugging
🌐来源:arXiv, 2410.01215

摘要

🔸虽然大型语言模型在代码生成方面取得了重大进展,但生成的代码的通过率却受到细微错误的限制,通常需要人为干预才能通过测试,尤其是对于复杂的问题。现有的基于LLM的调试系统将生成的程序视为单片单元,无法在多个粒度级别上解决错误,从低级语法错误到高级算法缺陷。
🔸本文介绍了多粒度调试器(MGDebugger),这是一种分层代码调试器,通过在不同粒度级别隔离、识别和解决错误。MGDebugger将有问题的代码分解为子功能的层次树结构,每个级别代表特定的错误粒度。在调试过程中,它分析每个子功能,并以自下而上的方式迭代解决错误。为了有效地测试每个子函数,我们提出了一个LLM模拟的Python执行器,它跟踪代码执行并跟踪重要的变量状态,以准确地查明错误。
🔸大量实验表明,MGDebugger的性能优于现有的调试系统,在HumanEval中种子生成的准确性提高了18.9%,在HumanEvanFix中的修复成功率提高了97.6%。此外,MGDebugger有效地修复了不同类别和难度级别的错误,展示了其健壮性和有效性。

🛎️文章简介

🔸研究问题:LLM生成的代码因细微错误而受到瓶颈,现有的调试方法将错误代码作为一个整体来处理,忽略了不同层次和类型的错误。
🔸主要贡献:论文提出了一种新的分层调试方法MGDebugger,通过自底向上的策略系统来调试代码,显著提高了调试的准确性和效率。

📝重点思路

🔺相关工作

🔸LLM代码生成:GPT4、Codestral和DeepSeek-Coder等通过指令调优和RLHF实现了高级代码生成,包括使用规划算法、多次编程排名采样、多代理协作等策略提高代码质量。
🔸修复LLM生成的代码:一个方向是训练一个专门修复代码的模型,另一个方向是通过外部反馈自我修复。

🔺论文方案

🔸层次化代码分解:将输入的有缺陷代码分解为子函数的层次结构,以便在不同粒度级别上系统地识别和解决错误。
🔸生成子函数的测试用例:从主函数的公共测试用例中推导出子函数的私有测试用例,确保测试用例不仅反映子函数的预期功能,还符合公共测试用例的约束。
🔸LLM模拟执行调试子函数:利用LLM模拟代码执行过程,跟踪关键变量和状态变化,以准确识别错误原因。
🔸自底向上的调试:在修复子函数后,更新层次结构中的子函数,并通过自底向上的方式将更改传播到依赖函数中。

🔎分析总结

🔸MGDebugger在所有模型和数据集上均优于现有方法。
🔸分层调试策略至关重要,去除分层调试策略后,修复成功率显著下降。
🔸MGDebugger在处理不同类型的错误和代码长度时表现出色。
🔸MGDebugger的设计选择有效,分层调试策略、LLM模拟执行和测试用例生成均显著提高了准确性和修复成功率。

💡个人观点

论文的核心是利用LLM的固有能力进行自底向上的代码修复,通过解构、生成测试用例、执行测试并逐层更新,类似复杂任务分解后逐步求解。

附录

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大模型任我行

随意啦,喜欢就好~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值