论文

使用 大语言模型 生成存储库级 Solidity 代码:从提示到 微调

Repository-Level Solidity Code Generation with Large Language Models: From Prompting to Fine-Tuning

模型评测基准与评测资源

摘要

大语言模型 (LLM) 在通用代码生成方面表现出了强大的能力,但其在专用软件领域的有效性仍未得到充分探索。 Solidity 智能合约代表了一个高风险领域,其中生成的代码必须满足严格的语言级别、安全性和软件工程约束。现有的基准和指标仍然不足以生成存储库级别的 Solidity,其中模型必须根据自然语言需求合成完整的合约。为了弥补这一差距,我们引入了 SolidityBench,这是一个由 5,470 个存储库级 Solidity 智能合约和自然语言描述组成的基准。我们还提出了 SolidityScore,这是一种 Solidity 感知语义指标,强调领域关键结构,例如安全修饰符、合约声明和 Solidity 特定关键字。使用此基准,我们评估了代表性代码 LLM,包括 Qwen2.5-Coder、DeepSeek-Coder 和 CodeLlama,涵盖零样本提示、思想链推理、上下文学习、检索增强生成和监督 微调。结果表明,通用模型在存储库级别的 Solidity 生成中表现出系统的结构缺陷。在非参数方法中,检索增强生成表现最好,而上下文学习由于上下文饱和而退化到超过两个示例。有监督的 微调 通过将 Solidity 特定约束内化到模型参数中,实现了最大的改进。总的来说,我们的研究为存储库级 Solidity 代码生成提供了全面的基准,并表明高质量的领域数据与受监督的 微调 相结合是提高 LLM 生成的智能合约可靠性的最有效策略。