如何借助大语言模型编写更好的代码

生成软件代码是ChatGPT和其他指令遵循的大型语言模型(LLM)的强大应用之一。在给定正确的提示后,LLM可以生成原本可能需要数小时才能编写的代码。

然而,LLM无法完成程序员的所有工作。它们无法分解复杂的问题,思考逻辑和结构,并创建多层次的解决方案。它们一次只能处理一个令牌,预测下一个代码片段可能跟随用户提示和它们当前的输出。

以下是四个提示,将帮助您充分利用ChatGPT令人印象深刻的编码能力,同时避免其中的陷阱:

01

如果无法验证,不要轻信ChatGPT

ChatGPT总是自信的回答,即使他的答案是错误的

像ChatGPT这样的LLM的一个显著特点是它们的权威性声音。它们总是自信地回答,即使它们的输出是荒谬的。在几个场合,ChatGPT用令人信服但错误的答案回答了我的问题。

我对ChatGPT的经验法则是只在我完全理解并可以验证的主题中使用它。例如,我不会使用它来编写关于量子物理的解释,因为我对这个主题了解不足。但是,ChatGPT可以帮助我编写关于机器学习基础的有趣文章,因为我可以完全检查和纠正它的输出。

同样,在使用ChatGPT生成代码时,只有在您可以完全验证的任务中才可以信任它。ChatGPT可以编写不起作用的代码,或者更糟糕的是,能够工作但存在安全问题的代码。我将其视为一种自动化工具,可以完成那些我需要花费很长时间编写或需要多次查阅文档页面或在线论坛(如Stack Overflow)的繁琐工作。例如,您可以要求它编写一个排序算法,用Python启动Web服务器的代码,根据数据库模式编写SQL查询,或者生成Matplotlib的数据可视化命令。

02

一个迭代一个块

不要期望ChatGPT能够成功地为您编写完整的程序或复杂的代码块

LLM(大型语言模型)在需要推理和逐步规划的任务中往往会遇到困难。因此,不要期望ChatGPT能够成功地为您编写完整的程序或复杂的代码块。然而,这并不意味着ChatGPT无法在复杂的编程任务中提供帮助。如果您提供给它一个简单的任务(例如上面提到的任务),它成功的几率会大大提高。

将任务拆分为较小的步骤,并逐步提示ChatGPT。一个成功的方法是首先给ChatGPT一个逐步的程序逻辑概述,让它了解您想要编写的程序的逻辑。

这有助于为模型准备更大的任务。然后逐步提示LLM进行编码。简而言之,您进行推理,ChatGPT完成工作。(顺便说一句,这种从概述开始,逐步完成任务的方法对于其他任务,如撰写某些类型的文章,也很成功。)

如果您对逐步过程没有清晰的想法,可以从ChatGPT本身获得帮助。开始编码会话时,提示LLM生成一系列完成任务的步骤。然后根据需要更正概述,并开始提示它生成第一步的代码。

03

向ChatGPT提供反馈

ChatGPT对上下文非常敏感,其行为可以根据聊天历史而改变

不能期望ChatGPT在每个步骤中都能提供干净、安全和可工作的代码。当您检查其代码并输入到IDE中时,您会进行修正和调整。在这样做时,向ChatGPT提供已更正的代码作为反馈是一个很好的做法,如果适用,还可以提供解释。

需要注意的一点是,ChatGPT对上下文非常敏感,其行为可以根据聊天历史而改变。您可以利用这一点,这也是提供反馈和更正代码片段非常有帮助的原因。

例如,您可以说:“这是我更改的代码:[插入更正的代码]。请尝试在以后的步骤中进行[插入行为更正]。”这可以帮助引导ChatGPT朝正确的方向发展,并避免在回答未来的提示时重复错误。(同样,我在其他任务中使用这种反馈方法与ChatGPT也取得了成功,包括撰写文章。)

有时,您可以使用ChatGPT获取有关其自身代码的反馈。尝试打开一个单独的聊天会话,在其中提供ChatGPT生成的代码,并要求它改进或更正。有时,它会产生有趣的结果和新的探索方向。

04

清理ChatGPT的上下文

定期清理聊天内容的上下文,有助于提高模型代码的准确性

如果您正在处理一个特别大的任务,您的聊天历史可能会变得非常长,特别是如果您与ChatGPT来回进行了很多交互。根据您使用的模型,LLM的上下文记忆可能会用完。免费版本的ChatGPT的记忆容量为4,000个令牌。(对于语言任务,100个令牌大约相当于75个单词。对于编程任务,通常要少得多。)

一个成功的技巧是定期清理上下文。为此,您可以使用一个新的聊天会话,并在提示中向ChatGPT提供任务的概述、您目前已完成的步骤、您目前已生成的代码以及您希望它遵循的一些一般准则。然后告诉它从下一步继续。通过清理之前与LLM的交互中的混乱内容,您提供了一个更清晰的上下文,并提高了模型生成的代码的准确性。

猜你喜欢

转载自blog.csdn.net/elinkenshujuxian/article/details/131663579
今日推荐