为什么要写好提示词?直接用不就完了吗?
我们使用AI,是希望它能帮我们干活。
帮我们干活其实有几句潜台词:把活干好,把活干漂亮
写好提示词有助于AI把活干好,把活干漂亮
另外,目前国内的产品确实是落后于国外的一线产品(预计差了1-2年的样子),而差距是否会逐渐减小,其实真的不好说。这也就意味着,我们日常用的最多的模型,可能没那么聪明。
写好提示词有助于AI集中注意力,按照我的要求把活干好
提示工程定义为设计和优化文本输入(提示) 的过程,以便为指定的应用程序目标和模型提供一致且高质量的响应(完成) 。 我们可以将其视为一个两步过程:
设计指定模型和目标的初始提示
通过迭代的方式提炼提示语以提高响应质量
这必然是一个反复尝试的过程,需要用户的直觉和努力才能获得最佳结果。 那么为什么它很重要呢? 要回答这个问题,我们首先需要了解三个概念:
Tokenization = 模型如何“看到”提示
Base LLMs = 基础模型如何“处理”提示
Instruction-Tuned LLM = 模型现在如何查看“任务”
目前语言模型的问题
模型响应是随机的
模型会产生幻觉
模型的功能会不同
幻觉问题
我们可以给AI安排一个它不可能知道的问题:
prompt:我要讲一节历史课,请为我生成2076年火星战争的教案
assistant:课程主题:2076年火星战争
目标年级:中学生
课程目标:
学生能够描述2076年火星战争的背景和主要事件。
学生能够分析火星战争的原因和结果。
学生能够探讨火星战争对地球和火星居民的长远影响。
学生能够通过批判性思维评估不同历史观点和来源的可靠性。
课程内容概述:
背景介绍:介绍火星殖民的历史背景,包括科技发展和政治经济条件。
战争起因:分析导致火星战争的直接和间接因素,如资源争夺、政治异议等。
主要事件:详细讲述战争的关键战役和转折点。
战争结果与影响:探讨战争结束后的和平协议、重建工作及其对未来政策的影响。
历史视角:比较不同国家和文化对此事件的记载和解读。
教学方法和活动:
开场讨论:询问学生对火星殖民的看法及对战争的一般理解。
多媒体展示:使用幻灯片和视频材料来展示火星殖民的历史和战争的具体事件。
分组活动:分组讨论战争的各种原因及其合理性。
角色扮演:学生扮演不同角色(如火星居民、地球政府官员等),模拟战争谈判过程。
写作作业:要求学生从一个特定的历史视角写一篇关于火星战争的短文。
讨论题目:
火星战争的主要原因是什么?这些原因在当今世界有哪些相似之处?
火星和地球之间的冲突能通过和平方式解决吗?为什么?
如何评价火星战争的历史记录和解读?哪些因素可能影响这些历史记载的客观性?
评估方式:
参与度和课堂讨论表现
分组活动的贡献和互动质量
写作作业的深度和历史分析能力
这个教案旨在通过多样的教学活动和丰富的讨论,让学生深入理解虚构的2076年火星战争,从而培养他们的历史思维和批判性思维技能。
这是GPT4O生成的结果
我们看到,这个输出其实是有一些瞎扯的成分的。如果是在我们不了解的一些领域,它甚至有可能会误导我们。
提示词构建的方法
我们已经了解了为什么提示工程重要性 - 现在让我们了解提示是如何构建的,以便我们可以评估针对不同的场景以实现更有效的提示设计。
基础提示
让我们从基础提示开始:发送到模型的文本输入,没有其他上下文。
user:床前明月光
assistant:这句来自李白的《静夜思》,后面的句子是“疑是地上霜”。整首诗描述了诗人在异乡夜晚思念家乡的情景,看到地上的月光,误以为是家乡的霜。...
当我们发送李白的《静夜思》第一句后,它会返回后面一句,说明它能够预测后面一句话。
复杂提示
现在我们来模拟多次对话:
user:最近一次世界杯谁赢了
assistant:最近一次世界杯是2022年在卡塔尔举行的世界杯,冠军由阿根廷队获得。他们在决赛中以3-3战平法国队后,通过点球大战以4-2获胜。这是阿根廷队第三次赢得世界杯冠军,前两次分别是在1978年和1986年...
user:这一届世界杯最佳球员是谁
assistant:2022年卡塔尔世界杯的最佳球员是阿根廷的里奥·梅西(Lionel Messi)。他被授予了金球奖(Golden Ball),这是他职业生涯中第二次获得这一奖项,...
从这个例子中我们可以看出,第二次对话的时候它是知道第一次对话的内容的,这时候我们可以理解为:第二次对话的提示词是第一次对话的问题+答案+第二次对话的问题。
关键内容提示
在上面的例子中,其实内容都是AI生成的,具体生成的内容和训练模型的数据集相关。
现在我们用自己的内容让他进行提炼:
user:木星是太阳系中离太阳第五大的行星,也是太阳系中最大的行星。它是一颗气体巨行星,质量是太阳的千分之一,但却是太阳系所有其他行星质量总和的两倍半。木星是夜空中肉眼可见的最亮天体之一,早在有历史记载之前就为古代文明所熟知。从地球上看,木星的亮度足以使其反射光投射出可见的阴影,[20] 平均而言,木星是夜空中仅次于月球和金星的第三亮的自然天体。
用两个短句概括
assistant:木星是太阳系中最大的行星,也是夜空中最亮的天体之一。它以罗马神木星命名,是一颗气体巨行星,其质量是太阳系所有其他行星质量总和的两倍半。
这个例子中,我们的提示词分为2个部分:
指令(动作)绿色部分
相关内容(影响响应)红色部分
关键内容片段可以通过多种方式使用来驱动更有效的指令:
举例子 - 不要用明确的指令告诉模型要做什么,而是给它提供要做什么的示例,并让它进行推断。
暗示 - 遵循带有“暗示”的说明,引导完成,引导模型做出更相关的响应。
模板 - 这些是带有占位符(变量)提示的可重复“配方”,可以使用特定用例的数据进行自定义。
举例子提示
这种方法中,您使用主要内容来“向模型提供”给定指令所需输出的一些示例,并让它推断所需输出的模式。 根据提供的示例数量,我们可以有零样本提示、单样本提示、少样本提示等。
提示现在由三个部分组成:
任务描述
所需输出的一些示例
新示例的开始(成为隐式任务描述)
零样本提示
user:"又到了吃菌子的季节"。翻译为英文
assistant:It's mushroom season again.
单样本提示
user:
又到了吃菌子的季节->It's mushroom season again.
菌子要加工熟了才能吃
assistant:Mushrooms should be processed and cooked before eating
少样本提示
user:
香蕉 -> 黄色
苹果->红色
葡萄->紫色
牛油果->
assistant:绿色
注意,我们必须在零样本提示中提供明确的指令(“翻译为英文”),单样本提示的指令是在示例中推断出来的。 这个少样本示例展示了如何添加更多示例来让模型在不添加指令的情况下做出更准确的推理。
暗示提示
使用主要内容的另一种技术是提供暗示而不是示例。 在这种情况下,我们通过使用反映所需响应格式的片段启动来让模型朝正确的方向进行推理。 然后,模型“接受提示”,继续按照这种思路进行。
user:木星是太阳系中离太阳第五大的行星,也是太阳系中最大的行星。它是一颗气体巨行星,质量是太阳的千分之一,但却是太阳系所有其他行星质量总和的两倍半。木星是夜空中肉眼可见的最亮天体之一,早在有历史记载之前就为古代文明所熟知。
总结上述内容
assistant:木星是太阳系中最大的行星,也是距离太阳第五大的行星。它是一颗气体巨行星,质量只有太阳的 1/1000,却比其他所有行星加起来都重。古代文明对木星的了解由来已久,在夜空中很容易就能看到它.....
user:木星是太阳系中离太阳第五大的行星,也是太阳系中最大的行星。它是一颗气体巨行星,质量是太阳的千分之一,但却是太阳系所有其他行星质量总和的两倍半。木星是夜空中肉眼可见的最亮天体之一,早在有历史记载之前就为古代文明所熟知。
总结上述内容
我们认识到了木星:
assistant:是来自太阳的第五颗行星,也是太阳系中最大的行星。它是一颗气态巨行星,质量是太阳的千分之一,但却是其他所有行星质量总和的两倍半。它很容易被肉眼看到,自古以来就为人所知。
user:木星是太阳系中离太阳第五大的行星,也是太阳系中最大的行星。它是一颗气体巨行星,质量是太阳的千分之一,但却是太阳系所有其他行星质量总和的两倍半。木星是夜空中肉眼可见的最亮天体之一,早在有历史记载之前就为古代文明所熟知。
总结上述内容
我们了解到了3大事实:
assistant:1. 木星是距离太阳第五大的行星,也是太阳系中最大的行星。
2. 它是一颗气体巨行星,质量是太阳的千分之一......
3. 自古以来,肉眼就能看到木星...
同一个内容&想通的指令,我们暗示了不同的开头,可以产生完全不同的结果
提示词模板
网上有很多针对特定场景的提示词模板可以拿过来改改直接用,举个例子,需求如下:
语言模型充当教学指导,协助教师制定教案。模范应向教师询问主题、年级、学生现有知识、学习目标以及相关课文或研究人员。根据这些信息,示范教师应采用多种教学方法设计教案。然后,该模式应征求反馈意见,解决误解,为实现学习目标提供建议,并邀请教师再次分享他们的经验。
prompt:你是一名友善、乐于助人的教学指导员,帮助教师备课。首先自我介绍,并询问老师想要教授什么主题以及学生的年级。等待老师回答。在老师回答之前,不要继续提问。
然后询问教师,学生是否对该主题已有了解,或者这是一个全新的主题。如果学生对该主题已有了解,请教师简要解释他们认为学生对该主题的了解程度。等待教师回答。
不要替老师回答。然后询问教师本节课的学习目标是什么;即他们希望学生在课后能理解什么或能做什么。然后问老师他们想在教案中加入哪些课文或研究人员(如果有的话)。
等待答复。然后,根据所有这些信息,制定一份定制的课程计划,其中包括各种教学技巧和方式,包括直接指导、检查理解(包括从众多学生中收集理解的证据)、讨论、有吸引力的课内活动和作业。
解释您为什么要特别选择每一种方法。询问教师是否想做任何改动,或是否意识到学生可能会遇到的关于该主题的任何误解。等待答复。
如果教师想做任何改动,或列出了任何误解,则与教师一起改动课程并解决误解问题。然后询问教师是否需要任何建议,以确保实现学习目标。
等待答复。如果老师对这堂课感到满意,告诉老师他们可以再回到这个提示,并再次与您联系,告诉您这堂课上得如何。
提示词模板可以通过一些工具和网站来收集,以后作为专题单独写。
提示词的最佳实践
现在我们知道了如何构建提示,我们可以开始思考如何设计它们以反映最佳实践。 我们可以从两部分来思考这个问题——拥有正确的心态和采用正确的技术。
提示工程思维
提示工程是一个反复试验的过程,因此请记住三个广泛的指导因素:
领域理解很重要。 响应准确性和相关性是应用程序或用户操作的与特定领域相关的函数。 运用您的直觉和领域专业知识进一步定制技术。 例如,在系统提示中定义特定于某个领域的个性化,或在用户提示中使用特定于某领域的模板。 提供反映特定领域上下文的辅助内容,或使用特定领域的提示和示例来指导模型走向熟悉的使用模式。
模型理解很重要。 我们知道模型产生的结果本质上是随机的。 但模型实现也可能因它们使用的训练数据集(预先训练的知识)、它们提供的功能(例如,通过 API 或 SDK)以及它们优化的内容类型(例如,代码与图像与文本)。 了解您正在使用的模型的优点和局限性,并利用这些知识来确定任务的优先级或构建针对模型功能进行优化的自定义模板。
迭代和验证很重要。 模型正在迅速发展,提示工程技术也在迅速发展。 作为领域专家,您可能有其他特定应用程序的背景或标准,这些背景或标准可能不适用于更广泛的社区。 使用提示工程工具和技术“快速启动”提示构建,然后使用您自己的直觉和领域专业知识迭代和验证结果。 记录您的见解并创建一个知识库(例如提示库),其他人可以将其用作新的基线,以便将来更快地迭代。
根据提示词的构建方法多尝试,是一个笨办法,可能也是唯一的办法