提示词工程进阶
1.零样本提示
如今,经过大量数据训练并调整指令的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))
2.少样本提示
虽然大型语言模型展示了惊人的零样本能力,但在使用零样本设置时,它们在更复杂的任务上仍然表现不佳。少样本提示可以作为一种技术,以启用上下文学习,我们在提示中提供演示以引导模型实现更好的性能。
生成文本:ChatGPT可以生成与给定主题相关的文章、新闻、博客、推文等等。您可以提供一些关键词或主题,然后ChatGPT将为您生成相关的文本。
语言翻译:ChatGPT可以将一种语言的文本翻译成另一种语言。
问答系统:ChatGPT可以回答您提出的问题,无论是事实性的问题、主观性的问题还是开放性的问题。
对话系统:ChatGPT可以进行对话,您可以与ChatGPT聊天,让它回答您的问题或某个话题进行讨论。
摘要生成:ChatGPT可以从较长的文本中生成摘要,帮助您快速了解文章的主要内容。
文本分类:ChatGPT可以将一些给定的文本分类到不同的类别中,例如新闻、体育、科技等等。
文本纠错:ChatGPT可以自动纠正文本中的拼写错误和语法错误,提高文本的准确性。
3.少样本提示的限制
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。
这没用。似乎少样本提示不足以获得这种类型的推理问题的可靠响应。上面的示例提供了任务的基本信息。如果仔细观察,我们会发现引入的任务类型涉及几个更多的推理步骤。换句话说,如果我们将问题分解成步骤并向模型演示,这可能会有所帮助。
4.链式思考(思维链COT)
链式思考(COT)提示通过中间推理步骤实现了复杂的推理能力。您可以将其与少样本提示相结合,以获得更好的结果,以便在回答之前进行推理的更复杂的任务。


5.少样本思维链(Few-shot Cot)
上面的案例我们调整为如下:
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))

6.零样本COT提示
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))

7.自我一致性(自洽性)
一种对抗「幻觉」的手段。就像我们做数学题,要多次验算一样。
- 同样 prompt 跑多次
- 通过投票选出最终结果
prompt = """
约翰发现10个数字的平均值是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)
8.思维树(Tree-of-thought,ToT)
对于需要探索或预判战略的复杂任务来说,传统或简单的提示技巧是不够的。思维树基于思维链提示进行了总结,引导语言模型探索把思维作为中间步骤来解决通用问题。
ToT(Tree of Thought)维护着一棵思维树,思维由连贯的语言序列表示,这个序列就是解决问题的中间步骤。使用这种方法,LM能够自己对严谨推理过程的中间思维进行评估。LM将生成及评估思维的能力与搜索算法(如广度优先搜索和深度优先搜索)相结合,在系统性探索思维的时候可以向前验证和回溯。

- 在思维链的每一步,采样多个分支
- 拓扑展开成一棵思维树
- 判断每个分支的任务完成度,以便进行启发式搜索
- 设计搜索算法
- 判断叶子节点的任务完成的正确性

浙公网安备 33010602011771号