论文

RAPO-Sol:仓库级 Solidity 的检索增强偏好训练

RAPO-Sol: Retrieval-Augmented Preference Optimization for Repository-Level Solidity Code Generation

模型训练偏好优化

摘要

用 Solidity 编写的智能合约管理资产、权限和不可逆的状态更改,使代码生成既有用又安全。存储库级 Solidity 生成具有挑战性,因为模型必须合成完整的合约或库,同时保持状态变量、修饰符、事件、继承、外部调用和访问控制逻辑之间的一致性。我们提出 RAPO-Sol,一个用于存储库级 Solidity 代码生成的两阶段训练框架。首先,检索增强的微调 (RAFT) 使用类似的 Solidity 示例来增强每个训练输入,帮助模型学习重复出现的合约级模式,同时在推理时保持免检索。其次,直接偏好优化 (DPO) 训练模型优先选择参考合约,而不是相近但语义上存在缺陷的替代方案。我们使用 Solidity Semantic-Anchor Perturbation (SAP) 构建拒绝的样本,它会扰乱验证语句、可见性修饰符、数据位置关键字、上下文变量、支付操作和低级调用。使用 CodeLlama-7B-Instruct、DeepSeek-Coder-6.7B-Instruct 和 Qwen2.5-Coder-7B-Instruct 在 SolidityBench 上进行的实验表明,RAFT 相对于有监督的微调持续改进,而基于 SAP 的 DPO 在 BLEU 和 SolidityScore 方面提供了进一步的提升。完整的 RAFT+DPO 管道在所有三个模型中实现了最佳性能,展示了训练期间检索和 Solidity 感知偏好优化的互补优势,而无需增加推理时的检索成本。