通过迭代提示优化LLM生成代码性能的实验

本文通过实验验证了持续要求LLM"写出更好代码"是否能提升代码质量,对比了随意提示与工程化提示的效果,展示了从基础实现到并行计算、向量化操作、JIT编译等优化手段的演进过程,最终实现100倍性能提升。

LLM能否通过"写出更好代码"的迭代提示生成更优代码?

2023年11月,当某机构为ChatGPT添加DALL-E 3图像生成功能后,用户开始流行给模型一个基础图像并不断要求"让它更X"的玩法。虽然这个趋势很快消失,但它引发了一个思考:如果将类似技术应用于代码生成会怎样?

实验设计

使用Claude 3.5 Sonnet模型进行测试,初始提示要求编写Python代码解决以下问题: “给定100万个1到100,000之间的随机整数,找出各位数字之和为30的最小和最大数之差”

初始实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import random

def digit_sum(n):
    return sum(int(digit) for digit in str(n))

def find_difference():
    numbers = [random.randint(1, 100000) for _ in range(1000000)]
    min_num = float('inf')
    max_num = float('-inf')
    
    for num in numbers:
        if digit_sum(num) == 30:
            min_num = min(min_num, num)
            max_num = max(max_num, num)
    
    return max_num - min_num if max_num != float('-inf') else 0

基准性能:657毫秒/次

迭代优化过程

第一次优化

  • 改用整数运算计算数字和
  • 预计算所有可能数字的数字和并存储为查找表 优化效果:2.7倍加速

第二次优化

  • 添加多线程处理
  • 使用numpy向量化操作 优化效果:5.1倍加速

第四次优化

  • 引入numba JIT编译器
  • 使用asyncio进行并行化 优化效果:100倍加速

工程化提示实验

使用系统提示明确优化要求:

1
2
3
4
5
所有代码必须完全优化,包括:
- 算法复杂度优化
- 适当使用并行化和向量化
- 遵循代码风格规范
- 不包含多余代码

初始实现即达到59倍加速,最终通过哈希表预计算等优化实现95-100倍加速。

关键发现

  1. 单纯重复"写出更好代码"确实能逐步优化代码,但可能引入不必要复杂性
  2. 精心设计的工程化提示能更快获得高质量优化结果
  3. LLM会提出创新优化思路(如numba),但需要人工验证正确性
  4. 最佳实现结合了JIT编译、向量化操作和算法优化

局限性

  1. Python本身性能限制
  2. LLM可能忽略统计优化机会(如去重)
  3. 复杂优化可能引入隐蔽错误

实验证明迭代提示能有效优化代码性能,但需要结合人工审核和明确的需求指导。完整代码和测试数据已开源。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计