ChatGPT提示词工程(一):Guidelines准则

news2024/12/30 3:06:58

目录

  • 一、说明
  • 二、安装环境
  • 三、Guidelines
    • 准则一:写出明确而具体的说明
      • 方法1:使用分隔符清楚地表示输入的不同部分
      • 方法2:用结构化输出:如直接要求它以HTML或者JSON格式输出
      • 方法3:请模型检查是否满足条件
      • 方法4:Prompt中包含少量样本
    • 准则二:给模型一些思考的时间
      • 方法1:指定完成任务所需的步骤
      • 方法2:指示模型在匆忙得出结论之前制定出自己的解决方案
  • 四、模型的限制

一、说明

这是吴恩达 《ChatGPT Prompt Engineering for Developers》 的课程笔记系列。
本文是第二讲的内容:Guidelines
课程主讲:Andrew Ng,Isa Fulford
Isa Fulford也是《OpenAI Cookbook》的主要贡献者之一

二、安装环境

1. 下载openai

pip install openai 

如果是在jupyter notebook上安装,前面需要带英文感叹号(!),之后需要执行bash指令的地方都这样

!pip install openai 

2. 导入openai,并配置openai api key

import openai
import os

from dotenv import load_dotenv, find_dotenv
_ = load_dotenv(find_dotenv())

openai.api_key = os.getenv('OPENAI_API_KEY')

这里的OPENAI_API_KEY是设置在环境变量里的值,为你的openai api key
设置环境变量bash指令:

!export OPENAI_API_KEY='sk-...'		

或者,在代码中直接这样写:

openai.api_key = 'sk-...'    

3. 辅助函数
调用openai接口

def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{"role": "user", "content": prompt}]
    response = openai.ChatCompletion.create(
        model=model,
        messages=messages,
        temperature=0, # this is the degree of randomness of the model's output
    )
    return response.choices[0].message["content"]


三、Guidelines

准则一:写出明确而具体的说明

方法1:使用分隔符清楚地表示输入的不同部分

分隔符可以是:

 ```,  """,  < >,  <tag> </tag>,  :   

它可以防止prompt注入,以免给模型产生混乱的理解

例子:

text = f"""
You should express what you want a model to do by \ 
providing instructions that are as clear and \ 
specific as you can possibly make them. \ 
This will guide the model towards the desired output, \ 
and reduce the chances of receiving irrelevant \ 
or incorrect responses. Don't confuse writing a \ 
clear prompt with writing a short prompt. \ 
In many cases, longer prompts provide more clarity \ 
and context for the model, which can lead to \ 
more detailed and relevant outputs.
"""
prompt = f"""
Summarize the text delimited by triple backticks \ 
into a single sentence.
```{text}```
"""
response = get_completion(prompt)
print(response)

{text} 就是使用符合 ```分隔的内容
以上代码输出的结果为,打印的一句话总结的text的结果:
在这里插入图片描述

方法2:用结构化输出:如直接要求它以HTML或者JSON格式输出

例子:

prompt = f"""
Generate a list of three made-up book titles along \ 
with their authors and genres. 
Provide them in JSON format with the following keys: 
book_id, title, author, genre.
"""
response = get_completion(prompt)
print(response)

代码中,要求生成三个虚拟的图书,以JSON格式输出,运行结果:
在这里插入图片描述

方法3:请模型检查是否满足条件

要求检查:要求模型先检查是否满足某个条件后,再进行输出,如果条件不满足可以直接告知。
例子:

text_1 = f"""
Making a cup of tea is easy! First, you need to get some \ 
water boiling. While that's happening, \ 
grab a cup and put a tea bag in it. Once the water is \ 
hot enough, just pour it over the tea bag. \ 
Let it sit for a bit so the tea can steep. After a \ 
few minutes, take out the tea bag. If you \ 
like, you can add some sugar or milk to taste. \ 
And that's it! You've got yourself a delicious \ 
cup of tea to enjoy.
"""
prompt = f"""
You will be provided with text delimited by triple quotes. 
If it contains a sequence of instructions, \ 
re-write those instructions in the following format:

Step 1 - ...
Step 2 - …
…
Step N - …

If the text does not contain a sequence of instructions, \ 
then simply write \"No steps provided.\"

\"\"\"{text_1}\"\"\"
"""
response = get_completion(prompt)
print("Completion for Text 1:")
print(response)

代码中,text的内容是泡一杯茶的步骤,prompt要求模型理解这段内容,告知是否能把它分解成一步一步的步骤的结构,如果能,则按照步骤描述重写,如果不能则给出则返回No steps provided。代码输出结果:
在这里插入图片描述
下面这个例子则给出的是不能分解成步骤的一段话:

text_2 = f"""
The sun is shining brightly today, and the birds are \
singing. It's a beautiful day to go for a \ 
walk in the park. The flowers are blooming, and the \ 
trees are swaying gently in the breeze. People \ 
are out and about, enjoying the lovely weather. \ 
Some are having picnics, while others are playing \ 
games or simply relaxing on the grass. It's a \ 
perfect day to spend time outdoors and appreciate the \ 
beauty of nature.
"""
prompt = f"""
You will be provided with text delimited by triple quotes. 
If it contains a sequence of instructions, \ 
re-write those instructions in the following format:

Step 1 - ...
Step 2 - …
…
Step N - …

If the text does not contain a sequence of instructions, \ 
then simply write \"No steps provided.\"

\"\"\"{text_2}\"\"\"
"""
response = get_completion(prompt)
print("Completion for Text 2:")
print(response)

在这里插入图片描述

方法4:Prompt中包含少量样本

例子:

prompt = f"""
Your task is to answer in a consistent style.

<child>: Teach me about patience.

<grandparent>: The river that carves the deepest \ 
valley flows from a modest spring; the \ 
grandest symphony originates from a single note; \ 
the most intricate tapestry begins with a solitary thread.

<child>: Teach me about resilience.
"""
response = get_completion(prompt)
print(response)

代码中,给了一个child和grandparent对话的样本,要求再次按照这个样本给出grandparent的答复,运行结果:
在这里插入图片描述

https://blog.csdn.net/Jay_Xio/article/details/130450026



准则二:给模型一些思考的时间

方法1:指定完成任务所需的步骤

例子:

text = f"""
In a charming village, siblings Jack and Jill set out on \ 
a quest to fetch water from a hilltop \ 
well. As they climbed, singing joyfully, misfortune \ 
struck—Jack tripped on a stone and tumbled \ 
down the hill, with Jill following suit. \ 
Though slightly battered, the pair returned home to \ 
comforting embraces. Despite the mishap, \ 
their adventurous spirits remained undimmed, and they \ 
continued exploring with delight.
"""

prompt_1 = f"""
Perform the following actions: 
1 - Summarize the following text delimited by triple \
backticks with 1 sentence.
2 - Translate the summary into French.
3 - List each name in the French summary.
4 - Output a json object that contains the following \
keys: french_summary, num_names.

Separate your answers with line breaks.

Text:
```{text}```
"""

response = get_completion(prompt_1)
print("Completion for prompt 1:")
print(response)

代码中,prompt给出模型要执行任务的步骤
步骤1,用一句话总结text内容
步骤2,翻译成法语
步骤3,列出名字
步骤4,以JSON格式输出
执行代码,模型按照这个步骤输出:
在这里插入图片描述

prompt_2 = f"""
Your task is to perform the following actions: 
1 - Summarize the following text delimited by 
  <> with 1 sentence.
2 - Translate the summary into French.
3 - List each name in the French summary.
4 - Output a json object that contains the 
  following keys: french_summary, num_names.

Use the following format:
Text: <text to summarize>
Summary: <summary>
Translation: <summary translation>
Names: <list of names in Italian summary>
Output JSON: <json with summary and num_names>

Text: <{text}>
"""
response = get_completion(prompt_2)
print("\nCompletion

在这里插入图片描述

方法2:指示模型在匆忙得出结论之前制定出自己的解决方案

prompt = f"""
Determine if the student's solution is correct or not.

Question:
I'm building a solar power installation and I need \
 help working out the financials. 
- Land costs $100 / square foot
- I can buy solar panels for $250 / square foot
- I negotiated a contract for maintenance that will cost \ 
me a flat $100k per year, and an additional $10 / square \
foot
What is the total cost for the first year of operations 
as a function of the number of square feet.

Student's Solution:
Let x be the size of the installation in square feet.
Costs:
1. Land cost: 100x
2. Solar panel cost: 250x
3. Maintenance cost: 100,000 + 100x
Total cost: 100x + 250x + 100,000 + 100x = 450x + 100,000
"""
response = get_completion(prompt)
print(response)

代码中,要求模型判断学生的结题是否正确,运行结果:
在这里插入图片描述
明显第3部,MainTenance const: 应该是 100000 + 10x,而学生给出的是错误的,模型没有判断出这个步骤有误,因为它只判断了 Total cost: 100x + 250x + 100,000 + 100x = 450x + 100,000 是正确的,就给出了正确的结论。

下面的示例,要求模型先自己按照步骤一步一步给出解题步骤,然后再判断学生的解题步骤是否正确:

prompt = f"""
Your task is to determine if the student's solution \
is correct or not.
To solve the problem do the following:
- First, work out your own solution to the problem. 
- Then compare your solution to the student's solution \ 
and evaluate if the student's solution is correct or not. 
Don't decide if the student's solution is correct until 
you have done the problem yourself.

Use the following format:
Question:
```
question here
```
Student's solution:
```
student's solution here
```
Actual solution:
```
steps to work out the solution and your solution here
```
Is the student's solution the same as actual solution \
just calculated:
```
yes or no
```
Student grade:
```
correct or incorrect
```

Question:
```
I'm building a solar power installation and I need help \
working out the financials. 
- Land costs $100 / square foot
- I can buy solar panels for $250 / square foot
- I negotiated a contract for maintenance that will cost \
me a flat $100k per year, and an additional $10 / square \
foot
What is the total cost for the first year of operations \
as a function of the number of square feet.
```
Student's solution:
```
Let x be the size of the installation in square feet.
Costs:
1. Land cost: 100x
2. Solar panel cost: 250x
3. Maintenance cost: 100,000 + 100x
Total cost: 100x + 250x + 100,000 + 100x = 450x + 100,000
```
Actual solution:
"""
response = get_completion(prompt)
print(response)

运行结果: 给出了正确解法,并判断学生的是错误的
在这里插入图片描述

https://blog.csdn.net/Jay_Xio/article/details/130450026



四、模型的限制

prompt = f"""
Tell me about AeroGlide UltraSlim Smart Toothbrush by Boie
"""
response = get_completion(prompt)
print(response)

要求模型介绍Boie这个公司的电动牙刷,其实这个公司不存在,产品也不存在,但是模型会煞有其事的介绍
在这里插入图片描述
这种模型的限制,称为模型的幻觉。

要减少这种幻觉,需要模型先从文本中找到任何相关的引用,然后请它使用这些引用来回答问题,并且把回答追溯到源文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/478750.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入理解计算机系统1--理解编译器编译的过程

前言 大家在学习C语言的时候&#xff0c;相信对编译器这个词并不会感到陌生。我们也会知道编译器编译的过程是&#xff1a;预处理-》编译-》汇编-》链接。这篇文章主要介绍这四个过程中&#xff0c;编译器究竟做了那些工作&#xff0c;它是如何让一份高级程序转换成机器语言的…

[EDA]AMP®-Parkinson‘s Disease Progression Prediction

​ 翻译自&#xff1a;AMP - EDA Models 1.数据集观察 加载四个excel文件 import pandas as pd train_clinical_data pd.read_csv(input/train_clinical_data.csv) train_peptides pd.read_csv(input/train_peptides.csv) train_protiens pd.read_csv(input/train_prote…

蓝桥杯算法竞赛系列第四章——二分算法

欢迎回到&#xff1a;遇见蓝桥遇见你&#xff0c;不负代码不负卿&#xff01; 目录 引入&#xff1a;二分查找 题目描述 题解 代码执行 复杂度分析 例题一&#xff1a;搜索插入位置 题目描述 题解 代码执行 复杂度分析 例题二&#xff1a;寻找峰值 题目描述 题解 …

【五一创作】python 基础系列篇:八、熟练掌握推导式

python 基础系列篇&#xff1a;八、熟练掌握推导式 推导式特殊的元组推导式 推导式机制玩转推导式小结 推导式 在python提供的各种语法糖中&#xff0c;老顾最青睐的就是这个推导式&#xff0c;他大大减少了代码的书写量。 比如一个正常的&#xff0c;生成长度为5的列表&…

红黑树的概念与实现

目录 ​一、红黑树的概念 1.什么是红黑树 2.红黑树满足的性质 3.红黑树存在的意义 二、红黑树的实现 1.类的构建 2.插入函数 &#xff08;1&#xff09;插入一个节点 &#xff08;2&#xff09;调整节点 &#xff08;3&#xff09;旋转 三、红黑树的检验 一、红黑树…

okio篇2-RealBufferedSource

上一篇讲过&#xff0c;okio只有两个概念&#xff0c;source和sink。source对应InputStream&#xff0c;即负责将数据读出&#xff0c;是一个输出方&#xff08;所以只有source.read方法&#xff09;。sink对应outputStream&#xff0c;负责获取数据写入&#xff0c;是一个写入…

RT-Thread Nano在keil Simulator中的仿真

目的&#xff1a;使用STM32CubeMX生成包含RT-Thread Nano内核和FinSH控制台的keil工程&#xff0c;在没有硬件开发板的情况下&#xff0c;通过keil Simulator来运行系统&#xff0c;并通过SHELL来与系统进行交互。 一、使用STM32CubeMX生成RT-Thread Nano工程 官方文档已经说…

C++标准库 -- 动态内存 (Primer C++ 第五版 · 阅读笔记)

C标准库 --动态内存 (Primer C 第五版 阅读笔记&#xff09; 第12章 动态内存------(持续更新)12.1、动态内存与智能指针12.1.1、shared_ptr类12.1.2、直接管理内存12.1.3、shared_ptr和new结合使用12.1.4、智能指针和异常12.1.5、unique_ptr12.1.6、weak_ptr 12.2、动态数组1…

网络通信之网络层与数据链路层

文章目录 讲在前面网络层网络层概述IP协议格式网段划分公有IP、私有IP、特殊IP理解路由 数据链路层MAC地址以及MAC帧&#xff08;以太网帧&#xff09;MTU协议MTU对IP和TCP协议的影响ARP协议及其作用 涉及到的相关协议DNS协议&#xff08;应用层&#xff09;NAT与NAPT协议 总结…

BEV (0)---DETR

1 DETR 1.1 DETR处理流程 1.1.1 将图像输入给Backbone获得图像特征与位置编码 ①. 对给定的输入图像通过resnet进行特征提取&#xff0c;最终得到特征图C5∈RBx2048xhxw,其中h、w为输入图像尺寸得1/32。随后再用一层11卷积压缩一下通道&#xff0c;得到特征图P5∈RBx256xhxw。…

jvm调优策略

jvm调优主要是内存管理方面的调优&#xff0c;包括各个代的大小&#xff0c;GC策略等。 代大小调优 JVM 中最大堆大小有三方面限制&#xff1a;相关操作系统的数据模型&#xff08;32-bt还是64-bit&#xff09;限制&#xff1b;系统的可用虚拟内存限制&#xff1b;系统的可用物…

数据结构学习记录——什么是堆(优先队列、堆的概念、最大堆最小堆、优先队列的完全二叉树表示、堆的特性、堆的抽象数据类型描述)

目录 优先队列 若采用数组或链表实现优先队列 数组 链表 有序数组 有序链表 总结 若采用二叉搜索树来实现优先队列 最大堆 堆的概念 优先队列的完全二叉树表示 堆的两个特性 结构性 有序性 【例】最大堆和最小堆 【例】不是堆 堆的抽象数据类型描述 优先队列…

安排超市 -- BFS分割搜索

4.安排超市 给定一个n*n的地图。地图是上下左右四联通的&#xff0c;不能斜向行走&#xff1a; *代表障碍&#xff0c;不可通行。 .代表路&#xff0c;可以通行。 #代表房子。房子也是可以通行的。 小红现在需要在一些地方安排一些超市&#xff08;不能安排在障碍物上&#xf…

山东专升本计算机第七章-计算机网络基础

计算机网络基础 计算机网络系统 考点 6 计算机网络硬件 主体设备 • 称为主机 • 一般可分为中心站&#xff08;又称服务器&#xff09;和工作站&#xff08;客户机&#xff09; 连接设备 • 网卡 • 工作在数据链路层 • 网卡又称网络适配器&#xff0c;是连接主机和网…

【C++初阶】引用

一.概念 引用就是取别名&#xff0c;在语法上它不会开空间&#xff0c;而是和它引用的变量共用同一块空间。对引用的操作也就是对原来变量的操作。就像现实生活中给人取外号一样&#xff0c;不管是喊外号还是本名&#xff0c;指的都是那个人。 二.引用特性 1.引用类型必须和引用…

Java8 新特性讲解

一、Lambda表达式 Lambda 是一个匿名函数&#xff0c;我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。使用它可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格&#xff0c;使Java的语言表达能力得到了提升。 二、函数式接口 &#…

【网课平台】Day15.Devops:持续集成与持续交付

文章目录 一、Devops1、什么是Devops2、什么是CI/CD3、Devops方案参考 二、人工部署1、项目打jar包2、生成镜像、创建容器 三、自动化部署1、代码提交到git2、修改pom.xml文件3、前端部署 一、Devops 1、什么是Devops 一个软件的生命周期包括&#xff1a;需求分析阶、设计、开…

SpringCloud:ElasticSearch之集群

单机的elasticsearch做数据存储&#xff0c;必然面临两个问题&#xff1a;海量数据存储问题、单点故障问题。 海量数据存储问题&#xff1a;将索引库从逻辑上拆分为N个分片&#xff08;shard&#xff09;&#xff0c;存储到多个节点单点故障问题&#xff1a;将分片数据在不同节…

【原创】运维的终点是开发~chatGPT告诉你真相

文章目录 软件技术岗位鄙视链&#xff0c;你在哪层呢&#xff1f;让chatGPT告诉你运维工作好&#xff0c;还是开发工作好问它几个问题1. 一个三年运维成长的案例和薪资2. 一个三年开发成长的案例和薪资3. 一个五年运维成长的案例和薪资4. 一个五年开发成长的案例和薪资5. 一个十…

云分析迁移:顺应需求

云提供了对新分析功能、工具和生态系统的访问&#xff0c;可以快速利用这些功能、工具和生态系统来测试、试点和推出新产品。然而&#xff0c;尽管迫在眉睫&#xff0c;但企业在将分析迁移到云时仍感到担忧。组织正在寻找能够帮助他们分配资源和集成业务流程的服务提供商&#…