代码生成「神⋅提示」,比新手程序员快100倍!地位堪比makeitmoreX

OpenCV学堂 2025-01-21 21:45



点击上方↑↑↑OpenCV学堂”关注我

来源:公众号 新智元 授权

【导读】不断迭代简单的提示词「write better code」,代码生成任务直接提速100倍!不过「性能」并不是「better」的唯一标准,还需要辅助适当的提示工程,也是人类程序员的核心价值所在。
2023年11月,在ChatGPT支持DALL-3功能后,一个爆火的图像生成玩法是,不断迭代提示词「make it more X」,生成的图片越来越抽象。

圣诞老人越来越严肃
把这个思路用在LLM任务上,比如代码生成,会怎么样?
最近,BuzzFeed的高级数据科学家Max Woolf在博客上分享了一个实验,通过设计不同的提示词、不断迭代模型输出,最终实现代码性能的100倍提升!

完整代码链接:https://github.com/minimaxir/llm-write-better-code/
特别需要注意的是,「性能」并不是唯一优化指标,迭代过程中需要在提示词中明确定义什么是「好」。

代码基线

设计实验题目时,为了充分测试LLM的自主代码能力,必须保证「测试提示词」完全原创,不能源于LeetCode或HackerRank等测试,模型无法通过背诵记忆来作弊;测试题目要尽可能简单,新手也能实现,但还要预留大量可优化空间。

最终选择Claude 3.5 Sonnet模型,设计了一个Python语言、面试风格的编码提示词:

Write Python code to solve this problem: Given a list of 1 million random integers between 1 and 100,000, find the difference between the smallest and the largest numbers whose digits sum up to 30.

用Python实现:假设有一个包含100万个随机整数的列表,介于1到10万之间,你需要找出其中各位数字之和等于30的最小数和最大数之间的差值。
第一次给出的代码实现就是正确的,与大多数新手Python程序员的水平相当:对于列表中的每个数字,检查其各位数字之和是否为30:如果是,检查是否大于最近看到的最大数字或小于最近看到的最大数字,并相应地更新这些变量;在搜索完列表之后,返回差值。
一个明显可优化的点是digit_sum()函数:字符串(str)和整数(int)之间进行类型转换的开销很大。
在M3 Pro Macbook Pro上,代码的平均运行时间为657毫秒。

第一次Write better code

Claude提供的代码优化版本,不再将所有代码放在函数中,而是将其重构为 Python class,更面向对象。

这段代码主要进行了两处改进:
  1. 计算数字和时,使用整数运算并避免了类型转换需求;

  2. 预先计算所有可能的数字和,并将其存储在字节数组中以供查找,即一百万数字列表中有重复时,不需要重新计算数字和。由于该数组作为类的字段存储,因此在搜索新的随机数字列表时也不需要重新计算。

代码计算相比基线提速2.7倍。

第二次Write better code

Claude对代码增加了并行处理:

  1. 通过Python的concurrent-futures包进行多线程,将大列表分割成可以独立处理的块;

  2. 矢量化NumPy操作,比基础Python操作快得多,_precompute_digit_sums()函数实现了计算数字和的矢量化实现;

代码计算相比基线提速5.1倍。

第三次Write better code

Claude返回了一个声称是“使用高级技术和现代 Python 特性的更加复杂和优化的版本”的实现,但实际上代码并没有显示出显著的算法改进,并且在数字求和计算上实际上退步了,回归到类型转换方法。如果有什么的话,代码库正在变得更加臃肿,比如添加一个用于执行差的类:

代码计算性能略有下降,相比基线提速4.1倍。

第四次Write better code

Claude这次提供了额外的「尖端、企业级优化」,比如结构化指标日志记录Prometheus;信号处理程序,以便在强制终止时优雅地关闭代码;使用表格的基准测试。

最终代码非常长,优化操作包括numba Python库,调用JIT编译器,直接优化代码以适应CPU,只需使用一个装饰器就可以非常快速地预计算数字之和。
完整类还使用Python的asyncio行化,比子进程方法更符合调度任务的规范,与现有的内联代码和REPL配合得更好。
这次代码的运行时间大约为6毫秒,速度提升了100倍。

什么是好?

「速度快」并不代表是「好代码」,比如用户可能只是想在算法上改进,而不是一个完整的SaaS,过于冗长的代码在阅读上还会带来额外负担。

所以需要更具体地定义什么是「代码优化」。

你编写的所有代码都必须充分优化。「充分优化」的含义包括:

  • 尽可能提高算法在内存使用和运行时间上的效率;

  • 在合适的时机使用并行化和向量化;

  • 遵守代码语言的正确风格规范,比如尽量重用代码,避免重复劳动;

  • 除了解决用户提出的问题所必需的代码外,不添加任何多余的代码;

如果代码没有达到充分优化的标准,罚款100美元。

先规划一下优化方案:

  1. 算法优化:只需要追踪各位数字之和等于30的最小数和最大数,不需要存储所有这样的数;可以在读取数字的同时计算各位数字之和,无需将数字转换为字符串;只需要对列表进行一次遍历,时间复杂度为O(n)。

  2. 内存优化:只需要存储两个变量(最小值和最大值),不需要存储完整的筛选后的列表;不需要额外的数据结构。

  3. 性能优化:使用numba的@jit装饰器来加快计算速度;使用取模运算而不是字符串转换来各位数字之和;使用numpy来生成随机数(比random.randint更快)。

基线模型

利用提示工程,Claude直接就能意识到用numpy和numba来计算数字和,代码平均运行时间为11.2毫秒,比原始实现快59倍。
第一次迭代
这次不用「write code better」,而是改成更完善的提示词「Your code is not fully optimized, and you have been fined $100. Make it more optimized.」来迭代优化代码。
模型成功识别了parallel=True;数字求和操作使用位移动,但实现是错的。
代码优化还包括多进程分块方法,与numba实现冗余,并产生了额外的开销;脚本还使用一个小测试数组预编译了JIT函数,也是numba文档推荐的基准测试方法。
但整体性能相比提示工程后的基线大幅下降,仅比朴素版快9.1倍。

第二次迭代

Claude使用SIMD操作和块大小调整以实现「理论上」极致的性能,不过在位移动的实现上仍然不正确,错把十进制当成十六进制,算是一个幻觉。
与最初的提示工程极限相比,性能有轻微的改进,比基础实现快65倍。

第三次迭代

LLM放弃了有问题的分块策略,并增加了两个优化:全局HASH_TABLE和逻辑微优化,即在求和数字之后,如果数字超过30,计数可以停止,可以立即识别为无效。
经过微小的代码重构后,该代码的运行速度比原始基线的实现快100倍,与普通提示的四次迭代性能相同,但代码量少很多。

第四次迭代

Claude开始抱怨说该代码已经是「这个问题的理论最小时间复杂度」,要求修复代码问题后,性能略有下降,为基础基线的95倍。

下一步,优化LLM代码生成

总的来说,要求LLM「编写更好的代码」(write better code)确实可以使代码变得更好,但具体取决于你对「更好」的定义,可以不断迭代以实现更好的性能,具体效果因提示词不同而异,而且最终生成的代码不是直接可用的,还需要人工干预解决部分bug
虽然LLM的优化能力很强,但想取代程序员仍然很难,需要强大的工程背景来判断什么是真正的「好代码」;即使github等仓库里有海量的代码,但大模型并没有能力区分普通代码、优雅且高性能的代码。
现实世界的系统显然也比面试题要复杂很多,但如果只是迭代要求大模型,就能实现100倍的提速,那就相当值得。
有些人的观点是,过早进行代码优化在实践中并不是一个好的选择,但随时优化代码总比「技术负债」越拉越多要好。
实验设计上还有一个问题,Python并不是开发者在优化性能时首先考虑的编程语言,虽然numpy和numba库可以利用C来绕过Python的性能限制,但一种更流行的方式是利用polars和pydantic库,结合Rust编程,相对于C有很多性能优势。
除了「好」以外,也可以要求模型生成代码「make it more bro」(更酷),结果也非常有趣。
参考资料:
https://the-decoder.com/repeated-write-better-code-prompts-can-make-ai-generated-code-100x-faster/

OpenCV4系统化学习


推荐阅读

OpenCV4.8+YOLOv8对象检测C++推理演示

ZXING+OpenCV打造开源条码检测应用

攻略 | 学习深度学习只需要三个月的好方法

三行代码实现 TensorRT8.6 C++ 深度学习模型部署

实战 | YOLOv8+OpenCV 实现DM码定位检测与解析

对象检测边界框损失 – 从IOU到ProbIOU

初学者必看 | 学习深度学习的五个误区


OpenCV学堂 专注计算机视觉开发技术分享,技术框架使用,包括OpenCV,Tensorflow,Pytorch教程与案例,相关算法详解,最新CV方向论文,硬核代码干货与代码案例详解!作者在CV工程化方面深度耕耘15年,感谢您的关注!
评论 (0)
  • 在CAN总线分析软件领域,当CANoe不再是唯一选择时,虹科PCAN-Explorer 6软件成为了一个有竞争力的解决方案。在现代工业控制和汽车领域,CAN总线分析软件的重要性不言而喻。随着技术的进步和市场需求的多样化,单一的解决方案已无法满足所有用户的需求。正是在这样的背景下,虹科PCAN-Explorer 6软件以其独特的模块化设计和灵活的功能扩展,为CAN总线分析领域带来了新的选择和可能性。本文将深入探讨虹科PCAN-Explorer 6软件如何以其创新的模块化插件策略,提供定制化的功能选
    虹科汽车智能互联 2025-04-28 16:00 224浏览
  • 网约车,真的“饱和”了?近日,网约车市场的 “饱和” 话题再度引发热议。多地陆续发布网约车风险预警,提醒从业者谨慎入局,这背后究竟隐藏着怎样的市场现状呢?从数据来看,网约车市场的“过剩”现象已愈发明显。以东莞为例,截至2024年12月底,全市网约车数量超过5.77万辆,考取网约车驾驶员证的人数更是超过13.48万人。随着司机数量的不断攀升,订单量却未能同步增长,导致单车日均接单量和营收双双下降。2024年下半年,东莞网约出租车单车日均订单量约10.5单,而单车日均营收也不容乐
    用户1742991715177 2025-04-29 18:28 272浏览
  • 浪潮之上:智能时代的觉醒    近日参加了一场课题的答辩,这是医疗人工智能揭榜挂帅的国家项目的地区考场,参与者众多,围绕着医疗健康的主题,八仙过海各显神通,百花齐放。   中国大地正在发生着激动人心的场景:深圳前海深港人工智能算力中心高速运转的液冷服务器,武汉马路上自动驾驶出租车穿行的智慧道路,机器人参与北京的马拉松竞赛。从中央到地方,人工智能相关政策和消息如雨后春笋般不断出台,数字中国的建设图景正在智能浪潮中徐徐展开,战略布局如同围棋
    广州铁金刚 2025-04-30 15:24 260浏览
  • 一、gao效冷却与控温机制‌1、‌冷媒流动设计‌采用低压液氮(或液氦)通过毛细管路导入蒸发器,蒸汽喷射至样品腔实现快速冷却,冷却效率高(室温至80K约20分钟,至4.2K约30分钟)。通过控温仪动态调节蒸发器加热功率,结合温度传感器(如PT100铂电阻或Cernox磁场不敏感传感器),实现±0.01K的高精度温度稳定性。2、‌宽温区覆盖与扩展性‌标准温区为80K-325K,通过降压选件可将下限延伸至65K(液氮模式)或4K(液氦模式)。可选配475K高温模块,满足材料在ji端温度下的性能测试需求
    锦正茂科技 2025-04-30 13:08 371浏览
  • 文/郭楚妤编辑/cc孙聪颖‍越来越多的企业开始蚕食动力电池市场,行业“去宁王化”态势逐渐明显。随着这种趋势的加强,打开新的市场对于宁德时代而言至关重要。“我们不希望被定义为电池的制造者,而是希望把自己称作新能源产业的开拓者。”4月21日,在宁德时代举行的“超级科技日”发布会上,宁德时代掌门人曾毓群如是说。随着宁德时代核心新品骁遥双核电池的发布,其搭载的“电电增程”技术也走进业界视野。除此之外,经过近3年试水,宁德时代在换电业务上重资加码。曾毓群认为换电是一个重资产、高投入、长周期的产业,涉及的利
    华尔街科技眼 2025-04-28 21:55 197浏览
  • 在智能硬件设备趋向微型化的背景下,语音芯片方案厂商针对小体积设备开发了多款超小型语音芯片方案,其中WTV系列和WT2003H系列凭借其QFN封装设计、高性能与高集成度,成为微型设备语音方案的理想选择。以下从封装特性、功能优势及典型应用场景三个方面进行详细介绍。一、超小体积封装:QFN技术的核心优势WTV系列与WT2003H系列均提供QFN封装(如QFN32,尺寸为4×4mm),这种封装形式具有以下特点:体积紧凑:QFN封装通过减少引脚间距和优化内部结构,显著缩小芯片体积,适用于智能门铃、穿戴设备
    广州唯创电子 2025-04-30 09:02 321浏览
  • 4月22日下午,备受瞩目的飞凌嵌入式「2025嵌入式及边缘AI技术论坛」在深圳深铁皇冠假日酒店盛大举行,此次活动邀请到了200余位嵌入式技术领域的技术专家、企业代表和工程师用户,共享嵌入式及边缘AI技术的盛宴!1、精彩纷呈的展区产品及方案展区是本场活动的第一场重头戏,从硬件产品到软件系统,从企业级应用到高校教学应用,都吸引了现场来宾的驻足观看和交流讨论。全产品矩阵展区展示了飞凌嵌入式丰富的产品线,从嵌入式板卡到工控机,从进口芯片平台到全国产平台,无不体现出飞凌嵌入式在嵌入式主控设备研发设计方面的
    飞凌嵌入式 2025-04-28 14:43 180浏览
  • 文/Leon编辑/cc孙聪颖‍2023年,厨电行业在相对平稳的市场环境中迎来温和复苏,看似为行业增长积蓄势能。带着对市场向好的预期,2024 年初,老板电器副董事长兼总经理任富佳为企业定下双位数增长目标。然而现实与预期相悖,过去一年,这家老牌厨电企业不仅未能达成业绩目标,曾提出的“三年再造一个老板电器”愿景,也因市场下行压力面临落空风险。作为“企二代”管理者,任富佳在掌舵企业穿越市场周期的过程中,正面临着前所未有的挑战。4月29日,老板电器(002508.SZ)发布了2024年年度报告及2025
    华尔街科技眼 2025-04-30 12:40 271浏览
  • 你是不是也有在公共场合被偷看手机或笔电的经验呢?科技时代下,不少现代人的各式机密数据都在手机、平板或是笔电等可携式的3C产品上处理,若是经常性地需要在公共场合使用,不管是工作上的机密文件,或是重要的个人信息等,民众都有防窃防盗意识,为了避免他人窥探内容,都会选择使用「防窥保护贴片」,以防止数据外泄。现今市面上「防窥保护贴」、「防窥片」、「屏幕防窥膜」等产品就是这种目的下产物 (以下简称防窥片)!防窥片功能与常见问题解析首先,防窥片最主要的功能就是用来防止他人窥视屏幕上的隐私信息,它是利用百叶窗的
    百佳泰测试实验室 2025-04-30 13:28 480浏览
  • 贞光科技代理品牌紫光国芯的车规级LPDDR4内存正成为智能驾驶舱的核心选择。在汽车电子国产化浪潮中,其产品以宽温域稳定工作能力、优异电磁兼容性和超长使用寿命赢得市场认可。紫光国芯不仅确保供应链安全可控,还提供专业本地技术支持。面向未来,紫光国芯正研发LPDDR5车规级产品,将以更高带宽、更低功耗支持汽车智能化发展。随着智能网联汽车的迅猛发展,智能驾驶舱作为人机交互的核心载体,对处理器和存储器的性能与可靠性提出了更高要求。在汽车电子国产化浪潮中,贞光科技代理品牌紫光国芯的车规级LPDDR4内存凭借
    贞光科技 2025-04-28 16:52 314浏览
  • 随着电子元器件的快速发展,导致各种常见的贴片电阻元器件也越来越小,给我们分辨也就变得越来越难,下面就由smt贴片加工厂_安徽英特丽就来告诉大家如何分辨的SMT贴片元器件。先来看看贴片电感和贴片电容的区分:(1)看颜色(黑色)——一般黑色都是贴片电感。贴片电容只有勇于精密设备中的贴片钽电容才是黑色的,其他普通贴片电容基本都不是黑色的。(2)看型号标码——贴片电感以L开头,贴片电容以C开头。从外形是圆形初步判断应为电感,测量两端电阻为零点几欧,则为电感。(3)检测——贴片电感一般阻值小,更没有“充放
    贴片加工小安 2025-04-29 14:59 297浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦