1.2 ChatGPT的提示词工程

时间:2024-10-25 21:19:03

ChatGPT 上线至今已经有一段时间了,但是不少人还没真正掌握它的使用技巧。其实,ChatGPT 的难点,在于 Prompt(提示词)的编写,OpenAI 创始人在今年 2 月时,在 Twitter 上说:「能够出色编写 Prompt 跟聊天机器人对话,是一项能令人惊艳的高杠杆技能」。目前你在网上看到的所有 AI 助理、智能翻译、角色扮演,本质上还是通过编写 Prompt 来实现。只要你的 Prompt 写的足够好,ChatGPT 可以帮你快速完成很多工作,包括写爬虫脚本、金融数据分析、文案润色与翻译等等,并且这些工作还做的比一般人出色。

1.2.1提示词的重要性

  在大型语言模型(如chatGPT)的上下文中,提示词(Prompts)是指向模型输入的一段文本,用于引导模型的输出。当我们向模型提供一个提示词,模型会根据这个提示词生成接下来的文本。

  例如,如果你输入 "Translate the following English text to French: ", 后面跟着一段英文,模型将尝试生成对应的法语翻译。在这种情况下,"Translate the following English text to French: " 就被视为一个提示词,它引导了模型的行为,使其输出一段法语文本。

  提示词的选择极其重要,因为它们可以极大地影响模型的输出。良好的提示词可以引导模型生成高质量、相关性强的文本。此外,通过巧妙地设计提示词,我们甚至可以引导模型以特定的方式解决问题或执行任务。

  最近一篇文章“GPT-4在97轮对话中探索世界难题,给出P≠NP结论”的一篇文章引起广泛的关注。GPT-4在97轮对话中探索世界难题,给出P≠NP结论_澎湃号·湃客_澎湃新闻-The Paper来自微软研究院、北京大学、北航等机构的研究者提出使用大语言模型 (LLM) 来增强和加速对 P versus NP 问题的研究。具体来说,该文提出了一个能使 LLM 进行深入思考并解决复杂问题的通用框架:苏格拉底推理(Socratic reasoning)。基于该框架,LLM 可以进行递归地发现、解决并整合问题,同时还能进行自我评估和完善。该文对 P vs. NP 问题的试点研究表明,GPT-4 成功地生成了一个证明模式,并在 97 轮对话回合中进行了严格的推理,得出「P≠ NP」的结论,这与(Xu 和 Zhou,2023)结论一致 。「苏格拉底推理」有五种提示模式:演绎(deduction)、变换(transformation)、分解(decomposition)、验证(verification)、融合(integration)。这些模式被用来发现新的见解和观点,将复杂的问题分解成子问题或小步骤,并通过挑战响应答案来进行自我改进。在较小的问题(atomic problem)上,LLM 能够直接给出推理结果,这时采用演绎模式(例如提示语为让我们一步一步思考……)来指导 LLM 直接得出结论。对于更加复杂的问题,该文首先要求 LLM 将问题转化成一个新问题或将其分解为几个子问题。然后递归地执行这些模式,直到达到原子级问题。当产生新的问题或得出新的结论时,采用验证模式并利用 LLM 的自我评判能力进行验证和完善。最后,融合模式要求 LLM 根据子问题的结果综合结论。激励 LLM 通过一系列对话递归地继续上述过程,直到解决目标问题。

  通过这个案例,我们可以看到提示词在以下方面的重要性:

引导模型的思考方向:通过使用特定的提示词,研究者们能够引导模型一步一步地解决复杂问题,如P vs. NP问题。

提高模型的解决问题能力:通过适当的提示词,模型可以将复杂的问题分解成子问题,或者将问题转化成一个新问题,从而更好地解决问题。

自我评估和完善:通过验证模式的提示词,模型可以对自己的解决方案进行评估和完善,从而提高问题解决的准确性。

  在这个案例中,研究者们使用的提示词有着明确的应用逻辑:

演绎模式:当问题较小或较简单时,可以直接使用演绎模式的提示词(如"让我们一步一步思考……")来引导模型直接得出结论。

变换和分解模式:当问题较复杂时,可以使用变换和分解模式的提示词来引导模型将问题转化或分解成子问题。

验证模式:当得出新的问题或结论时,可以使用验证模式的提示词,引导模型进行自我评估和完善。

融合模式:当子问题得出结果后,可以使用融合模式的提示词来引导模型根据子问题的结果综合结论。

因为从 ChatGPT 发布之后,如何写好 Prompt 已经成为了一个分水岭。熟练掌握 Prompt 编写的人,能够很快让 ChatGPT 理解需求,并很好的执行任务。

  

1.2.2程序开发过程中提示词的作用

  在程序开发的过程中,大语言模型(如GPT-4)已经展现出了它在代码补全方面的巨大潜能。它能够自动产生代码,极大地提高了开发效率。然而,这个过程中,提示词可以发挥关键的引导作用,以下是提示词在代码生成过程中的几种作用:

1. 角色设定:通过设定模型的角色(例如,“Python专家”),我们可以引导模型生成特定编程语言的代码。

2. 指令注入:我们可以在程序中注入持续运行的命令,如“循环任务”,来引导模型生成特定的代码块。

3. 问题拆解:对于复杂的编程问题,通过提示词我们可以将问题拆解成子问题,引导模型分步实现,如Debug和多线程实现。

4. 分层设计:在设计大型项目时,我们可以通过提示词来引导模型分层构建,先构建框架再实现细节,如系统架构设计。

5. 编程思维:将代码当作工具,主动设计变量、函数和类,实现程序的模块化和重用,这是一种编程思维。通过适当的提示词,我们可以引导模型实现这种思维,如面向对象编程

6. 评估模型输出质量:我们可以通过提示词引导模型反思其生成的代码质量,进行代码性能优化,基于测试用例的代码设计,规范程序的运行和输出,如单元测试、性能测试。

7. few-Shot:基于样例的代码设计,规范程序的输入输出,如构造测试用例,也是一种有效的提示词应用方式。

总的来说,提示词在代码生成过程中起到了引导模型思路、提升代码质量、明确函数特性、辅助解决复杂问题、验证和完善代码等重要作用,极大地提高了代码生成的效率和质量。

1.2.3代码生成案例

上述的案例提示词是“用python写一段网页爬虫的代码”,有比较明确的指令。根据该提示词,chatGPT生产了一个通用版的爬虫代码。并给出了详细的解析。

但是如果我们的提示词更明确一些,效果会更好。

看来,chatGPT给出了完整的代码和解释,我们运行一下看看如何:

可以看出,结果完成正确!!!!

1.2.4报错分析

有时候代码执行发生了错误,我们可以把报错信息提交给chatGPT,让它给出处理意见。

1.2.5解析代码

比如我们把一段代码提交给chatGPT,让它解析一下代码内容,看看完成的如何?注意:这里把代码用“”“”“”三引号包含起来,是为了增加提示词的明确性,我们在提示词的时候,也需要把引用内容与正式指令分隔开来。

这段代码解释可以说完成的而相当不错,有些简单的基础知识就能能够明白它的内容,当然你也可以设定角色,让它的回答更加符合你的要求。