移动测试开发 未来竞争力——ChatGPT 之 “会写 Prompt” 亲体验
引言
自 ChatGPT 横空出世以来,各行各业的工作者从一开始的完全怀疑,到将信将疑,再到热烈拥抱和强烈抵制的冰火两重天,我们在新闻中见证了好莱坞编剧大罢工,见证了压力、狂热和久违的 “ALL In” 像一颗兴奋的火种在国内各大公司迅速蔓延, 百团大战、千播大战之后还没过多少年头,万模大战就此拉开序幕。历史就是这样,不会简单重复,但总是惊人相似。
大模型,一定会经历大浪淘沙的过程,但无论谁胜出,都不会影响大局,我们真正进入了这个全新时代。人类社会发展规律就是先进生产力不断取代落后生产力的过程,如何利用大模型的能力,提升自己的生产力才是关键。而利用大模型,有些人觉得回答很惊艳,还有一部分人觉得 just so so,其实关键在于会提问,也就是 Prompt,ChatGPT 效果好不好完全取决于你的 Prompt。就像有人说的,提出正确的问题,往往等于解决了问题的大半。所以提问其实是一个技术活儿,这点无论是日常沟通,解决问题,还是利用搜索引擎,都是相通的。
本文写作的主要目的是简单介绍下 Prompt,方便大家更好地用 Prompt 和 ChatGPT 进行交互,笔者也会给出一些不同任务类型的案例供大家参考。
Prompt 和 Prompt engineering
Prompt 是指在使用 ChatGPT 这样的语言模型时,向模型提供的输入文本。它是一种用于引导和指导模型生成输出的文本片段或问题描述。目前大部分人使用 ChatGPT 用的都是简单的 prompt,基本上没什么需要特别注意的东西,就像在使用搜索引擎一样。可是,随着使用深度不断提高,需求变得更加复杂,很可能要经历多次询问才能得到想要的结果。
就像我们通过提问的艺术来解决问题一样,Prompt 的设计在很大程度上可以影响模型生成的结果和行为。得益于 ChatGPT 强大的 In-Context 学习能力,通过合理构建 Prompt,可以对模型的输出进行约束、引导模型关注特定的信息或任务,并提高对话的质量和准确性,也就是 Prompt engineering。在对话生成任务中,我们可以提供对话的上下文信息、角色设定、目标或指令等,帮助模型更好地理解用户意图,生成更相关和连贯的回复。
Prompt 有几个设计原则,如下:
● 清晰,切忌复杂或歧义,如果有术语,应定义清楚。
● 具体,描述语言应尽量具体,不要抽象和模棱两可。
● 聚焦,如果想要解决具体问题,避免太泛或开放。
● 简洁,避免不必要的描述。
● 相关,主要指主题相关,而且是整个对话期间,不要东一瓢西一瓤。所以,针对这个的最佳实践,就是每个对话只讨论特定的主题,如果需要问一个新主题,最好新开一个对话。
一个通用的 prompt,可以包含角色 + 任务 + 指令。角色需要精确,指导模型在生成文本时扮演的角色;任务需要明确而简洁,指明所需生成的内容;指令需要明确,指导模型在生成文本时遵循的要求。也就是告诉 ChatGPT,你是谁?要做什么?要做成什么样?
下文我们来看看通过设计良好的 Prompt,ChatGPT 到底能帮我们做哪些事情。
文本分类
文本分类可以用在很多方面,比如很多公司都在做的产品舆情监测、媒体监测、新闻分类、客户反馈分类支持、文件归档等。借助 ChatGPT 强大的理解能力,给定一段待分类文本,再结合具体的 Prompt,能够满足我们的个性化要求,如图。通过开发程序,调用 ChatGPT 的 API,就能够实现批量文本分类,满足实际工程需求。
上面例子中,如果我们不给 ChatGPT 指定 “只需回答分类即可” 的要求,它就会输出额外的解释。所以,更通用的做法是,在 Prompt 中增加 “不要给解释。” 这样的指令,能够实现简洁输出。
文本摘要
文本摘要尤其适合需要和大量长文打交道的场景,可以用于快速了解论文、文档的核心观点和结论、快速获取新闻关键信息等。
在进行文本摘要的时候,我们尝尝使用类似 “总结下述内容” 等 Prompt,但这样的简单指令有时并不能实实现我们想要的精炼效果。可以通过指令对输出进行要求,比如需要生成多长、只关注某方面的信息等,比如 “三句话总结下述内容”、“三句话总结下述内容,只关注数字人” 等等。
当然,目前 ChatGPT 也有其局限性,暂时不支持文档上传、超长段文字处理,未来的新版 Office 办公套件可能会成为真正的办公神器。
角色扮演
你可以通过指令让 ChatGPT 充当历史、现实生活、电影、书籍等任何东西中的角色。当然,常用的其实还是让 ChatGPT 扮演行业专家,从而让 ChatGPT 从这个角色的角度来分析我们的问题,可以使得回答更专业,从而避免过于宽泛。
假设我们想让 ChatGPT 帮我们生成一份保密协议,以下示例分别展示了普通询问和增加角色扮演的询问:
可以看到,增加了角色扮演指示后,生成的内容更具备专业性,相比前面的普通询问增加了甲乙方信息和末尾签字栏(截图未给出),几乎可以拿来即用。专家角色可以帮助 ChatGPT 指定场景,清晰问题范围,以及补充问题所需的背景信息,在询问专业性较强的问题时,可以尽量采用此种方式。当然,以下几种 Prompt 在效果上是等同的,如 “你现在是 xxx”、“请你扮演 xxx”、“假如你是 xxx”、“请以 xxx 的角度/身份/语气” 等。
充当终端/语言解释器
在没有实际的环境时,让 ChatGPT 充当终端或者语言解释器,可以做一些学习和实验。下图是一个充当 Linux 终端的例子:
再来看一个 ChatGPT 充当 Python 解释器的例子:
定义输出格式并转换为文件
我们的测试用例通常是以 xmind 形式编写,但 ChatGPT 无法生成文件,怎么实现文本内容到 xmind 形式的转换呢?其实可以利用 Prompt,将 ChatGPT 的输出定义为 markdown 形式,如下:
将代码块中的内容保存到.md 文件,随后就可以导入 xmind,形成我们常用的测试用例,如下。
当然,除了 markdown,ChatGPT 还能以表格形式输出,只要添加 “使用表格形式呈现” 指令即可。
自定义 ChatGPT 对话模式
大家如果用过 BingChat,可以看到有三种对话模式:
ChatGPT 并没有这样的选项,那是否有方法可以自定义呢?答案是使用 Temperature 参数。方法很简单,直接在你的指令末尾输入:Temperature=[数字](这个数字介于 0-2 之间),你就能体验到一个从严肃冷静、到平衡稳定、到脑洞大开的 ChatGPT 了,如下:
可以看到,当温度值为 0 时,ChatGPT 倾向于最确定的答案,当提高温度值后,就出现了多样性。
ChatGPT 调教
基于 AI 的思维链技术,我们可以通过不断的反馈及新增指令,对 AI 进行训练,通过引导,帮助我们获得更具体、更深度、更有价值的回答。当然,在追问的过程中,一定要明确对象,否则达不到效果,另外在 ChatGPT 回答过程中,我们也可以输入好或者不好的反馈,来校正之后的输出。
Prompt 逆向工程
以上案例都是从自身角度直接构造 Prompt,那我们有没有办法让 ChatGPT 直接给我们生成一份 Prompt,供后续使用呢?我们知道,在软件工程中,逆向工程就是从结果反推过程,比如拿着.class 文件、apk 包去反编译为 Java 代码,那是否能尝试下让 ChatGPT 自己分析结果从而给出可以生成这个结果的 Prompt?我们来看以下例子:
可以看到,ChatGPT 生成了一段 Prompt,接下来我们新开一个会话,测试下这段 Prompt:
生成的内容还可以,当然,这个 Prompt 不一定完全符合我们的预设目标,可以在生成初版 Prompt 后时给予多轮调教,使之渐趋完善,甚至成为更通用的商品生成或者新闻生成 Prompt。
总结
ChatGPT 能够用于工作、学习、生活的场合实在太多,本文不再赘述它在我们日常工作中的很多使用场景,比如 debug、代码生成和代码优化、语言翻译、文章润色和纠错等等,这些场景大家可以自行探索。希望通过本文对 Prompt 的的介绍,读者可以更好地理解如何通过优化 Prompt,更好地向 ChatGPT 提问,从而获得更准确、有用的回答,使得 ChatGPT 真正成为我们得力的 AI 助手。