LLM能否通过"写出更好代码"的迭代提示生成更优代码?
2023年11月,当某机构为ChatGPT添加DALL-E 3图像生成功能后,用户开始流行给模型一个基础图像并不断要求"让它更X"的玩法。虽然这个趋势很快消失,但它引发了一个思考:如果将类似技术应用于代码生成会怎样?
实验设计
使用Claude 3.5 Sonnet模型进行测试,初始提示要求编写Python代码解决以下问题: “给定100万个1到100,000之间的随机整数,找出各位数字之和为30的最小和最大数之差”
初始实现
|
|
基准性能:657毫秒/次
迭代优化过程
第一次优化
- 改用整数运算计算数字和
- 预计算所有可能数字的数字和并存储为查找表 优化效果:2.7倍加速
第二次优化
- 添加多线程处理
- 使用numpy向量化操作 优化效果:5.1倍加速
第四次优化
- 引入numba JIT编译器
- 使用asyncio进行并行化 优化效果:100倍加速
工程化提示实验
使用系统提示明确优化要求:
|
|
初始实现即达到59倍加速,最终通过哈希表预计算等优化实现95-100倍加速。
关键发现
- 单纯重复"写出更好代码"确实能逐步优化代码,但可能引入不必要复杂性
- 精心设计的工程化提示能更快获得高质量优化结果
- LLM会提出创新优化思路(如numba),但需要人工验证正确性
- 最佳实现结合了JIT编译、向量化操作和算法优化
局限性
- Python本身性能限制
- LLM可能忽略统计优化机会(如去重)
- 复杂优化可能引入隐蔽错误
实验证明迭代提示能有效优化代码性能,但需要结合人工审核和明确的需求指导。完整代码和测试数据已开源。