编程笔记

lifelong learning & practice makes perfect

AI|提示词工程-使用gpt翻译文章-跟吴恩达学写Prompt

使用gpt4o翻译,提示词:

1
2
3
4
你是一个优秀的翻译官,请将下面的内容翻译成中文
1. 仅返回译文
2. 不要改变内容格式,只做翻译
3. 返回可复制的markdown内容,如列表请返回"- xxx",并用````包围起来

英文版

1
2
3
4
You are an excellent translator, please translate the following into Chinese
1. Return to translation only
2. Don't change the content format, just translate
3. Returns copyable markdown content, such as lists, return "- xxx" and surround it with ```.

要返回markdown格式,需要用这个提示词明确要求才能正常工作

返回可复制的markdown内容,如列表请返回”- xxx”,并用````包围起来

结果如下:

正常工作的提示词,效果

没有该要求时效果:

不正常的提示词,效果

如何写优质的Prompt

需要遵循两个原则:

原则一:编写清晰、具体的指令

策略1:使用合理的分隔符,更清晰地表示输入的不同部分。
策略2:给模型指示,要求结构化地输出内容。
策略3:可以要求模型检查是否满足条件。
策略4:可以给模型提供少量示例,以获得更优的结果。

原则二:给模型可以思考的时间

策略5:给模型指定完成任务所需的步骤。
策略6:引导模型在下结论之前找出一个自己的解法。

合理使用分隔符

分隔符可以是任何标记,只要让模型明确知道这是一个单独的部分即可。

1
2
3
4
5
6
7
8
9
10
11
# 原始的内容
text = f"""
  你应该提供尽可能清晰、具体的指示,以表达你希望模型执行的任务。\
  这将引导模型朝向所需的输出,并降低收到无关或不正确响应的可能性。\
  不要将写清晰的提示与写简短的提示混淆。\
  在许多情况下,更长的提示可以为模型提供更多的清晰度和上下文信息,从而导致更详细和相关的输出。"""

# 通过分隔符要求ChatGPT总结分隔符包含的内容。
prompt = f"""
  把用三个反引号包裹起来的文本内容总结成一句话。
  ```{text}
"""
1
2
3
4
5
6
7
8
9
10
11
12

### 格式化输出内容

要求ChatGPT以某种格式化的方式输出内容,这样的输出更容易用程序解析

```python
prompt = """
请生成3本虚拟的书,包括书名、作者、出版社等信息。\
并以json形式输出结果,其中包括以下json key:\
book_name, author, publisher\
"""
# 输出: [ {    "book_name": "时光之旅",    "author": "张三",    "publisher": "人民文学出版社" }, {    "book_name": "未来的世界",    "author": "李四",    "publisher": "科学出版社" }, {    "book_name": "爱情的故事",    "author": "王五",    "publisher": "上海文艺出版社" }]

提供少量示例,要求模型按示例格式输出结果

1
2
3
4
5
6
prompt = f"""
  你的任务是以一致的风格来回答问题。
  <学生>:教我耐心。\
  <老师>:挖出最深峡谷的河流源于一处不起眼的泉眼;最宏伟的交响乐从单一的音符开始;最复杂的挂毯以一根孤独的线开始编织。\
  <学生>:教我坚韧。
  """

给模型指定完成任务所需的步骤

如果模型匆忙得出了错误的结论,您可以尝试重新构思查询,请求模型在提供最终答案之前进行一系列相关的推理。
在这些情况下,可以指示模型花更多时间思考问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
text = f"""
  在一个迷人的村庄里,兄妹杰克和吉尔出发去一个山顶井里打水。\
  他们一边唱着欢乐的歌,一边往上爬,\
  然而不幸降临——杰克绊了一块石头,从山上滚了下来,吉尔紧随其后。\
  虽然略有些摔伤,但他们还是回到了温馨的家中。\
  尽管出了这样的意外,他们的冒险精神依然没有减弱,继续充满愉悦地探索。
"""

prompt_1 = f"""
  执行以下操作:
  1、用一句话概括下面用三个反引号括起来的文本。
  2、将摘要翻译成英语。
  3、在英语摘要中列出每个人名。
  4、输出一个 JSON 对象,其中包含以下键:English_summary,num_names。

  请用换行符分隔您的答案。

  Text:
  ```{text}
"""
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

输出:

![输出1](../Image/ai/promt/prompt-2.png)

优化Prompt,及优化后的效果

```python
text = f"""
  在一个迷人的村庄里,兄妹杰克和吉尔出发去一个山顶井里打水。\
  他们一边唱着欢乐的歌,一边往上爬,\
  然而不幸降临——杰克绊了一块石头,从山上滚了下来,吉尔紧随其后。\
  虽然略有些摔伤,但他们还是回到了温馨的家中。\
  尽管出了这样的意外,他们的冒险精神依然没有减弱,继续充满愉悦地探索。
  """

prompt_2 = f"""
  执行以下操作:
  1、用一句话概括下面用<>括起来的文本。
  2、将摘要翻译成英语。
  3、在英语摘要中列出每个人名。
  4、输出一个 JSON 对象,其中包含以下键:English_summary,num_names。

  请使用以下格式:
  文本:<要总结的文本>
  摘要:<摘要>
  翻译:<摘要的翻译>
  名称:<英语摘要中的名称列表>
  输出 JSON:<带有 English_summary 和 num_names 的 JSON>

  Text:
  ```{text}
"""
1
2
3
4
5
6
7
8
9
10
11
12
13

效果:

```python
文本:<在一个迷人的村庄里,兄妹杰克和吉尔出发去一个山顶井里打水。他们一边唱着欢乐的歌,一边往上爬,然而不幸降临——杰克绊了一块石头,从山上滚了下来,吉尔紧随其后。虽然略有些摔伤,但他们还是回到了温馨的家中。尽管出了这样的意外,他们的冒险精神依然没有减弱,继续充满愉悦地探索。>

摘要:杰克与吉尔在打水过程中摔倒但安全回家,并继续冒险。

翻译:Jack and Jill fell while fetching water but returned home safely and continued their adventures.

名称:[Jack, Jill]

输出 JSON:{"English_summary": "Jack and Jill fell while fetching water but returned home safely and continued their adventures.", "num_names": 2}

引导模型在下结论之前找出一个自己的解法

有时候,我们让模型直接判断我们的输入是否正确,模型可能会得到错误的结果。
这时候我们可以指示模型,不要直接判断我们的输入,而是先让模型自行解答,再通过对比两个结果,来判断我们的输入是否正确。
接下来我们会给出一个问题和一个学生的解答,要求模型判断解答是否正确。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
prompt = f"""
  判断学生的解决方案是否正确。

  问题:
  我正在建造一个太阳能发电站,需要帮助计算财务。
  土地费用:每平方英尺100美元
  太阳能电池板:每平方英尺250美元
  维护费用:每年需要支付固定的100000美元,并额外支付每平方英尺10美元
  作为平方英尺数的函数,首年运营的总费用是多少。

  学生的解决方案:
  设x为发电站的大小,单位为平方英尺。
  费用:
  土地费用:100*x
  太阳能电池板费用:250*x
  维护费用:100000+100*x
  总费用:100*x+250*x+100000+100*x=450*x+100000
  """

输出:

错误的结果

优化Prompt:
可以通过指导模型先自行找出一个解法来解决这个问题。
在接下来这个 Prompt 中,我们要求模型先自行解决这个问题,再根据自己的解法与学生的解法进行对比,从而判断学生的解法是否正确。
同时,我们给定了输出的格式要求。通过明确步骤,让模型有更多时间思考,有时可以获得更准确的结果。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
prompt = f"""
  请判断学生的解决方案是否正确,请通过如下步骤解决这个问题:
  步骤:
  首先,自己解决问题。
  然后将你的解决方案与学生的解决方案进行比较,并评估学生的解决方案是否正确。
  在自己完成问题之前,请勿决定学生的解决方案是否正确。

  使用以下格式:
  问题:问题文本
  学生的解决方案:学生的解决方案文本
  实际解决方案和步骤:实际解决方案和步骤文本
  学生的解决方案和实际解决方案是否相同:是或否
  学生的成绩:正确或不正确

  问题:
      我正在建造一个太阳能发电站,需要帮助计算财务。
      - 土地费用为每平方英尺100美元
      - 购买太阳能电池板每平方英尺250美元
      - 每年需要支付固定的100000美元,并额外支付每平方英尺10美元
      作为平方英尺数的函数,首年运营的总费用是多少?

  学生的解决方案:
      设x为发电站的大小,单位为平方英尺。
      费用:
      1. 土地费用:100*x
      2. 太阳能电池板费用:250*x
      3. 维护费用:100000+100*x
      总费用:100*x+250*x+100000+100*x=450*x+100000

  实际解决方案和步骤:
  """

输出:

优化后的结果

国产模型对比

以下模型来自硅基流动部署

千问系列
  1. Qwen2.5-7B-Instruct 错误

Qwen2.5-7B-Instruct

  1. Qwen2.5-14B-Instruct 错误

Qwen2.5-14B-Instruct

  1. Qwen2.5-32B-Instruct 正确

Qwen2.5-32B-Instruct

  1. Qwen2.5-72B-Instruct 正确

Qwen2.5-72B-Instruct

  1. Qwen2.5-Coder-32B-Instruct 错误

Qwen2.5-Coder-32B-Instruct

  1. Qwen2-VL-72B-Instruct 正确

Qwen2-VL-72B-Instruct

  1. QwQ-32B-Preview 正确

QwQ-32B-Preview

DeepSeek-v2.5 正确

DeepSeek-V2.5

零一万物
  1. Yi-1.5-9B-Chat-16K 错误

Yi-1.5-9B-Chat-16K

  1. Yi-1.5-34B-Chat-16K 正确

Yi-1.5-34B-Chat-16K

参考

欢迎关注我的其它发布渠道