摘要
随着大模型技术在各领域的广泛应用,大模型在逻辑推理方面的不足逐渐暴露出来。2022年Jason Wei等人在论文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models(自我一致性提升了语言模型中的思维链推理能力)》中提出了思维链(CoT)的概念,它提出,如果生成一系列的中间推理步骤,就能够显著提高大型语言模型进行复杂推理的能力。本文使用豆包大模型的API接口,对比了同一场景下大模型在使用Few-Shot CoT、Zero-Shot CoT、不使用CoT三种提示时的输出,验证了思维链可以在一定程度上提高大模型的推理能力,使其输出更加准确。
关键词
大模型 思维链 优化 Few-Shot Zero-Shot 提示工程
引言
近年来,以ChatGPT为首的一系列大语言模型在各领域受到广泛的应用,但是大语言模型在复杂问题推理上的不足也逐渐暴露出来。需要大模型生成优质的回答往往需要优质的提示模板作为前置条件,思维链作为提示工程中重要的一部分,可以在一定程度上提高大模型的推理能力,使其输出优质的回答。
这里我们设定了一个顾客购买鲜花的场景,来验证思维链是否可以增强大模型的思考能力,使其输出更优质的回答。
相关工作
2022年Jason Wei等人在论文《Chain-of-Thought Prompting Elicits Reasoning in Large Language Models(自我一致性提升了语言模型中的思维链推理能力)》中提出了思维链(CoT)的概念,它提出,如果生成一系列的中间推理步骤,就能够显著提高大型语言模型进行复杂推理的能力。
Takeshi Kojima等人在论文《Large Language Models are Zero-Shot Reasoners》(大语言模型是零样本推理者)中提出,只要简单告诉模型“让我们一步步的思考(Let's think step by step)”,模型就能够给出更好的答案。
本研究将使用少样本和零样本的方法来对大模型进行提示,验证这两种方法是否可以提升模型思考的能力。
6. 方法
思维链的概念:Chain-of-Thought(CoT)是一种改进的Prompt技术,目的在于提升大模型LLMs在复杂推理任务上的表现,对于复杂问题尤其是复杂的数学题大模型很难直接给出正确答案。如算术推理(arithmetic reasoning)、常识推理(commonsense reasoning)、符号推理(symbolic reasoning),COT通过要求模型在输出最终答案之前,显式输出中间逐步的推理步骤这一方法来增强大模型的算数、常识和推理能力。简单,但有效。
Few-Shot CoT:简单的在提示中提供了一些链式思考示例(Chain-of-Thought Prompting),足够大的语言模型的推理能力就能够被增强。
Zero-Shot CoT:只是简单的告诉模型一步一步的思考,并没有给出提示示例。
7. 实验
实验设置:使用LangChain框架中内置的ChatPromptTemplate类来生成对应的提示模板、使用豆包大模型提供的API接口来输入提示获取输出。
实验环境:Python3.10、LangChain 0.2.16
零样本提示模板:请你一步一步的思考。
少样本提示模板:作为一个为花店电商公司工作的AI助手,我的目标是帮助客户根据他们的喜好做出明智的决定。
我会按部就班的思考,先理解客户的需求,然后考虑各种鲜花的涵义,最后根据这个需求,给出我的推荐。
同时,我也会向客户解释我这样推荐的原因。
示例 1:
人类:我想找一种象征爱情的花。
AI:首先,我理解你正在寻找一种可以象征爱情的花。在许多文化中,红玫瑰被视为爱情的象征,这是因为它们的红色通常与热情和浓烈的感情联系在一起。因此,考虑到这一点,我会推荐红玫瑰。红玫瑰不仅能够象征爱情,同时也可以传达出强烈的感情,这是你在寻找的。
示例 2:
人类:我想要一些独特和奇特的花。
AI:从你的需求中,我理解你想要的是独一无二和引人注目的花朵。兰花是一种非常独特并且颜色鲜艳的花,它们在世界上的许多地方都被视为奢侈品和美的象征。因此,我建议你考虑兰花。选择兰花可以满足你对独特和奇特的要求,而且,兰花的美丽和它们所代表的力量和奢侈也可能会吸引你。
不使用思维链的提示模板:你是一个为花店电商公司工作的AI助手, 你的目标是帮助客户根据他们的喜好做出明智的决定。
8. 结果
少样本提示思维链的模型输出:首先,我了解到你想为喜欢粉色和紫色的女朋友购买花。考虑到她的喜好,我建议你选择粉色和紫色的康乃馨。康乃馨是一种非常受欢迎的花卉,它们有许多不同的颜色和品种。粉色康乃馨通常被视为爱情和浪漫的象征,而紫色康乃馨则代表着神秘和高贵。选择粉色和紫色的康乃馨可以满足你女朋友对颜色的喜好,同时也可以传达出你对她的爱和关心。此外,康乃馨的花期较长,这意味着你的女朋友可以在较长的时间内欣赏到这些美丽的花朵。希望我的建议对你有所帮助!
零样本提示思维链的模型输出:好的,以下是一些建议:1. 粉色和紫色的花束:选择粉色和紫色的花朵组成花束,这是最直接的选择。可以包括粉色玫瑰、紫色康乃馨、粉色百合等。2. 混合花束:除了粉色和紫色的花朵,还可以加入一些其他颜色的花朵来增加层次感和丰富性。例如,白色的花朵可以增加清新感,黄色的花朵可以增加活力。3. 特定品种的花:如果你的女朋友有特别喜欢的花种,你可以选择以这些花为主,再搭配一些粉色和紫色的花朵。例如,如果她喜欢郁金香,你可以选择粉色和紫色的郁金香花束。4. 永生花:永生花是经过特殊处理的花朵,可以保持长时间的美丽。你可以选择粉色和紫色的永生花,作为一份特别的礼物。5. 个性化花束:根据你女朋友的兴趣爱好或个性特点,设计一个个性化的花束。例如,如果她喜欢音乐,你可以在花束中加入一些音符形状的花朵。6. 花盒:除了花束,你还可以选择花盒。花盒可以更加精致和美观,而且可以更好地保护花朵。7. 添加配饰:为了让花束更加特别,你可以添加一些配饰,如丝带、蝴蝶结、小熊等。在选择花朵时,要注意花朵的新鲜度和质量。你可以选择信誉好的花店或电商平台,确保花朵的品质和送达时间。同时,你也可以根据自己的预算来选择合适的花束。希望这些建议对你有所帮助,祝你能为你的女朋友挑选到一份满意的礼物!
不使用思维链的模型输出:对于喜欢粉色和紫色的女朋友,以下是一些建议:1. 粉色和紫色的玫瑰:玫瑰是表达爱意的经典花卉,粉色和紫色的玫瑰可以传达出浪漫和温柔的情感。2. 粉色和紫色的康乃馨:康乃馨代表着爱、魅力和尊敬,是一种非常受欢迎的花卉。3. 粉色和紫色的百合:百合象征着纯洁和高贵,是一种非常美丽的花卉。4. 粉色和紫色的郁金香:郁金香是一种非常优雅的花卉,粉色和紫色的郁金香可以传达出浪漫和优雅的情感。5. 粉色和紫色的紫罗兰:紫罗兰代表着永恒的美和爱,是一种非常浪漫的花卉。6. 粉色和紫色的满天星:满天星是一种非常小巧可爱的花卉,粉色和紫色的满天星可以增加花束的层次感和浪漫感。你可以根据你女朋友的喜好和你们之间的关系,选择适合的花卉来表达你的爱意。同时,你也可以考虑添加一些绿叶植物来增加花束的层次感和美观度。
9. 讨论
零样本提示模板的输出较为直接,列出几种推荐方案,但缺乏具体的推理过程,仅简单描述推荐理由,适合快速提供建议。
少样本提示模板的输出则通过逐步分析客户需求、结合花朵寓意和推荐逻辑,展现了清晰的思维链,更贴近情景化的帮助,显得更有针对性和说服力。
不使用思维链的模板输出虽然列出多种选择,但未明确关联推荐原因和客户需求,显得稍微机械化。
10. 结论
通过观察这一场景下不同提示的模型输出可以发现,少样本提示模板最适合需要提供情景化、个性化和逻辑清晰服务的场景,因为它通过逐步分析客户需求并解释推荐理由,更具针对性和说服力;零样本提示模板适合快速提供建议的情况,直接高效但缺乏深入推理;不适用思维链的模板适合需要简洁罗列多种选项的场景,但推荐过程略显机械化。
我们可以认为零样本思维链提示和少样本思维链提示都可以一定程度上提高模型的思考能力,但是零样本思维链提示的提示模板更为简单,可以适配更多的使用场景。而少样本思维链提示的输出结果虽然逻辑性更强,但是需要针对不同任务编写不同的提示模板,泛化能力较差。
12. 参考文献
[1] T. Kojima, S. S. Gu, M. Reid, Y. Matsuo, and Y. Iwasawa, "Large language models are zero-shot reasoners," in NeurIPS 2022.
[2] T. Kojima, S. S. Gu, M. Reid, Y. Matsuo, and Y. Iwasawa, "Large language models are zero-shot reasoners," arXiv preprint arXiv:2205.11916, 2022.
13. 附录
# 设置环境变量和API密钥
import os
# os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
# 创建聊天模型
from langchain_core.messages import chat, human
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
model=os.environ.get("LLM_MODELEND"),
)
# 设定 AI 的角色和目标
role_template = (
"你是一个为花店电商公司工作的AI助手, 你的目标是帮助客户根据他们的喜好做出明智的决定"
)
# CoT 的关键部分,AI 解释推理过程,并加入一些先前的对话示例(Few-Shot Learning)
cot_template = """
作为一个为花店电商公司工作的AI助手,我的目标是帮助客户根据他们的喜好做出明智的决定。
我会按部就班的思考,先理解客户的需求,然后考虑各种鲜花的涵义,最后根据这个需求,给出我的推荐。
同时,我也会向客户解释我这样推荐的原因。
示例 1:
人类:我想找一种象征爱情的花。
AI:首先,我理解你正在寻找一种可以象征爱情的花。在许多文化中,红玫瑰被视为爱情的象征,这是因为它们的红色通常与热情和浓烈的感情联系在一起。因此,考虑到这一点,我会推荐红玫瑰。红玫瑰不仅能够象征爱情,同时也可以传达出强烈的感情,这是你在寻找的。
示例 2:
人类:我想要一些独特和奇特的花。
AI:从你的需求中,我理解你想要的是独一无二和引人注目的花朵。兰花是一种非常独特并且颜色鲜艳的花,它们在世界上的许多地方都被视为奢侈品和美的象征。因此,我建议你考虑兰花。选择兰花可以满足你对独特和奇特的要求,而且,兰花的美丽和它们所代表的力量和奢侈也可能会吸引你。
"""
zot_template = '''请你一步一步的思考。'''
from langchain.prompts import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate,
)
system_prompt_role = SystemMessagePromptTemplate.from_template(role_template)
system_prompt_cot = SystemMessagePromptTemplate.from_template(cot_template)
system_prompt_zot = SystemMessagePromptTemplate.from_template(zot_template)
# 用户的询问
human_template = "{human_input}"
human_prompt = HumanMessagePromptTemplate.from_template(human_template)
# 将以上所有信息结合为一个聊天提示
chat_prompt_cot = ChatPromptTemplate.from_messages(
[system_prompt_role, system_prompt_cot, human_prompt]
)
chat_prompt_zot = ChatPromptTemplate.from_messages(
[system_prompt_role, system_prompt_zot, human_prompt]
)
chat_prompt = ChatPromptTemplate.from_messages(
[system_prompt_role, human_prompt]
)
prompt_cot = chat_prompt_cot.format_prompt(
human_input="我想为我的女朋友购买一些花。她喜欢粉色和紫色。你有什么建议吗?"
).to_messages()
prompt_zot = chat_prompt_zot.format_prompt(
human_input="我想为我的女朋友购买一些花。她喜欢粉色和紫色。你有什么建议吗?"
).to_messages()
prompt = chat_prompt.format_prompt(
human_input="我想为我的女朋友购买一些花。她喜欢粉色和紫色。你有什么建议吗?"
)
# 接收用户的询问,返回回答结果
response_cot = llm(prompt_cot)
print(response_cot)
response_zot = llm(prompt_zot)
print(response_zot)
response = llm(prompt)
print(response)