什么是好的 GPT 提示词?ChatGPT 提示词指南
好的提示词=角色(能力)+上下文+详细的指令说明+风格+输出格式
角色(必填):可以给模型提供特定的能力,让它更好的解决我们的问题,在声明角色后,最好也描述一些它的能力。
上下文(选填):可以写背景信息,问题描述等,可以让大模型更加了解你的指令,不然它会去猜测你的意图,给出发散性的答案。
详细的指令(必填):指令说的越详细,模型的输入结果和你的预期才会更加一致,多利用下面的技巧。
风格(选填):风格可以给你的大模型赋能,让输出结果发生质的变化。
输出格式(选填):输出格式可以是文本,代码,json,markdown或者你自定义的格式等。
并不是每一条指令都需要包含所有部分,你的任务越复杂可能需要的部分越多。
每个部分的顺序可变,根据任务可以适当调整。
# 策略和技巧
策略:清晰的说明
技巧1:使用分隔符
分割符:单引号" ",三引号""" """ ,大括号{ },XML 标记,节标题等
使用分割符为了让大模型更好的理解你的命令,消除歧义。
这个技巧在提示词中会大量用到,很重要。
技巧2:提供示例
自己表述输出格式的效果可能不如一个示例的效果。
示例:接口字段别名改写
你现在是我的sql助手,我正在写一个sql接口,请你帮我改写每个字段,
具体要求:你需要按照格式示例改写下面的字段,只需要输出改写后的结果就行。
字段:
"
cuid,
gender,
native_place,
level_id
"
格式示例:"
SELECT
t.uesr_id as userId,
t.name as name
FROM user t
"
技巧3:固定长度
如果你想模型回答内容简洁,可以固定长度短一点,例如用100字总结这段话。
如果你想模型回答内容很多,可以固定长度长一点,例如用800字写一篇文章。
技巧4:参考文本
可以让模型只参考你给的文本进行回答,不用其自身的知识。
使用场景:客服问题,参考文章回答问题,随机抽题或者补充一些大模型可能不知道的知识。
示例:扮演面试官随机抽题
你现在是一名精通大数据数据仓库的面试官,我今天参加你的面试,你准备了一些题目,请你从下面的题目中随机抽取一道给我,当我回答next的时候,你需要再抽一道题给我。
具体要求:
1.你必须从下面的题目中抽取题目,不可以自己生成;
2.如果题目都已经抽完了,你需要告诉我面试已结束;
3.你不需要对题目做任何解释,只需要给出原题就行。
题目:"
1.hdfs的写原理
2.hdfs的读原理
3.介绍hadoop
4.数仓的意义
"
# 策略:将复杂任务拆分为简单的子任务
技巧1:任务分类拆分
例如:客服
你将扮演一个客服,你需要先询问用户查询命令,当用户输入一个查询命令时,你需要告诉用户查询分类的主要类别和次要类别。
主要类别:计费、技术支持、帐户管理或一般查询。
计费二级类别:
-取消订阅或升级
-添加付款方式
-收费说明
-对指控提出异议
技术支持二级类别:
-故障 排除
-设备兼容性
-软件更新
账户管理二级类别:
-密码重置
-更新个人信息
-关闭账户
-账户安全
一般查询次要类别:
-产品信息
-定价
-反馈
-与人交谈
根据客户查询的分类,可以向 GPT 模型提供一组更具体的指令来处理后续步骤。例如,假设客户需要“故障排除”方面的帮助。这样就可以把不同的问题按照类别分开,gpt只需要处理用户查询的问题即可。
技巧2:步骤拆分,使用思维链
将一个复杂问题拆分成多个小问题,同时让模型一个个解决,给他思考的时间,它的输出结果会更加好。
示例:
你现在是一名时间序列数据分析师,我正在学习分析时间序列数据的趋势,你需要辅助我学习, 要求如下: 1.详细介绍一个时间序列数据趋势这个概念; 2.有哪些方法可以分析趋势; 3.选择一种常用的分析趋势的方法,用python实现; 让我们一步一步思考。
gpt输出:
一、时间序列数据趋势的概念:
时间序列数据是按照时间顺序收集的数据,可以用于研究某个或某些变量随时间变化的模式。这些数据可能是在固定频率(每日、每月或每年)或不规则间隔收集的。
在时间序列数据中,“趋势”是一个关键概念。趋势描述的是数据随时间变化的长期运动或方向。比如,公司的年销售额可能显示出上升趋势,意味着销售额随着时间的推移在增加。或者,一种疾病的发病率可能显示出下降趋势,表明该疾病的发病率随着时间的推移在减少。这些都是趋势的例子。
二、分析时间序列数据趋势的方法:
移动平均法(Moving Averages):移动平均是一种在时间序列数据中平滑数据并识别隐藏的趋势和模式的方法。
指数平滑法(Exponential Smoothing):指数平滑是一种用于时间序列数据的平滑方法,特别适用于对未来点进行预测。
自回归移动平均模型(ARIMA):ARIMA模型是一种可以捕获一系列不同时间序列数据的模式的统计模型。
线性回归模型:线性回归也可以用来识别趋势,将时间或时间段作为解释变量。
三、分析趋势的Python实现——移动平均法:
这是一个Python示例,演示如何使用pandas的rolling函数计算移动平均来识别数据的趋势。
import pandas as pd
import matplotlib.pyplot as plt
#假设我们有一个时间序列数据集,日期作为索引
data = {
'date': pd.date_range(start='01-01-2020', periods=100),
'value': pd.Series(range(100)) + pd.Series(range(100)).apply(lambda x: x**0.5)
}
df = pd.DataFrame(data).set_index('date')
#计算7天移动平均
df['7_day_moving_avg'] = df['value'].rolling(window=7).mean()
#计算30天移动平均
df['30_day_moving_avg'] = df['value'].rolling(window=30).mean()
#画出原始数据和移动平均线
df[['value', '7_day_moving_avg', '30_day_moving_avg']].plot()
plt.show()
在这个例子中,我们创建了一个简单的时间序列数据集,并计算了7天和30天的移动平均。我们然后将原始数据和移动平均线绘制在同一图表中。
# 策略:给gpt思考时间
技巧1:从第一性原理出发,指示模型在匆忙得出结论之前制定自己的解决方案
例如我们在修改代码时,模型会分析你的代码的错误,然后在你的代码继续上进行修改,但如果你的代码压根逻辑就不对,错误就很多,gpt就会一直帮你缝缝补补。如果你让它先自己给出解题方法,然后跟你的方法对比找出问题,你可能会看到意向不到的效果。
示例:
你现在是我的力扣算题助手,我正在做一道力扣题目,这是我的代码,我觉得我的代码错误很大,请你先自己做一遍,然后再对比你的代码和我的代码,然后分析我代码中的错误并给出修改代码。
题目:"
输入题目
"
我的代码:"
输入代码
"
技巧2:使用内心独白或一系列查询来隐藏模型的推理过程
前面的策略表明,模型在回答特定问题之前详细推理问题有时很重要。对于某些应用程序,模型用于得出最终答案的推理过程不适合与用户共享。例如,在辅导申请中,我们可能希望鼓励学生制定自己的答案,但模型对学生解决方案的推理过程可能会向学生揭示答案。
内心独白是一种可以用来缓解这种情况的策略。内心独白的想法是指示模型将输出中要对用户隐藏的部分放入结构化格式中,以便于解析它们。然后,在向用户呈现输出之前,将解析输出,并且仅使部分输出可见。
# 策略:分段分次输入
无论是gpt3还是gpt4,每次输入的长度都有限制。
分段输入
如果文本过长,我们就无法一次性输入,需要将一个长文本分段输入。
示例指令:
你现在是我的文章助手,你具备深度概括和总结一篇长文章的能力,我会将一篇长文章分成3段输入给你,你收到段落后,只需要回答已学习,当我发送指令{请总结}时,你再总结这篇文章,在总结前你需要深入理解这篇文章,然后通俗易懂,简洁地总结文章,字数要求200字。如果你明白了,请复述指令。
分次输入
如果我们想要输入多个短文本给gpt,但合起来可能就超出了输入长度限制,这就需要分次输入。
示例:
你现在是我的文章助手,你具备深度概括和总结多篇文章的能力,我会将3篇文章分三次输入给你,你收到一篇文章后,只需要回答已学习,当我发送指令{请总结}时,你再总结这篇文章,在总结前你需要深入理解这3篇文章,然后通俗易懂,简洁地总结这3篇文章,字数要求200字。如果你明白了,请复述指令。
我们通过这条指令只是打破了gpt对一条指令的输入长度的限制,但如果超过了gpt的上下文记忆长度,gpt可能就记不得前面的内容了。这一点需要注意。所以这个方法还是有限制的。
我的笔记