AI学习2: 大语言模型ChatGPT的基本原理及提示词优化

189 阅读10分钟

基本原理:猜测

当你随便打开一个App,找到里面的智能客服跟他说句话,你会发现它反复就那么几句,很傻是不是。

而当你第一次使用ChatGPT时,会发现无论你说什么,它都会非常有逻辑的回答你,很神奇。

它是怎么做到的?

ChatGPT 它就会根据你发送的内容和上下文,然后输出预测性文本

注:上下文,Context,一般是本次会话之前沟通过的内容或者一些背景说明信息。

关于预测性文本,我们举几个例子:

床前明月光,疑是地上霜。 举头望明月,______。

宫廷玉液酒,_____。

如果你看到这些话下意识的脑补出来了后面的内容,这个过程叫做补全(Completion),也是它的核心功能。

而你对ChatGPT输入的内容,比如提的问题,叫做提示词(Prompt)。

ChatGPT 的功能基本上就是根据上下文,不停的猜下一个词是什么,当它猜出来下一个词后,会把猜出来的词放回句子里,再继续猜下一个。

如图所示:

image.png

之所以它能够不停的推测下一个词是什么,是因为在我们用到它之前,它已经被大量的文本语料训练过了。

因此,当它看到和训练语料中类似的话时,它会更高概率的输出曾经训练过的内容,而如果是不常见到的,就更有可能产生更多样,更具创造性的回答。

比如,ChatGPT的训练语料里有大量的唐诗,那它一定会知道 举头望明月 的下一句是 低头思故乡,而不是 我是郭德纲。

image.png

如果让ChatGPT帮我们补齐一段诗歌,举头望明月和我们随手写的抬头看月亮相比:

  • "举头望明月"是个强提示,下一句确定性比较高,更大概率是"低头思故乡"。
  • "抬头看月亮"是一个弱提示,下一句确定性就较低,很可能你每次得到的答案都不一样。

所以,如果你想更有效地和ChatGPT打交道,那就得用一些已经被验证为是强提示的方法。

需要注意的是,chatGPT的回答是随机的。

想象一个场景,你和你的小伙伴用掷骰子的方式决定每天中午吃什么。

但是,你掷的色子不再是一个普通的六面色子,而是一个有上百面的超级色子,这个色子上的每一个面都有不同的食物选项。当你投掷这个色子,你不知道会掷出什么,但是每一面都有一定的几率被选中。

ChatGPT就像这个多面色子。

当你输入一个问题时,ChatGPT会不停的掷骰子来决定应该给你什么样的回应,这个"骰子"非常非常复杂,因为它是由数百万个参数构成的数学模型

当你问ChatGPT:你今天好吗?

它可能回答:我很好,谢谢!你呢?

如果你再问一次相同的问题,它可能说:我没日夜之分,所以一直都很好!有什么我可以帮你的吗?

你可能会想,既然每次都不一样,那要咋玩?

提示词方法论

接下来介绍几种常见和基础的强提示方法。

角色定义法

角色定义法几乎是在我们使用中最有趣也是最有用的方法之一。

在现实生活中,如果你遇到了一些问题,或者想要寻求一些答案,你会知道去找谁。

比如,你在健身时有一个关于健身营养搭配比例方面的问题,你会去寻求一个健身教练或者营养师,直接向他询问问题就好,因为健身教练和营养师这个角色就包含了需要回答你问题的技能,风格,知识等等。

同样,你也可以要求ChatGPT来扮演一个特定的角色,它会尽量模仿这个角色,包括技能、知识、思考和行为方式,回答的风格等等。

下面让ChatGPT完成一个简单的角色扮演:

扮演一个我的健身教练兼营养师,我的身高183,体重70公斤,想要增肌,请为我提供一个针对20岁男性增肌的营养搭配方案。

image.png

可以看到,在上面的提示词中输入了我的信息(我的身高183,体重70公斤,想要增肌),但如果你想要有一些交互的感觉,比如想让它来问你,你可以试着改写为"输入/输出"这种强提示的方式:你会提供什么,它需要做什么:

扮演一个我的健身教练兼营养师,我会告诉你我目前的年龄,性别,身高和体重,以及健身的目标,而你需要为我输出一个针对性的营养搭配方案。

image.png

这种方式的使用方式如下:

  1. 扮演什么角色
  2. 执行任务

下面是几个示例:

  1. 扮演一个我的健身教练兼营养师,我的身高183,体重70公斤,想要增肌,请为我提供一个针对20岁男性增肌的营养搭配方案。
  2. 扮演一个怀疑论者,我会告诉你一些事实,你会用怀疑或者阴谋论的方式和语气来质疑这件事的。

受众定义法

扮演一个角色,让他明白自己应该做什么和应该输出什么,我们只需要简单说:你是某某,你要做某件事或者某些些事,ChatGPT就会知道怎么样回应。

但有时,我们不仅仅想让ChatGPT模仿某个角色,还想让它能针对特定的受众输出内容。这就是所谓的 受众定义法

用这种提示方法,我们不需要告诉它很复杂的规则,只需要让ChatGPT 知道它在和什么样的用户对话,它就能针对这个用户画像自动调整输出的内容。

如果你直接问ChatGPT什么是大型语言模型,它可能会给你丢出来一大堆看不懂的名词,什么深度学习啊,什么变换器啊。

假设我是个对计算机一窍不通的人,那我可能得需要很多轮对话追问,"什么是深度学习","什么是变换器"…… 才能理解大型语言模型是什么。

这时候我可以修改我的问题,扮演一个特定的受众:

我是个对计算机一窍不通的人,请为我解释大型语言模型是什么?

它就会改用非专业的、易懂的语言告诉我:

image.png

更有趣的是如果我跟他说:

假设我是秦始皇,向我解释大语言模型是什么

image.png

这种方式的使用方式如下:

  1. 假设我是什么
  2. 执行任务

下面是几个示例:

  1. 我是一个来自《魔兽世界》游戏里的法师,用我能听得懂的方式告诉我互联网是什么
  2. 我从未学过做菜,请一步步教我做一道蛋炒饭

场景定义法

除了扮演某个角色,以及设置受众角色,我们还可以引入第三个提示方法:通过设定或者描述一个虚拟的环境或者场景,让ChatGPT可以输出更加个性化的内容。

这种方式的使用方式如下:

  1. 假设X
  2. 执行任务Y

你需要将"X"替换为一个场景,比如"一个魔法世界","正在执行一个太空探险任务","遇到了某个职场机遇",然后指定你需要让ChatGPT针对这个场景执行的任务Y。

下面是几个示例:

  1. 我的老板打算找我去办公室谈话,我想要跟他谈一下我的晋升和涨薪,我应该如何准备这次谈话来更好的促成我的目标?
  2. 假设你是个宇航员,你正在危险的星球上执行一个太空探险任务,你需要探索这颗星球上是否存在生命,你会怎样开始你的任务?

问题拆解法

每当你向ChatGPT提问的时候,在一般情况下,它实际上是将你的问题拆分成多个小问题来进行推理的,然后基于这些小问题的答案,组合成一个综合答案。

比如当你问他:

我家里有多大?

image.png

它是无法计算我家有多大的,因为缺少关键信息,假如我们在问题中提供了这些关键信息,它就能估算出我家里有多大。

而我们可以利用这个机制,在提示词中加入这个要求,让它先生成一系列的附加问题,然后再组合起来询问我们,以获得更符合我们需求的最终答案。

这个方法就是问题拆解法

比如,我想要做一份两人的中式午餐,但我想让ChatGPT来通过询问我家里现有哪些食材和烹饪设备,给我一些食谱建议。

我想要制作一份两人份的中式午餐,你需要生成一系列关于我手头上有哪些食材和我拥有哪些烹饪设备的附加问题。将这些问题的答案组合起来,帮助我制作一份我有食材和工具能做的食谱。

image.png

这样,通过使用问题拆解法,我们可以得到更准确和个性化的答案或建议。

这种方式的使用方式如下:

  1. 问题
  2. 生成一系列有助于更准确回答问题的附加问题
  3. 将这些问题的答案组合起来,以产生对整体问题的最终答案

下面是几个示例:

  1. 我想要去北京玩3天,生成一系列关于我的预算、喜好的活动以及我偏向的交通方式等附加问题。将这些问题的答案组合起来,以更好地规划我的行程。
  2. 作为一名创作写作人,我希望能够有一些问题来激发我的创意并构建故事情节。生成一系列关于我的创作风格、题材偏好和主要情感表达的附加问题。将这些问题的答案组合起来,以辅助我的创作过程。

提供中间步骤示例方法

如果需要ChatGPT执行一些比较复杂的任务,为了尽可能的提升提示词的效果和准确率,可以在提示词中增加一些中间步骤的示例,告诉他,按照这个步骤进行输出。

很多人应该都尝试过让ChatGPT给你提供一个旅游计划,那可能会这样问:

我要去纽约玩,请帮我规划一份;

ChatGPT会帮你快速生成一个旅行计划,然而可能并不是你想要的结果。

比如,你可能要去7天而不是4天,你想要更多的感受文化和历史,想要让他推荐一些住宿的地方......

这时候应该将步骤列出来,给他足够多的细节,让他像一个多米诺骨牌一样依次执行你的要求:

我准备去纽约玩7天,请按照以下步骤帮我规划行程:

1.  列出纽约每一天必去的旅游景点和原因。
2.  为每个景点推荐一个附近的餐厅。
3.  为每一天推荐一个合适的住宿地点。
4.  按照日期整理这些活动为一份行程,用表格输出。

请注意:我对艺术和历史特别感兴趣。

这个方法常用于 Vibe codeing 中,当我要让大模型帮我写一个功能时, 你就可以通过这种方法来详细描述具体功能。