如今,经过⼤量数据训练并调整指令的LLM能够执⾏零样本任务。
prompt = """
将文本分类为中性、负面或正面。
文本:我认为这次假期一般。
情感:
"""
# prompt = "中国的首都是哪里?"
# 在上面的提示中,我们没有向模型提供任何示例——这就是零样本能力的作用。
def get_completion(prompt, model="gpt-3.5-turbo"):
messages = [{"role": "user", "content": prompt}]
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=0, # 模型输出的随机性,0 表示随机性最小
)
# print(response)
# print(type(response))
return response.choices[0].message.content
print(get_completion(prompt))
虽然大型语言模型展示了惊人的零样本能力,但在使用零样本设置时,它们在更复杂的任务上仍然表现不佳。少样本提示可以作为一种技术,以启用上下文学习,我们在提示中提供演示以引导模型实现更好的性能.
prompt = """
1. 生成文本:ChatGPT可以生成与给定主题相关的文章、新闻、博客、推文等等。您可以提供一些关键词或主题,然后ChatGPT将为您生成相关的文本。
2. 语言翻译:ChatGPT可以将一种语言的文本翻译成另一种语言。
3. 问答系统:ChatGPT可以回答您提出的问题,无论是事实性的问题、主观性的问题还是开放性的问题。
4. 对话系统:ChatGPT可以进行对话,您可以与ChatGPT聊天,让它回答您的问题或就某个话题进行讨论。
5. 摘要生成:ChatGPT可以从较长的文本中生成摘要,帮助您快速了解文章的主要内容。
6. 文本分类:ChatGPT可以将一些给定的文本分类到不同的类别中,例如新闻、体育、科技等等。
7. 文本纠错:ChatGPT可以自动纠正文本中的拼写错误和语法错误,提高文本的准确性。
请把上面7段话各自的开头几个词,翻译成英文,并按序号输出。例如,第1段话的开头是"生成文本",那么就输出"generate text"
"""
prompt = """
"whatpu"是坦桑尼亚的一种小型毛茸茸的动物。一个使用whatpu这个词的句子的例子是:
我们在非洲旅行时看到了这些非常可爱的whatpus。
"farduddle"是指快速跳上跳下。一个使用farduddle这个词的句子的例子是:
"""
def get_completion(prompt, model="gpt-3.5-turbo"):
messages = [{"role": "user", "content": prompt}]
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=0, # 模型输出的随机性,0 表示随机性最小
)
return response.choices[0].message.content
print(get_completion(prompt))
输出内容:
小孩子们在操场上快速farduddle着,玩得不亦乐乎。
模型通过提供⼀个示例(即1-shot)已经学会了如何执⾏任务。对于更困难的任务,我们可以尝试增加演示(例如3-shot、5-shot、10-shot等)。
prompt = """
这组数字中的奇数加起来是一个偶数:4、8、9、15、12、2、1。
A:答案是False。
这组数字中的奇数加起来是一个偶数:17、10、19、4、8、12、24。
A:答案是True。
这组数字中的奇数加起来是一个偶数:15、32、5、13、82、7、1。
A:
"""
# 这组数字中的奇数加起来是一个偶数:16、11、14、4、8、13、24。
# A:答案是True。
# 这组数字中的奇数加起来是一个偶数:17、9、10、12、13、4、2。
# A:答案是False。
def get_completion(prompt, model="gpt-3.5-turbo"):
messages = [{"role": "user", "content": prompt}]
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=0, # 模型输出的随机性,0 表示随机性最小
)
return response.choices[0].message.content
print(get_completion(prompt))
答案是True。
这没用。似乎少样本提示不足以获得这种类型的推理问题的可靠响应。上面的示例提供了任务的基本信息。如果仔细观察,我们会发现引入的任务类型涉及几个更多的推理步骤。换句话说,如果我们将问题分解成步骤并向模型演示,这可能会有所帮助。
链式思考(CoT)提示通过中间推理步骤实现了复杂的推理能⼒。您可以将其与少样本提示相结合,以获得更好的结果,以便在回答之前进⾏推理的更复杂的任务
标准的prompt
Q:罗杰有5个⽹球。他⼜买了2罐⽹球。每个罐⼦有3个⽹球。有多少他现在有多少个⽹球?
A:答案是11个
Q:⾃助餐厅有23个苹果。如果他们⽤20做午餐,⼜买了6个,他们有多少个苹果?
A:答案是27个
链式思考的prompt
Q:罗杰有5个⽹球。他⼜买了2罐⽹球。每个罐⼦有3个⽹球。他现在有多少个⽹球?
A:罗杰⼀开始有5个球。2罐3个⽹球,等于6个⽹球。5 + 6 = 11。答案是11。
Q:⾃助餐厅有23个苹果。如果他们⽤20做午餐,⼜买了6个,他们有多少个苹果?
A:⾃助餐厅最初有23个苹果。他们使⽤20个做午饭。23 - 20 = 3。他们⼜买了6个苹果,得到3
+ 6= 9。答案是9个。
上面的案例我们调整为如下:
prompt = """
这组数中的奇数加起来是偶数:4、8、9、15、12、2、1。
A:将所有奇数相加(9、15、1)得到25。答案为False。
这组数中的奇数加起来是偶数:17、10、19、4、8、12、24。
A:将所有奇数相加(17、19)得到36。答案为True。
这组数中的奇数加起来是偶数:16、11、14、4、8、13、24。
A:将所有奇数相加(11、13)得到24。答案为True。
这组数中的奇数加起来是偶数:17、9、10、12、13、4、2。
A:将所有奇数相加(17、9、13)得到39。答案为False。
这组数中的奇数加起来是偶数:15、32、5、13、82、7、1。
A:
"""
def get_completion(prompt, model="gpt-3.5-turbo"):
messages = [{"role": "user", "content": prompt}]
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=0, # 模型输出的随机性,0 表示随机性最小
)
return response.choices[0].message.content
print(get_completion(prompt))
输出的结果为:
将所有奇数相加(15、5、13、7、1)得到41。答案为False。
# prompt = """
# 我去市场买了10个苹果。我给了邻居2个苹果和修理工2个苹果。
# 然后我去买了5个苹果并吃了1个。我还剩下多少苹果?
# """
prompt = """
我去市场买了10个苹果。我给了邻居2个苹果和修理工2个苹果。
然后我吃了1个又去买了5个苹果。我还剩下多少苹果?
让我们逐步思考。
"""
# 在上面的提示中,我们没有向模型提供任何示例——这就是零样本能力的作用。
def get_completion(prompt, model="gpt-3.5-turbo"):
messages = [{"role": "user", "content": prompt}]
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=0, # 模型输出的随机性,0 表示随机性最小
)
return response.choices[0].message.content
print(get_completion(prompt))
输出的结果
我买了10个苹果。
我给了邻居2个苹果和修理工2个苹果,所以剩下10 - 2 - 2 = 6个苹果。
我吃了1个苹果,所以还剩下6 - 1 = 5个苹果。
然后我又去买了5个苹果,所以现在总共有5 + 5 = 10个苹果。
所以,我现在还剩下10个苹果。
一种对抗「幻觉」的手段。就像我们做数学题,要多次验算一样。
同样 prompt 跑多次
通过投票选出最终结果
prompt2 = """
现在我70岁了,当我6岁时,我的妹妹是我的年龄的一半。现在我的妹妹多大?请逐步思考
"""
prompt= """
Q:林中有15棵树。林业工人今天将在林中种树。完成后,将有21棵树。林业工人今天种了多少棵树?
A:我们从15棵树开始。后来我们有21棵树。差异必须是他们种树的数量。因此,他们必须种了21-15 = 6棵树。答案是6。
Q:Leah有32块巧克力,她的姐姐有42块。如果他们吃了35块,他们总共还剩多少块?
A:Leah有32块巧克力,Leah的姐姐有42块。这意味着最初有32 + 42 = 74块巧克力。已经吃了35块。因此,他们总共还剩74-35 = 39块巧克力。答案是39。
Q:Jason有20个棒棒糖。他给Denny一些棒棒糖。现在Jason只有12个棒棒糖。Jason给Denny多少棒棒糖?
A:Jason有20个棒棒糖。因为他现在只有12个,所以他必须把剩下的给Denny。他给Denny的棒棒糖数量必须是20-12 = 8个棒棒糖。答案是8。
Q:Shawn有五个玩具。圣诞节,他从他的父母那里得到了两个玩具。他现在有多少个玩具?
A:他有5个玩具。他从妈妈那里得到了2个,所以在那之后他有5 + 2 = 7个玩具。然后他从爸爸那里得到了2个,所以总共他有7 + 2 = 9个玩具。答案是9。
Q:服务器房间里有9台计算机。从周一到周四,每天都会安装5台计算机。现在服务器房间里有多少台计算机?
A:从周一到周四有4天。每天都添加了5台计算机。这意味着总共添加了4 * 5 =
20台计算机。一开始有9台计算机,所以现在有9 + 20 = 29台计算机。答案是29。
Q:Michael有58个高尔夫球。星期二,他丢失了23个高尔夫球。星期三,他又丢失了2个。星期三结束时他还剩多少个高尔夫球?
A:Michael最初有58个球。星期二他丢失了23个,所以在那之后他有58-23 = 35个球。星期三他又丢失了2个,所以现在他有35-2 = 33个球。答案是33。
Q:现在我70岁了,当我6岁时,我的妹妹是我的一半年龄。现在我的妹妹多大?
A:
"""
def get_completion(prompt, model="gpt-3.5-turbo"):
messages = [{"role": "user", "content": prompt}]
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=0, # 模型输出的随机性,0 表示随机性最小
)
return response.choices[0].message.content
print(get_completion(prompt2))
print("="*100)
print(get_completion(prompt))
输出的结果
当我6岁时,我的妹妹是3岁(我的年龄的一半)。
现在我70岁,相差64岁(70-6=64)。
所以现在我的妹妹应该是70-64=6岁+64=70岁。
当你6岁时,你的妹妹是你的一半年龄,即3岁。现在你70岁,所以你的妹妹应该是70-6+3=67岁。所以现在你的妹妹应该是67岁。
prompt = """约翰发现15个数字的平均值是40。
如果每个数字都加上10,那么这些数字的平均值是多少?
请将答案包围在三个反引号中,例如:```123```"""
def get_completion(prompt, model="gpt-3.5-turbo"):
messages = [{"role": "user", "content": prompt}]
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=0, # 模型输出的随机性,0 表示随机性最小
)
return response.choices[0].message.content
for _ in range(5):
response = get_completion(prompt)
print(response)
输出的结果:
对于需要探索或预判战略的复杂任务来说,传统或简单的提示技巧是不够的。思维树基于思维链提示进行了总结,引导语言模型探索把思维作为中间步骤来解决通用问题。
ToT 维护着一棵思维树,思维由连贯的语言序列表示,这个序列就是解决问题的中间步骤。使用这种方法,LM 能够自己对严谨推理过程的中间思维进行评估。LM 将生成及评估思维的能力与搜索算法(如广度优先搜索和深度优先搜索)相结合,在系统性探索思维的时候可以向前验证和回溯。
在思维链的每一步,采样多个分支
拓扑展开成一棵思维树
判断每个分支的任务完成度,以便进行启发式搜索
设计搜索算法
判断叶子节点的任务完成的正确性
利用思维树完成该功能:小明 100 米跑成绩:10.5 秒,1500 米跑成绩:3 分 20 秒,铅球成绩:12 米。他适合参加哪些搏击运动训练。
def get_completion(prompt, model="gpt-4o", temperature=0):
messages = [{"role": "user", "content": prompt}]
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=temperature # 模型输出的随机性,0 表示随机性最小
)
return response.choices[0].message.content
prompt = """
小明100米跑成绩:10.5秒,1500米跑成绩:3分20秒,铅球成绩:12米。他适合参加哪些搏击运动训练?
请根据以上成绩,分析候选人在速度、耐力、力量三方面素质的分档。分档包括:强(3),中(2),弱(1)三档
需要速度强的运动有哪些。给出10个例子,需要耐力强的运动有哪些。给出10个例子,需要力量强的运动有哪些。给出10个例子
分别分析上面给的10个运动对速度、耐力、力量方面素质的要求: 强(3),中(2),弱(1)
根据上面的分析:生成一篇小明适合那种运动训练的分析报告
"""
print(get_completion(prompt))
输出结果:
小明的身体素质分析
根据小明的成绩,我们可以从速度、耐力、力量三个方面进行分档评估:
速度:100米跑成绩 10.5秒
分档:强(3)
分析:10.5秒的100米成绩表明小明具有出色的爆发力和短跑速度。
耐力:1500米跑成绩 3分20秒
分档:中(2)
分析:3分20秒的1500米成绩表明小明有一定的耐力,但并非顶尖水平。
力量:铅球成绩 12米
分档:中(2)
分析:12米的铅球成绩表明小明有一定的力量,但仍有提升空间。
需要速度强的运动(10个例子)
短跑(100米、200米)
拳击
跆拳道
击剑
羽毛球
网球
篮球(后卫)
足球(前锋)
橄榄球(跑锋)
短道速滑
速度、耐力、力量要求分析:
速度:强(3)
耐力:中(2)或弱(1)
力量:中(2)或弱(1)
需要耐力强的运动(10个例子)
长跑(5000米、马拉松)
自行车(公路赛)
铁人三项
游泳(长距离)
越野跑
划船
登山
足球(中场)
篮球(全场跑动)
拳击(多回合比赛)
速度、耐力、力量要求分析:
速度:中(2)或弱(1)
耐力:强(3)
力量:中(2)或弱(1)
需要力量强的运动(10个例子)
举重
铅球
铁饼
摔跤
柔道
力量举
健美
橄榄球(前锋)
篮球(中锋)
攀岩
速度、耐力、力量要求分析:
速度:中(2)或弱(1)
耐力:中(2)或弱(1)
力量:强(3)
小明适合的运动训练分析报告
综合分析:小明的身体素质在速度方面表现突出(强),耐力和力量方面表现中等(中)。因此,他更适合选择那些对速度要求较高,同时对耐力和力量要求适中的运动项目。
推荐运动:
拳击:拳击对速度要求极高,同时需要一定的耐力和力量。小明的爆发力和反应速度非常适合拳击训练。
跆拳道:跆拳道强调快速踢击和移动,小明的速度优势可以充分发挥。
击剑:击剑需要极快的反应速度和爆发力,适合小明的身体素质。
羽毛球:羽毛球对速度和灵活性要求高,耐力和力量需求适中,适合小明。
篮球(后卫):篮球后卫需要快速突破和反应,小明的速度和中等力量可以胜任。
训练建议:
速度训练:继续保持短跑训练,提升爆发力和反应速度。
耐力训练:适当增加中长跑或间歇训练,提升耐力水平。
力量训练:增加核心力量和上肢力量训练,为搏击运动打下基础。
结论:小明适合参与对速度要求较高的搏击运动(如拳击、跆拳道)或球类运动(如羽毛球、篮球)。通过针对性训练,他可以进一步提升耐力和力量,全面发展身体素质。