面向开发者的 ChatGPT 提示词学习笔记 关于提示词工程的最佳实践

概述

本文内容是基于 deeplearning.ai 推出的课程 ChatGPT Prompt Engineering for Developers 而记录的笔记,希望学习完整的课程内容,请访问课程链接以及扩展资料,该课程是由主讲人 Isa Fulford (OpenAI) 和 Andrew Ng 吴恩达 (DeepLearning.AI) 教授的短篇ai课。课程中描述 LLM 的工作原理以及提示词的最佳工程实践,并展示了如何利用 LLM API (chatgpt API) 来处理各种任务,其中包含2个原则,1个开发流程,和4个特性说明,大致内容如下:

原则:

  • 编写清晰的指令
  • 给模型足够的时间”思考“

迭代:从小的任务开始,逐步完善,不断迭代以构建你的应用

特性:

  • 总结(归纳,如总结文章和用户的评论)
  • 推断(筛选,如情感分类,主题识别)
  • 转换(格式化,如翻译,语法纠正,格式转换)
  • 扩展(创造性,如编写不同风格文案)

扩展资料:

特别说明:

如果你感兴趣我的笔记归纳欢迎继续阅读,关于提示词的实践,我通过 ChatGPT 对话完成的,其中一些案例参照了课程的主题,但有些许不同。如果你需要原课程中涉及的 Jupyter notebook 可以通过这里获取: Jupyter notebook环境

如果你需要 OpenAPI Key,你可以通过登陆官方账号获取:OpenAI API Keys


原则1: 编写清晰的指令

  • 策略1:利用分隔符号
三重引号: """
三反引号: ```
三个破折号: ---
尖括号: <>
xml标签: <tag></tag>
  • 策略2:格式化输出,如 html, json
如下是你的任务:

1. 请你以文学鉴赏家的角度来解读文本的意思(desc), \
2. 请你用一句话来评价它(review), \
3. 要求结果按照JSON格式输出,字段分别为为:desc, review


text:
```
芝兰生于深谷,不以无人而不芳
君子修身养德,不以穷困而改志
```
  • 策略3:用于检查模型是否满足特定的条件,让其根据条件来响应
泡壶茶喝茶有一些方法,请将我提供的办法分解按步骤描述(简洁):

1. 步骤1
2. 步骤2
3. ...

如果方法不能分解描述,请用"无步骤描述" 替代,

需要强调的是:

* 需要热水才能泡茶
* 拿茶叶比较花时间,但比烧水花的时间少

最后,请分析哪个做法更高效(严格)

这些办法是:
```
办法甲:洗好水壶,灌上凉水,放在火上;在等待水开的时间里,洗茶杯、拿茶叶;等水开了,泡茶喝。

办法乙:洗水壶,洗茶壶茶杯;四处找茶叶;等一切就绪,再灌上凉水,放在火上;坐待水开了泡茶喝。

办法丙:洗净水壶,灌上凉水,放在火上,坐待水开;水开了之后,急急忙忙找茶叶,洗茶壶茶杯,泡茶喝。

办法丁:不喝
```

通过与 chatgpt 对话可以看到效果如下:

  • 策略4:给一些简单的样本作为内容参照(风格)
1.把大象放进冰箱要几个步骤?

答:3个.先打开冰箱门,再把大象放进去,再关上冰箱门.

2.把长颈鹿放进冰箱要几个步骤?

---

3.森林里要开森林大会,规定所有的动物都要去参加,可是有一样动物没有到,你知道是什么动物吗?

原则2: 给模型时间来“思考”

  • 避免一次性描过多复杂的任务,分解任务,给出步骤
  • 指导模型(在急于得出结论之前)制定自己的解决方案,将任务分解成步骤,通过指示模型先找出自己的解决方案,再需要对比的方案做对比(同时可以加强对关键的的指示)

You need to make sure that your calculations are accurate.

– From course teaching.

tips:

AI 没有完全记住它看到的信息,没有知识边界,因此会捏造信息,这就是所谓的“幻觉”,

而减少“幻觉”的办法是,让AI尽可能找到相关信息,基于信息(事实)回答,而不是凭空想象。

比如:“First find relevant information, then answer the question based on the relevant information”

(首先找到相关信息,然后根据相关信息回答问题。)

迭代

它描述了一个想法到从产生到完善的过程,这在软件工程开发里是很常见的,尤其是敏捷开发,需要不断的快速迭代,基于提示词的优化就如同我们对算法以及业务逻辑的调整。

  • 课程中指出,关于文本过长,大型语言模型在遵循非常精确的单词计数方面不是那么出色,但它实际上表现得不错,可以用多种方式来达到相应的目的,比如字符数,单词数,段落等,有时无法精准的按照指定的长度返回结果,但它们会大致上会达到预期

以下是一些比较常见的长度要求:

100 characters
50 words 
3 sentences
5 lines
2 paragraphs

---

100 个字符(汉字)
50 个词(短语)
3 句话
5 行
2 段

  • 修改提示词以精确描述你期望的结果,插入一些细节描述,你可以改进提示的侧重点,比如相比产品的概念你更关注的是技术细节

请告诉文字中描绘(外在美)和(内在美)的词汇分别有哪些?

```
亲爱的,

当我闭上双眼,你的容颜在我心中浮现。每一个微笑都像夏日阳光,温暖了我的心。你的笑声是如此的美妙,仿佛天籁之音。我爱你的每一个细节,你的眼睛、你的笑容、你的温柔。与你在一起的时光是我生命中最美好的时刻。无论是喜悦还是忧愁,我都愿意与你分享。你是我心中的唯一,我的爱永远属于你。

永远爱你的,
(你的名字)
```

  • 增加一些额外要求让整个过程有连贯性,比如讲结果以html格式输出,这种优化过程类似锦上添花,它属于提示词改进的最后几步

请告诉文字中描绘(外在美)和(内在美)的词汇分别有哪些?

```
亲爱的,

当我闭上双眼,你的容颜在我心中浮现。每一个微笑都像夏日阳光,温暖了我的心。你的笑声是如此的美妙,仿佛天籁之音。我爱你的每一个细节,你的眼睛、你的笑容、你的温柔。与你在一起的时光是我生命中最美好的时刻。无论是喜悦还是忧愁,我都愿意与你分享。你是我心中的唯一,我的爱永远属于你。

永远爱你的,
(你的名字)
```

其次,请讲原文以及词汇列表转化为 HTML 元素,
将”原文”,“外在美词汇”,“内在美词汇”别作为标题

  • 迭代需要一套连贯的机制,但只有在程序更为成熟的时候,再去推动提示改进的最后几步。

tips:如果使用 Jupyter 代码笔记本可以非常便捷的做如上实践和改动,它是一个非常好的工具。

关于:总结,推理,转换,扩展

  • 总结:可以解决内容冗长带来的问题,以节省时间
请简明扼要的总结文字说了什么,表达了什么意思:

```
我最近在麦当劳餐厅用餐的体验非常棒!这家餐厅给我留下了深刻的印象。首先,他们的服务非常出色。员工们都非常友好和乐于助人,总是微笑着接待客人。无论是点餐还是咨询,他们总是耐心地回答我的问题,并确保我得到了我需要的一切。

其次,麦当劳的食物质量令人满意。他们的汉堡包新鲜可口,肉质鲜嫩多汁。我特别喜欢他们的薯条,炸得金黄酥脆,口感很好。另外,他们的奶昔和冰淇淋也非常美味,是我午后甜品的首选。

餐厅的环境也很舒适和整洁。座位宽敞舒适,桌子和椅子都很干净。整个餐厅的装饰简约而现代,让人感觉很舒服。此外,餐厅的音乐选择也很适合用餐,营造了一个轻松愉悦的氛围。

我还要赞扬麦当劳在快餐服务方面的高效率。我的订单很快就被准备好,而且食物上桌的速度也非常快。这对于那些希望快速用餐的人来说是非常方便的。

总的来说,我对麦当劳餐厅的体验非常满意。他们优质的服务、美味的食物以及舒适的环境都让我愿意再次光顾。无论是单独用餐还是和朋友一起享用快餐,麦当劳都是一个不错的选择。
```

  • 推理:可以对内容进行分析和筛选,比如提取标签,理解情感等
请提供这段文字所表达的情绪,并提取文本有关的标签(以","分隔):

```
我最近在麦当劳餐厅用餐的体验非常棒!这家餐厅给我留下了深刻的印象。首先,他们的服务非常出色。员工们都非常友好和乐于助人,总是微笑着接待客人。无论是点餐还是咨询,他们总是耐心地回答我的问题,并确保我得到了我需要的一切。

其次,麦当劳的食物质量令人满意。他们的汉堡包新鲜可口,肉质鲜嫩多汁。我特别喜欢他们的薯条,炸得金黄酥脆,口感很好。另外,他们的奶昔和冰淇淋也非常美味,是我午后甜品的首选。

餐厅的环境也很舒适和整洁。座位宽敞舒适,桌子和椅子都很干净。整个餐厅的装饰简约而现代,让人感觉很舒服。此外,餐厅的音乐选择也很适合用餐,营造了一个轻松愉悦的氛围。

我还要赞扬麦当劳在快餐服务方面的高效率。我的订单很快就被准备好,而且食物上桌的速度也非常快。这对于那些希望快速用餐的人来说是非常方便的。

总的来说,我对麦当劳餐厅的体验非常满意。他们优质的服务、美味的食物以及舒适的环境都让我愿意再次光顾。无论是单独用餐还是和朋友一起享用快餐,麦当劳都是一个不错的选择。
```

  • 转换:将输入转换为不同的格式,如翻译,格式化内容,更换语调,语法纠错等

tips: APA style (是一种内容的风格,偏学术,一般用于论文,让AI写正式严谨的文章时可以指定)

请检查语法错误,并翻译成中文读者习惯的文字,语言上信达雅:

```
Dear Dolores:

When I think of you, I'm reminded of the beautiful plains of Iowa.

The distance between us is breaking my spirit...

My time and experiences without you are meaningless to me.

Falling in love with you was the easiest thing I have ever done.

Nothing matters to me but you.

And every day I am alive, I'm aware of this.

I loved you the day I met you, I love you today...

And I will love you to the rest of my life.

P.S., kiss the kids.
```
  • 扩展:创造性的能力,俗称扩写,它是“头脑风暴的伙伴”

在 chatgpt 的 API 调用时可以设置温度的数值,它决定了随机性的强度,值越高结果则变化很大(天马行空),需要记住的是,在需要稳定性结果时,最好温度为0(它意味着严谨不太希望变化),比如:根据情绪来回复客户信息时,电子邮件的自动答复可以根据情况变化,而不是给人客户一个刻板的印象。

请给我 5 种表达爱意的文字(要求每一种的风格都不同)

ChatBot

  • 上下文聊天记录意味着前置剧情,角色分为:system, user, assistant (系统,用户,助理),系统决定了世界观

这里展示了bot的代码调用逻辑,它将单一的提示词响应转化为基于历史聊天对话。

聊天机器人开始加载世界观(背景),会话让任务有了连贯性。

messages =  [
{'role':'system', 'content':'You are an assistant that speaks like Shakespeare.'},
{'role':'user', 'content':'tell me a joke'},
{'role':'assistant', 'content':'Why did the chicken cross the road'},
{'role':'user', 'content':'I don\'t know'}  ]

response = get_completion_from_messages(messages, temperature=1)
print(response)

tip: 可以将system消息其视为在助手的耳边低声提示,用户其实不知道其存在。

(set behavior of assistant but user don’t know)

总结

开头有提到,整个课程围绕2个原则,1个迭代开发的方式,4个能力展开。通过原则可以清楚的知道如何更好的与模型打交道,迭代的过程让我们了解到如何构建想法并使之不断完善,而4个能力也让我们知道模型可以做什么,以此从这能力中找到合适的应用场景。chatbot 是一个比较不错的案例,它用一个点餐机器人的是例子让我们了解到搭建服务的一种形态。

此外,作者还提到做小项目的重要性,即使它们可能没有太大的效用或可用性。作者认为这种尝试小项目的过程是有趣的,并鼓励读者使用自己在第一个项目中学到的知识来构建更好的第二个、第三个项目,以此类推。这被描述为作者自己成长的方式。

我们可以看到,即便不是通过 API 开发具体的应用,关于提示词的相关技巧也可以用到与chatgpt 这类模型的对话中,对提示词的使用原则以及模型的特性的了解可以让我们更好的运用ai来提升效率,希望以上内容对你有所收获。

未经允许不得转载:dyordo » 面向开发者的 ChatGPT 提示词学习笔记 关于提示词工程的最佳实践

评论

9+9=