译者 | 李睿
审校 | 重楼
生成代码是ChatGPT和其他遵循指令运行的大型语言模型(LLM)一个功能强大的应用。如果得到正确的提示,大型语言模型(LLM)可以生成程序员可能需要数小时才能编写的代码。
然而,大型语言模型(LLM)并不能完成程序员的所有工作。他们无法分解复杂的问题,思考逻辑和结构,也无法创建多层次的解决方案。它们一次处理一个指令,预测可能遵循用户提示和输出的下一段代码。
以下是可以帮助用户充分利用ChatGPT强大的编码能力以及避免进入陷阱的四个技巧。
像ChatGPT这样的大型语言模型(LLM)的一个突出特征是它们的权威声音。它们总是充满信心地回答,即使他们的答案毫无意义。不可避免,有时ChatGPT采用令人信服但错误的答案回答了一些问题。
本文作者表示,他使用ChatGPT的经验法则是,只在他完全理解并可以验证的主题中使用它。例如不会用它来写量子物理的解释,因为他对这个主题了解不够。但是ChatGPT可以帮助他撰写一篇关于机器学习基础知识的有趣文章,因为可以完全检查和纠正它的输出。
同样,当使用ChatGPT生成代码时,只让它完成可以完全验证的任务。ChatGPT可能编写无效或更糟的代码,这些代码虽然有效但不安全。因为ChatGPT是一个自动化工具,可以完成那些需要花费很长时间编写或需要多次访问文档页面或在线论坛(如StackOverflow)的繁重工作。例如,可以要求它编写排序算法,采用Python/ target=_blank class=infotextkey>Python启动Web服务器的代码,从数据库模式中执行SQL查询,或者在Matplotlib中执行数据可视化命令。
大型语言模型(LLM) 往往难以处理需要推理和逐步规划的任务。因此,不要指望ChatGPT能够成功地编写完整的程序或复杂的代码块。但是,这并不意味着ChatGPT不能帮助人们完成复杂的编程任务。如果给它提供一个简单的任务(例如上面提到的任务),就有可能完成。
用户可以将任务分解成更小的步骤,并一次一步地提示ChatGPT。一个成功的方法是从给ChatGPT一个你想要编写的程序的逻辑的逐步大纲开始。
这有助于大型语言模型(LLM)为更复杂的任务做好准备,然后逐步提示大型语言模型(LLM)。简而言之,用户进行推理,ChatGPT完成工作。顺便说一句,这种从大纲开始并逐步完成的方法在完成其他任务时也很成功,例如撰写某些类型的文章。
如果对循序渐进的过程没有清晰的愿景,用户可以从ChatGPT本身获得帮助。通过提示大型语言模型(LLM)生成完成任务的步骤列表来启动编码会话。然后根据需要修改大纲,并开始提示它生成第一步的代码。
不能指望ChatGPT每一步都提供干净、安全、有效的代码。当查看其代码并将其输入集成开发环境(IDE)时,可以进行更正和调整。当这样做时,最好的做法是将更正后的代码作为反馈提供给ChatGPT,并在适用的情况下提供解释。
需要注意的一点是,ChatGPT对场景非常敏感,它的行为可以根据聊天历史改变。用户可以利用这一点,这就是为什么提供反馈和纠正代码片段非常有帮助的原因。
例如,用户可以说:“这就是我更改你提供的代码的方式:[在这里插入修改后的代码]。试着(插入行为更正)继续这样做。”这可以帮助引导ChatGPT朝着正确的方向前进,避免在回答以后的提示时重复犯错。(同样,本文作者在ChatGPT的其他任务中也成功地使用了这种反馈方法,包括撰写文章)。
有时可以使用ChatGPT来获得关于其自身代码的反馈。尝试打开一个单独的聊天会话,在其中向ChatGPT提供它生成的代码,并要求它对其进行改进或更正。有时,它会产生有趣的结果和新的探索方向。
如果用户正在处理一个特别大的任务,聊天记录可能会变得很长,特别是如果使用ChatGPT进行了大量的重复操作。根据用户使用的模型,大型语言模型(LLM)可能会耗尽ChatGPT场景的内存。ChatGPT的免费版本有4000个令牌的内存。(对于语言任务,100个令牌覆盖大约75个单词。对于编程来说,它通常要少得多。)
一个成功的技巧是偶尔清理一下ChatGPT的场景。为此,可以采用一个提示启动一个新的聊天会话,在这个提示中,可以向ChatGPT提供任务的大纲、到目前为止完成的步骤、到目前为止生成的代码,以及希望它遵循的一些通用指导原则。然后告诉它继续下一步。通过消除以前与大型语言模型(LLM)交互中的混乱,可以提供更清晰的场景,并提高了ChatGPT生成代码的准确性。
大型语言模型(LLM)辅助编程领域正在迅速发展。例如,ChatGPT Plus现在有几个插件可以帮助程序员预测代码。其他基于大型语言模型(LLM)的编码工具(例如Github Copilot和Amazon CodeWhisperer)正在帮助程序员显著提高他们的速度和生产力。检索增强技术可以使程序员将大型语言模型(LLM)的行为定制为他们自己的专有代码库或库,这些代码库没有包含在训练数据集中。人们仍在探索大型语言模型(LLM)能为程序员做些什么。
原文标题:How to write better code with ChatGPT,作者:Ben Dickson