实战案例 - 谷歌Deepmind科学家分享自己是如何使用AI来提效50%!

编者按:一位来自谷歌DeepMind的科学家 Nicholas Carlini最近写了一篇万字长文,分享了50个自己和AI/大模型对话的实战案例,可以总结为“辅助学习”和“自动化日常琐事”两大类别。生动地显示了自己作为一个程序员和机器学习研究科学家,日常是如何通过使用AI来提升在研究和编程工作中的效率的。我将全文进行了总结和缩写,也在最后提供了原文链接供参考。

原文链接:https://nicholas.carlini.com/writing/2024/how-i-use-ai.html

-————————————————————————————————-
作为一名长期从事安全研究和机器学习的程序员,我曾经对新技术持怀疑态度。但是,过去一年的经历彻底改变了我的看法。今天,我要和大家分享我是如何利用大语言模型(LLMs)显著提升工作效率的。

从怀疑到惊叹:一个顽固分子的转变

坦白说,我不是那种轻易相信新事物的人。作为一名安全研究员,我的工作就是揭露AI系统的漏洞。我甚至从未写过关于区块链的论文,也没有购买过比特币。每当有人宣称”某项新技术将改变世界”时,我总是持怀疑态度。

然而,就是这样一个”常年与AI作对”的人,在亲身体验了LLMs后,不得不承认它们的强大实用价值。我发现,使用LLMs让我的编程速度提高了至少50%,无论是在研究项目还是个人编程副业中。

LLMs如何成为我的得力助手?

在过去的一年里,我几乎每周都要花几个小时与各种大型语言模型交互。它们在解决越来越复杂的任务时的能力让我印象深刻。以下是LLMs如何帮助我的一些具体例子:

1. 构建完整应用

去年,我创建了一个测验网站,用于评估GPT-4在特定任务上的表现。这个网站获得了超过一千万的页面浏览量。令人惊讶的是,我几乎是让GPT-4为我编写了这个应用的全部初始版本。

整个过程涉及了长达30,000字的对话,从询问应用的基本架构开始,逐步扩展其功能。我会问一些问题,比如如何实现特定功能,或者如何修复某个错误。例如,当我需要改变数据可视化方法时,我会这样问:”不要比较平均分数,而是用核密度估计表示它是哪个百分位”。LLM不仅能理解我的需求,还能提供相应的代码实现。

这个项目的成功让我意识到,LLMs不仅可以处理小片段的代码,还能协助完成整个应用的开发过程。

2. 代码优化与转换

在一个项目中,我需要提升Python代码的性能。我直接让LLM将代码重写为C语言,然后构建一个接口,使我能从Python调用C代码。具体来说,我是这样做的:

  1. 首先,我将Python代码粘贴给LLM,要求它将代码转换为C语言。
  2. 然后,我要求LLM创建一个Python到C的接口。
  3. 最后,我让LLM解释如何编译和链接这些代码。

这个过程不仅节省了我大量的时间,还大大提高了代码的运行效率。通常情况下,这种优化可能需要我花费几个小时,但使用LLM,我只用了几分钟就完成了。

3. 处理单调任务

最近,我需要反编译一个用Python 3.9编写的程序。大多数Python反编译器只支持到3.7版本,这给我带来了挑战。于是,我决定让LLM帮我完成这个任务。

我将字节码粘贴给LLM,要求它将其转换为可读的Python代码。令我惊讶的是,LLM不仅完成了任务,而且效果远超我的预期。它能够准确地恢复控制流程,甚至在某些情况下推断出原始的变量名。

这种方式让我能够专注于更有创造性的工作,而不是被繁琐的任务所困扰。它也让我意识到,LLMs在处理那些看似简单但耗时的任务时特别有价值。

4. 作为技术导师

当我需要学习新的框架或工具时,比如Docker、Flexbox或React,我会直接向LLM请教。它能根据我的具体需求,以对话的方式为我解释这些技术。

例如,当我需要在一个受限环境中运行LLM生成的代码时,我决定使用Docker。但我之前从未使用过Docker。我是这样和LLM互动的:

  1. 首先,我询问了Docker的基本概念和用途。
  2. 然后,我要求LLM指导我如何安装Docker并创建一个基本的容器。
  3. 最后,我询问如何在Docker容器中安全地运行不可信代码。

这种交互式学习方式比静态的教程更加高效和个性化。它让我能够快速上手新技术,而不需要花费大量时间阅读文档或观看视频教程。

5. 解决一次性任务

有时,我需要编写一些只使用一次的程序,比如数据可视化或文件格式转换。在这些情况下,我会直接让LLM为我编写代码。

例如,我最近需要将一些PNG图像转换为可3D打印的STL文件。这不是我的主要工作,只是一个临时需求。我向LLM描述了我的需求,它为我生成了一个Python脚本,使用适当的库来完成这个转换任务。

这不仅节省了时间,还让我能够专注于更重要的任务。更重要的是,它让我能够尝试一些我可能因为时间限制而放弃的有趣项目。

6. API文档查询和智能搜索

LLMs在回答特定的编程问题和查找难以检索的信息方面非常出色。例如,当我需要了解某个不常用的bash命令、LaTeX命令或者特定的API用法时,我会直接询问LLM。

这比传统的搜索引擎更有效,因为LLM可以理解上下文,并提供更精确的答案。它就像一个随时待命的专家,可以立即回答我的问题,而不需要我在大量的搜索结果中筛选信息。

7. 调试和错误修复

我甚至在我的代码编辑器中实现了一个自动化流程:每当我运行一个程序并且它以非零状态码结束(意味着有错误发生)时,它会自动调用最新最快的LLM,要求它解释答案,并请求一个可以直接应用来修复代码中bug的补丁。

虽然目前的模型还不能在每次都胜过我,但它们正在逐渐进步。有时,LLM能够快速识别并修复一些可能需要我花费大量时间才能找到的小错误,这让我感到非常惊喜。

为什么LLMs如此有用?

你可能会说:”这些任务很简单!任何计算机科学的本科生都能做到!”没错,但关键在于效率和便利性。我没有一个随时待命的本科生助手,但我有LLMs。它们能在几秒钟内完成那些可能需要几小时搜索或学习才能解决的问题。

更重要的是,LLMs让我能够尝试一些我原本可能不会去做的项目。它们降低了技术门槛,让复杂的编程任务变得更加平易近人。

结语:拥抱AI,但保持理性

我完全理解LLMs可能带来的潜在风险和伦理问题。但不可否认的是,当前的LLMs已经成为程序员的强大工具,为我们的工作方式带来了革命性的变化。

五年前,LLMs最多只能写出看起来像英语的段落。而今天,它们已经能够显著提高我的工作效率,消除了大量繁琐的工作。

所以,当有人说”LLMs只是炒作”或”LLMs没有为任何人提供实际价值”时,我可以自信地说,这种说法是错误的。至少对我来说,LLMs提供了巨大的价值。

作为一个在使用LLM之前已经有20年编程经验的人,我相信还有许多其他人也能从使用AI中受益。