我如何使用LLM编程

主要观点

本文总结了作者在过去一年中使用生成式模型(如LLMs)进行编程的个人经验。作者认为,尽管LLMs有时会出错,但它们在提高编程效率方面具有显著的正面影响。作者特别强调了在编程中使用LLMs的三种方式:自动补全、搜索和聊天驱动编程。此外,作者还介绍了他们正在开发的针对Go编程的工具sketch.dev,旨在自动化这些过程。

背景

作者对新技术的探索充满兴趣,尤其是LLMs这种能够生成复杂回应的技术。作者将LLMs的出现与1995年互联网的普及相提并论,认为LLMs的潜力同样巨大。通过不断实验,作者发现LLMs在编程中能够提供实际的价值,尽管这一过程并不容易。

使用LLMs的三种方式

  1. 自动补全:LLMs能够帮助完成大量的常规打字工作,显著提高编程效率。作者发现,即使现有的自动补全工具并不完美,它们仍然比不使用任何工具要好得多。
  2. 搜索:在处理复杂环境时,LLMs能够提供比传统搜索引擎更准确的答案。尽管LLMs有时会出错,但它们的回答通常比通过搜索引擎找到的结果更有帮助。
  3. 聊天驱动编程:这是最复杂但也最有价值的使用方式。通过聊天与LLMs交互,作者能够获得代码的初稿,尽管这些初稿可能存在错误,但修复这些错误通常比从头开始编写代码更容易。

为什么使用聊天驱动编程?

聊天驱动编程特别适合那些需要频繁切换编程环境或语言的开发者。作者提到,LLMs能够帮助他们快速生成代码初稿,尤其是在他们知道需要编写什么但缺乏精力去手动实现的情况下。LLMs能够提供代码的初稿和所需的依赖项,尽管这些初稿可能需要进一步修改。

LLMs在处理“考试式”问题时表现最佳

LLMs在处理明确的目标和背景材料时表现最好。作者建议避免让LLMs处理过于复杂和模糊的任务,因为这可能导致它们产生错误的结果。此外,作者强调,程序员在使用LLMs生成的代码时,应该先通过编译器和测试来验证代码的正确性。

代码结构的优化

LLMs的使用使得代码结构的优化变得更加容易。作者提到,随着LLMs在处理“考试式”问题时的表现越来越好,将代码分解为更小、更独立的包变得更加有利。这不仅有助于LLMs的工作,也使得代码更易于阅读和维护。

示例:编写一个浮点数四分位数的水库采样器

作者通过一个具体的示例展示了如何使用LLMs生成代码。首先,作者决定将算法放在一个独立的包中,而不是与其他算法混在一起。然后,作者通过LLMs生成了代码的初稿,尽管初稿中存在一些小错误,但通过简单的修改,代码最终能够正常工作。作者还展示了如何通过LLMs生成更复杂的测试代码,并最终生成了一个模糊测试(fuzz test)。

未来展望:更好的测试和更少的DRY原则

作者预测,随着LLMs的普及,未来的代码将更加专注于特定任务,而不是过度抽象和重用。LLMs能够帮助开发者编写更全面的测试代码,这将使得代码更加可靠。此外,作者认为,未来将会有更多的专用代码和更少的通用包,这将有助于提高代码的可读性和可维护性。

自动化这些观察:sketch.dev

作者正在开发的sketch.dev工具旨在为Go编程提供一个专门的环境,帮助开发者更有效地使用LLMs。该工具的目标是自动化代码生成、编译和测试的过程,使得LLMs能够更高效地工作。作者认为,专注于特定编程环境的工具将比通用的工具更加有效。

总结

作者通过一年的实践,发现LLMs在编程中具有显著的正面影响,尤其是在自动补全、搜索和聊天驱动编程方面。尽管LLMs有时会出错,但它们的帮助使得编程效率大幅提升。作者正在开发的sketch.dev工具旨在进一步自动化这些过程,帮助开发者更高效地使用LLMs。

阅读 8
0 条评论