17611538698
webmaster@21cto.com

迎接 AI 编码的新时代

人工智能 0 36 2024-10-04 09:06:40

图片

导读:使用大语言模型 (LLM) ,或将永远改变软件工程师编写代码的方式。

上周末,我使用Cursor(https://www.cursor.com/,一款基于 LLM 的 IDE)创建了一个业余软件项目。我自己没有写过一行代码(我没有得到任何赞助)。

这个项目只花了我周末的时间,如果没用到大语言模型,至少要花一周的时间。

尽管这个 LLM 并不怎么完美(我稍后还会解释它们在哪些方面不好用),但它们可以很好地完成编程中让人不满意的,还有重复的部分。

新的编码行为


当你用一个命令就能编写完整功能的代码时,会发生一件有趣的事情。丢弃代码并使用经过调整的提示重试会变得更加高效。


调试坏的代码比提示工程可是要慢得多。


图片


典型的开发流程:丢弃更改,直到成功为止

这种操作有利有弊。我做事的速度更快,但对代码的理解也更少得多。这让我感觉头疼,因为我接受的代码在孤岛中是有意义的,但在缩小范围后就变得有点滑稽。

例如,我曾经有两个针对同一概念但相互竞争的数据模型。如果我自己编写代码,我就可以避免这种明显的设计错误。

此外,LLM 让你使用打印语句调试比使用调试器更加好用。我以前更喜欢调试器,因为它们可以更快地检查任意程序状态。但是现在,我们不再需要手动输入打印语句。

现在 LLM 可以让你通过一个轻松地提示词,在任何地方注入高质量的打印语句。这可以帮助你更快地运行和检查程序。完成后,你可以同样轻松地清理所有打印语句。

再见!Google


大多数情况下,LLM 的回复都比 Google 的质量要好。它们会给出更有针对性的答案,因此你不需要再阅读教程或 Stack Overflow 搜索答案。只有少数几次,我仍然需要 Google。

下面是两个真实例子:

  • 有价值答案- 我希望我的 Chrome 扩展程序能够在不更改其 DOM 的情况下覆盖当前页面。LLM 一直给我明显的答案,即向 DOM 中注入组件。但 Google 为我提供了一个更好的答案,满足了我的要求。

  • 奇怪的错误- 如果你创建 OpenAI API 密钥,但没有注册信用卡,API 将失败并显示 429 响应代码(请求过多)。LLM 一直为我提供缓存和速率限制代码的解决方案,这很有意义但没有实质作用。我用 Google搜索直接显示这是因为没有信用卡存档。


了解你的大语言模型 (LLM)


图片

你需要知道如何查询 LLM 才能充分利用它们。经过一两天的尝试,你就会知道什么可行,什么不可行。


以下是我在编码经验中的几个例子:


  • 擅长:

    • 细微而集中的变化- 如果是小型算法,无论算法多么复杂,几乎都是完美的。

    • 基本 UI - 非常感谢。我的业余项目看起来界面不错,我不需要调整太多 CSS。

    • 转译- 开始这个项目几个小时后,我意识到需要强类型。我只用了一两分钟就将所有原生 Javascript 转换为 Typescript。

  • 不擅长:

    • 代码之外的变化- 在设置我的环境或保证我的项目目录中的引用时它是不可靠的。

    • 开放式功能- 功能越模糊,提示语越有可能失败。功能越大,我需要给出具体的项目说明。


我默认选择的 LLM 是“claude-3.5-sonnet”。它运行速度快,大多数时候都能正常工作。

当 Claude 遇到问题时,我会尝试所知晓的最强大模型(比如OpenAI 的 O1 模型)。在许多情况下,这种方法是可行的,尽管它很慢(需要几分钟)并且也很昂贵(每个请求 0.40 美元)。

如果失败了,那么我会将功能分解为范围明确的任务。

图片


从上面的图中,你应该会看到我周末用了 373 次“Claude-3.5”和 46 次“O1-preview”。


希望有一天 LLM 工具能够根据任务难度自动选择模型。在还没有到达之前,最好手动了解每个模型可以做些什么,然后可以来平衡质量和成本。


现在最重要的是什么


尽管基于 LLM 的开发速度更快,但是我们仍然需要克服许多限制。有助于解决这些限制的技能包括:

  1. 高级规划和设计- 对于 LLM 来说,细节和范围明确的算法更改很容易。规划功能路线图和技术架构设计更为重要,因为 LLM 在这方面做得还不够好。

  2. 调试- 有时我可以将错误转储到 LLM 中,它就会帮我找出问题所在。但很多时候,即使是明显的错误(例如删除了关键代码或更改了函数名称),它也会遇到麻烦。


此外,我当时正在开发一个简单的全栈应用程序。LLM 训练数据中有很多在线示例,全栈样板代码也没有歧义。

对于行业中许多领域的尖端专有代码来说,这种做法的效果显然要逊色得多。

基于 LLM 的代码生成是一种功能强大的工具,它可以取代编写简单、范围明确的代码。这并不意味着人工智能正在抢走开发者们的工作。

也可以尝试一下,你会发现它还远远没有达到这个目标。

我乐观地认为这些编码工具定会改善我们的生活,用英语编程的感觉会很棒。我可以用更少的时间和精力来表达自己。

这让我想起了职业生涯发展过程中感受到的满足感。做高杠杆的工作比处理编译器错误,还有缺少分号等令人沮丧的实现细节要有意思得多。

它让我们可以自由地做有趣、有创意的工作。如果你也喜欢这篇文章,可以考虑与朋友分享、点赞、在看哦!~

作者:聆听音乐的鱼

评论