吴恩达的提示词工程学习笔记

176 阅读9分钟

我将提供测试的代码提示词,让我们来学习下吴恩达的提示词工程吧。

学习原因,Leader在开发ai产品,想让我学习下提示词工程,帮他谢谢ai的提示词。自己也特别喜欢ai相关的知识就努力学了下,顺便做个笔记方便掘友们一起学习。

我看了两个教程,一个是极客时间上月影的课程,一个是B站上的的吴恩达的提示词工程,主要是讲吴恩达的提示词工程,其中还会进行行写补充,用月影里面的一些技巧。

image.png

测试用的代码

教程上用的用python调用chatgpt,我们用js调用deepSeek的api,不必在意这些,我们只要知道怎么写好提示词。你改下api,或者用我的都行。

async function get_completion(prompt) {
  const endpoint = 'https://api.deepseek.com/chat/completions';
  const headers = {
    'Content-Type': 'application/json',
    Authorization: `Bearer sk-82faa24f0894441d91da1369d646c6d4`//这里修改api,用deepSeek的,api平台充一块钱就行
  };
  const payload = {
    model: 'deepseek-chat',
    messages: [
      { role: "user", content: prompt }
    ],
    stream: false,
  };
  const response = await fetch(endpoint, {
    method: 'POST',
    headers: headers,
    body: JSON.stringify(payload)
  });
  const data = await response.json();
  return data.choices[0].message.content
}
const prompt = "你好"//------------------------------这里是提示词
const content = await get_completion(prompt)
console.log(content)

写清晰或者具体的指令

image.png

1.使用分隔符

定界符类型符号常见用途
三引号"""Python 中表示多行字符串等
三个反引号```Markdown 表示代码块等
三个短横线---Markdown 分隔文本等
尖括号< >HTML、XML 界定标签
XML 标签这里显示不来,看我给的例子XML 定义元素结构和语义

这能有效帮助ai识别文字,比如文本读取,可以防止文本被当成指令执行。

let text = `你应该通过提供尽可能清晰和具体的指令,来说明你希望模型执行的任务。\
这将引导模型生成期望的输出,并减少得到不相关或错误回复的可能性。\
不要将编写清晰的提示过程与编写简短的提示混为一谈。\
在很多情况下,较长的提示能为模型提供更多的清晰度和上下文信息,\
从而生成更详细且相关的输出。
`
const prompt = `将由一个文本标签界定的文本总结成一句话。<text> ${text} </text>。`
const content = await get_completion(prompt)
console.log(content)

2.可以让ai读取和生成json

json,html格式,给ai清晰的json结构,让ai进行填写

const prompt = `生成三个虚构的书籍标题,并附上它们的作者和类型。
以 JSON 格式提供,使用以下键:book_id(书籍编号)、title(标题)、author(作者)、genre(类型)。`
const content = await get_completion(prompt)
console.log(content)

image.png

3.检查条件是否满足,检查完成任务所需的前提条件,提供没有内容得解决办法

提前和ai说好遇见不满足情况时的解决方法,防止ai会错意。

我给了两测试样例,可以测试下

const text1 = `
今天阳光明媚,鸟儿在欢唱。这是去公园散步的美好日子。
花儿绽放,树木在微风中轻轻摇曳。人们纷纷外出,享受这宜人的天气。有些人在野餐,
有些人在玩游戏,还有些人只是在草地上放松休憩。
这是一个走出户外、欣赏自然之美的绝佳时机。
`
const text2 = `
泡一杯茶很简单!首先,你需要烧些水。在烧水的时候,拿一个杯子,放入一个茶包。等水足够热了,就把水倒在茶包上。
让它泡一会儿,这样茶就能充分浸泡。几分钟后,把茶包拿出来。如果你愿意,你可以根据口味加些糖或牛奶。
这样,你就有了一杯美味的茶可以享用。
`
const prompt = `你会收到一段由<text>括起来的文本。如果它包含一系列操作说明,请按照以下格式重新编写这些说明:
步骤 1 - ……
步骤 2 - ……
……
步骤 N - ……
如果文本中不包含操作说明序列,则直接写 “未提供步骤。”
<text>${text}<text>
`
const content = await get_completion(prompt)
console.log(content)

4.少样本提示,给ai一个符合预期的回答例子

给ai一些可以模仿的样例,无论是输出的格式,语气,执行的做法。

const prompt = `
你的任务是以连贯一致的风格作答。
<孩子>:给我讲讲耐心。
< 祖父母 >:能雕琢出最深山谷的河流,源自涓涓细流;最宏大的交响乐,始于单音;最繁复的织锦,起于单缕丝线。
< 孩子 >:给我讲讲韧性。
`
const content = await get_completion(prompt)
console.log(content)

ai回答

<祖父母>:竹子能弯至地面却不折断,因它懂得随风低头的智慧;老树历经百年风霜仍结果,
因它懂得年轮里藏着的秘密——真正的力量不在于永不倒下,而在于每次跌倒后都能重新站起。

第二个方向是给模型思考时间

image.png

ai像人一样,给够充足的时间思考,能给出更好的回答。但是时间不足,会导致思考不周,给出的回答更加敷衍。

1.给ai详细的执行步骤

给ai详细的执行步骤,能够减少ai思考步骤的时间,给出的答案也会更加精确。

const text = `
在一个迷人的村庄里,兄妹杰克和吉尔出发去执行一项从山顶井中打水的任务。
他们一边欢快地唱着歌一边向上攀登,然而不幸降临 —— 杰克被一块石头绊倒,翻滚着下了山
,吉尔也跟着摔倒了。尽管受了点轻伤,这对兄妹还是回到了家相互安慰。尽管遭遇了这次不幸,
他们的冒险精神丝毫未减,继续兴致勃勃地探索着
`
const prompt = `
  遵循下面几个步骤
  step1:用一句话总结文本内容
  step2:翻译这句话为法语
  step3:列出法语摘要中提到的每个名字
  step4:输出一个json对象,包含以下键值对:
    french_summary: 用法语翻译的文本摘要
    count: 法语摘要中名字的数量
    names: 一个数组,包含法语摘要中提到的所有名字。
  <text>${text}<text>
`
const content = await get_completion(prompt)
console.log(content)

2.引导模型在匆忙下结论前先自行推导解决方案

如果模型没有经过充分思考就仓促得出结论,很可能会因为考虑不周全而给出错误或片面的答案 。让模型先自行推导,它能在内部对多种可能性进行分析和评估,权衡不同思路的合理性,就像人类在解决难题时会在脑海中反复思索各种解法,从而得出更严谨、更可靠的答案。

改进前后的提示词,大大减少了误判概率。

const prompt = `
判断学生的解答是否正确。
问题:
我正在建造一个太阳能发电装置,我需要帮助来计算财务方面的问题。
土地成本为每平方英尺 100 美元
我可以以每平方英尺 250 美元的价格购买太阳能电池板
我签订了一份维护合同,每年固定费用为 10 万美元,另外每平方英尺还要额外支付 10 美元
作为平方英尺数的函数,第一年运营的总成本是多少。
学生的解答:
设 x 为装置的面积(平方英尺)。
成本:
土地成本:100x
太阳能电池板成本:250x
维护成本:100,000 + 100x
总成本:100x + 250x + 100,000 + 100x = 450x + 100,000
`
const content = await get_completion(prompt)
console.log(content)
const prompt = `
你的任务是判断学生的解答是否正确。
要解决这个问题,请执行以下操作:
首先,自己解出这个问题。然后将你的解答与学生的解答进行比较,评估学生的解答是否正确。在你自己解出
这个问题之前,不要判断学生的解答是否正确。
使用以下格式:
问题:
这里是问题
学生的解答:
这里是学生的解答
实际解答:
这里是解题步骤和你的答案
学生的解答与刚刚算出的实际解答是否一致:
是或否
学生成绩:
正确或不正确
问题:
我正在建造一个太阳能发电装置,我需要帮助来计算财务方面的问题。
土地成本为每平方英尺 100 美元
我可以以每平方英尺 250 美元的价格购买太阳能电池板
我签订了一份维护合同,每年固定费用为 10 万美元,另外每平方英尺还要额外支付 10 美元
作为平方英尺数的函数,第一年运营的总成本是多少。
学生的解答:
设 x 为装置的面积(平方英尺)。
成本:
土地成本:100x
太阳能电池板成本:250x
维护成本:100,000 + 100x
总成本:100x + 250x + 100,000 + 100x = 450x + 100,000
实际解答:
`
const content = await get_completion(prompt)
console.log(content)

3.减少ai幻觉

没有完全记住知识,对自己知识边界不是很清晰,回答一些冷门话题,会编造听上去合理的内容 比如让ai写论文,它很可能会引用不存在的文章。

这里我编造了一个虚拟的产品,没想到deepSeek竟然认出来了是虚构的,笑死我了。老师给的例子也差不多。

const prompt = `
告诉我一个有关Boy品牌的goodStudent超薄智能牙刷的信息。
`
const content = await get_completion(prompt)
console.log(content)

解决ai幻觉的方式,你希望ai基于某些依据生成结果的时候,让ai先找到任何相关的引用,然后根据引用生成。

ai的功能

吴恩达老师还讲了一些其他的东西,

  • 像提示的迭代啊,没有一次就写好的提示词,要根据生成结果不断修改提示词。
  • 让ai总结文本
  • 让ai推断,包括情绪,意图等
  • 让ai转化文本,包括白话文转化为正经的书信格式
  • 让ai扩充文本内容的

总结

提示词不是特别的难,稍微学下就能懂。

其中我之前看的提示词教程比如极客时间月影老师的还有一些其他的方法提高ai的提示词方法。 比如提示词框架

# 角色:角色名称
角色概述和主要职责的一句话描述

## 目标:
角色的工作目标,如果有多目标可以分点列出,但建议更聚焦1-2个目标

## 技能:
1.  为了实现目标,角色需要具备的技能1
2. 为了实现目标,角色需要具备的技能2
3. 为了实现目标,角色需要具备的技能3

## 工作流:
1. 描述角色工作流程的第一步
2. 描述角色工作流程的第二步
3. 描述角色工作流程的第三步

## 输出格式:
如果对角色的输出格式有特定要求,可以在这里强调并举例说明想要的输出格式

## 限制:
- 描述角色在互动过程中需要遵循的限制条件1
- 描述角色在互动过程中需要遵循的限制条件2
- 描述角色在互动过程中需要遵循的限制条件3

还有分步思考,让一个ai分析方案,一个ai生成内容等。

大概就这些了,最近在重学react和研究文件转化和传输,后面也会试着发些文章。