新闻 发表于 2025-6-16 21:27

AI竟会看Prompt下菜!Vibe coding普通人vs程序员,剑桥最新报告

作者:微信文章
您有没有发现一个奇怪的现象:同样是Vibe coding,有些人轻松拿到完整的Flask应用,有些人却只得到几行if-else语句?剑桥大学计算机科学与技术系的研究者们最近发布了一项研究,用科学的方法证实了我们的直觉——AI确实会"看人下菜碟"。他们设计了两套完整的评估体系:第一套是"合成评估管道",通过人工制造各种提示变化来测试AI的敏感性;第二套是"角色评估",让AI扮演不同背景的用户来生成提示,然后观察代码质量差异。研究覆盖了GPT-4o mini、Claude 3 Haiku、Gemini 2.0 Flash、Llama 3.3 70B四个主流模型,结果证实AI真的能从您的提示方式中"读出"技术水平,然后见Prompt下代码。




合成评估:三种"折磨"AI的方式

研究者们设计了三种方法来"折磨"提示,看看AI的反应有多敏感。让我们用一个具体例子来看看这些方法有多"残忍":
1. 键盘打字错误

最狠的一招,基于QWERTY键盘距离随机替换字符,模拟真实的打字失误

原始提示:"Write a Python function to calculate factorial"
变换后:"Wrtie a Pytjon functuon to calculsre factorual"

看起来像是在手机上匆忙打字时的惨状,但AI能理解吗?
2. 同义词替换

使用WordNet数据库,把词汇换成意思相近的其他词

原始提示:"Create a simple web application"
变换后:"Build a basic internet program"

意思完全一样,但表达方式完全不同
3. 释义重述

让另一个AI重新表述原始提示,保持语义但改变表达方式

原始提示:"Implement a sorting algorithm"
变换后:"Could you help me develop a method that arranges data elements in a specific order?"

从简洁的技术指令变成了礼貌的求助请求

评估指标:使用TSED(树相似性编辑距离),这比传统的BLEU或BERT分数更适合评估代码相似性,能准确反映语法树结构的差异。



释义方法的有效性验证
生成的释义在保持高语义相似性(BERT Score 0.95-1.0)的同时实现了文本多样性(Sacre BLEU 0-1.0),证明了释义方法的有效性
四个角色的"社会实验"

更有趣的是角色评估部分,研究者们创造了四个典型用户:
角色背景特点典型表达方式初级工程师计算机科学专业,有实习经验关注实现细节和测试首席工程师经验丰富的行业专家强调"云部署"和"可扩展性"天体物理学家用Python做研究的科学家重视"数据处理效率"和"科学计算精度"英语教师从未编程的普通用户"您能帮我做个模拟计算器的程序吗?"
让AI分别扮演这些角色来描述同一个编程任务,比如"写代码做个计算器",然后观察生成的提示和最终代码有什么区别。

结果显示:不同角色的表达方式差异巨大,最终获得的代码质量也天差地别。
实验结果:数据不会撒谎

数据揭示了一些意想不到的规律:
🔥 键盘错误 = 致命打击


代码相似性在错误率0.0到0.6之间急剧下降
最终稳定在0.3左右的TSED值
意味着生成的代码与原版有根本性差异



键盘错误 vs 同义词替换的影响对比
所有模型对键盘错误(左图)都极其敏感,代码相似性急剧下降;但对同义词替换(右图)相对鲁棒,Gemini 2.0 Flash表现最稳定
✅ 同义词和释义 = 相对温和


大多数模型能保持0.5以上的相似性

Gemini 2.0 Flash表现最稳定



释义增强的温和影响
释义增强实验显示与同义词类似的趋势——初始显著下降后缓慢递减,证明语义保持的提示变化对AI影响相对温和
角色差异:技术背景决定代码质量

角色评估的结果更加戏剧化:
代码质量阶梯效应

角色获得的代码类型特点首席工程师完整Flask应用包含数据库设计和部署考虑初级工程师结构化类和测试注重实现细节和代码规范天体物理学家科学计算代码重视数值精度,缺乏工程考虑英语教师操作说明有时根本得不到代码天体物理学家的独特案例

这个角色特别有意思——他虽然不是专业开发者,但因为科研需要会用Python处理数据:

提示特点:明确指定编程语言和数据处理需求

典型表达:"用Python实现,需要处理大型数值数组"

代码特征:注重科学计算的准确性和数据处理效率

缺陷:缺乏软件工程的系统性考虑
语言学验证


研究者们用语言学分析框架证实了这些差异的客观存在:技术背景越强的角色,生成的提示在词汇选择、句式结构上都更接近专业开发者的表达习惯。



四个角色的语言使用模式可视化
通过LDA主题建模分析四个角色的语言使用模式。连线粗细表示共同实体数量,右侧地图显示了不同概念的实体分布。有趣的是,天体物理学家(Ethan)与两位软件工程师有一定共同语言,但明显少于工程师之间的联系,而与英语教师(Harold)的差异最大
有趣的点:天体物理学家的中间地带

天体物理学家角色在实验中展现了一个有趣的中间地带:
语言特征

✅ 比英语教师专业:使用"数值计算"、"数据分析"、"算法效率"等术语❌ 不如软件工程师系统:缺少"架构设计"或"用户体验"考虑
实际案例

计算器任务中的表达:

"需要一个支持高精度浮点运算的计算工具,能处理科学记数法"

最终代码特点:
✅ 包含NumPy库的使用和数值稳定性考虑❌ 缺少错误处理和用户界面设计
现实意义

这种"有编程经验但非专业开发者"的角色,在现实中其实很常见——很多科研人员、数据分析师都属于这个类别。
对Vibe Coding用户的实战启示

这个发现对您日常使用Cursor、Windsurf或Trae编程有什么启发呢?
💡 核心洞察

原来我们和AI的"化学反应"差异这么大!如果您经常觉得别人用同样的工具能生成更优雅的代码,现在知道原因了——可能不是工具的问题,而是提示的"段位"不同。
🚀 立即可用的升级策略

1. 语言专业化


❌ 避免:"帮我写个程序"

✅ 改为:"实现一个RESTful API,包含用户认证和数据验证"
2. 明确技术要求


指定架构模式:"使用MVC架构"

声明性能需求:"支持并发处理"

提及部署考虑:"容器化部署"
3. 多版本对比法

尝试多种表述方式,然后选择最佳结果:
版本A:从功能角度描述版本B:从技术实现角度描述版本C:从系统架构角度描述
🎯 关键原则


AI会根据您的提示风格来判断该给出什么级别的代码——既然知道了这个"潜规则",为什么不好好利用呢?
数据污染:训练数据的"后门"

研究还意外发现了一个重要问题:数据污染比我们想象的更严重。LeetCode经典题目在所有模型上都表现出异常的稳定性,即使提示词写的很烂,这说明这些题目已经被"背"下来了。这对基准测试的有效性提出了质疑。

什么是LeetCode?
LeetCode是全球最知名的编程刷题网站,包含数千道算法和数据结构题目,是程序员面试必备的练习平台。由于这些题目在网上流传极广,很可能被包含在AI模型的训练数据中。


研究者的应对方案

研究者专门创建了22个原创编程任务,涵盖模拟、算法、数据科学等多个领域,这些任务更能反映真实的敏感性。



数据污染现象的直观证据
数据污染现象一目了然——LeetCode老题目(最上方)即使提示严重破坏也保持高相似性,而原创数据集(最下方)在仅10%提示修改后就急剧下降
技术实现细节:可复现的评估框架

从技术角度看,这套评估框架的设计相当精巧。合成评估管道完全模块化,增强函数和距离函数都可以独立替换,支持任何LLM和编程语言;角色评估使用了LDA主题建模和可视化分析,能够量化不同角色在语言使用上的差异。所有实验都设置了温度为0,每个条件重复5次取平均值,确保结果的可靠性。研究代码已经开源https://anonymous.4open.science/r/code-gen-sensitivity-0D19/README.md
写在最后

感谢阅读!如果这篇文章对您有帮助或启发,请给修猫点一个赞和在看!或者点下广告也行!

未来已来,有缘一起同行

https://mmbiz.qpic.cn/mmbiz_png/Iurk1iaf4xdGHyHlz9WiaNwicclCSXI7FF5StJIP0L14YXmGmZq2mP13QsslHYBSPVSEtvtibCu1SkcXu8gHJyA9Ng/640?wx_fmt=png&watermark=1&wxfrom=5&wx_lazy=1&tp=webp

<本文完结,作者:修猫>
转载与我联系

🎉让我们一起创造更多美好!🎉

如果您觉得这篇文章对您有帮助

感谢您为我【点赞】、【在看】

<您为我点赞在看,只有我能看到>

👉微信号:xiumaoprompt

添加请注明来意!
页: [1]
查看完整版本: AI竟会看Prompt下菜!Vibe coding普通人vs程序员,剑桥最新报告