个人理解: 输入少量样例/ 输出结果的格式。模型会给出相应的回答
提示模版:
- prompttemplate string提示
类似于上节课的代码
- Chatprompttemplate 聊天提示
可以用langchain提供的消息角色。
prompt_template = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
- FewShotPromptTemplate 少量样本提示
通过样例创建提示模版 会自动匹配key 把这一大坨给大模型,ta就会进行有端联想。。。
使用示例选择器 先进行一次比较把相关度高的信息发给llm 减少tokens的浪费
总的来说,提供示例对于解决某些任务至关重要,通常情况下,FewShot的方式能够显著提高模型回答的质量。不过,当少样本提示的效果不佳时,这可能表示模型在任务上的学习不足。在这种情况下,我们建议对模型进行微调或尝试更高级的提示技术。
Few-Shot CoT
人工手动写出推理,模型也会跟着推理,提高准确率。
Zero-Shot CoT
让模型一步步思考,不要一步登天。
简单总结一下:Few-Shot CoT,指的就是在带有示例的提示过程中,加入思考的步骤,从而引导模型给出更好的结果。而Zero-Shot CoT,就是直接告诉模型要一步一步地思考,慢慢地推理。
自己实现的Zero-Shot CoT
发现还是两种方式一起使用生成的内容效果更好一些
自己实现ToT。效果貌似还不错!!
"""
"""
# 设置环境变量和API密钥
import os
# os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
# 创建聊天模型
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助手,我的目标是帮助客户根据他们的喜好做出明智的决定。
假设一个顾客在鲜花网站上询问:“我想为我的妻子购买一束鲜花,但我不确定应该选择哪种鲜花。她喜欢淡雅的颜色和花香。”
你应该按照下面的思维步骤一步步来进行推荐。
AI :
思维步骤1:理解顾客的需求。
顾客想为妻子购买鲜花。
顾客的妻子喜欢淡雅的颜色和花香。
思维步骤2:考虑可能的鲜花选择。
候选1:百合,因为它有淡雅的颜色和花香。
候选2:玫瑰,选择淡粉色或白色,它们通常有花香。
候选3:紫罗兰,它有淡雅的颜色和花香。
候选4:桔梗,它的颜色淡雅但不一定有花香。
候选5:康乃馨,选择淡色系列,它们有淡雅的花香。
思维步骤3:根据顾客的需求筛选最佳选择。
百合和紫罗兰都符合顾客的需求,因为它们都有淡雅的颜色和花香。
淡粉色或白色的玫瑰也是一个不错的选择。
桔梗可能不是最佳选择,因为它可能没有花香。
康乃馨是一个可考虑的选择。
思维步骤4:给出建议。
“考虑到您妻子喜欢淡雅的颜色和花香,我建议您可以选择百合或紫罗兰。淡粉色或白色的玫瑰也是一个很好的选择。希望这些建议能帮助您做出决策!”
"""
from langchain.prompts import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate,
)
system_prompt_role = SystemMessagePromptTemplate.from_template(role_template)
system_prompt_cot = SystemMessagePromptTemplate.from_template(cot_template)
# 用户的询问
human_template = "{human_input}"
human_prompt = HumanMessagePromptTemplate.from_template(human_template)
# 将以上所有信息结合为一个聊天提示
chat_prompt = ChatPromptTemplate.from_messages(
[system_prompt_role, system_prompt_cot, human_prompt]
)
prompt = chat_prompt.format_prompt(
human_input="我想为我的男朋友购买一些花。他喜欢蓝色和白色。他喜欢有大的花瓣的花。他喜欢有浓烈花香的花。我要组成一束花,你有什么选择建议吗?"
# human_input="我想为我的好基友购买一些花。他喜欢玩游戏。你有什么建议吗?"
).to_messages()
# 接收用户的询问,返回回答结果
response = llm(prompt)
print(response)
response = llm(prompt) content='思维步骤 1:理解顾客的需求。\n- 顾客想为男朋友购买花。\n- 顾客的男朋友喜欢蓝色和白色。\n- 喜欢有大的花瓣的花。\n- 喜欢有浓烈花香的花。\n\n思维步骤 2:考虑可能的鲜花选择。\n- 候选 1:蓝色妖姬,有蓝色且花瓣较大,花香较浓。\n- 候选 2:白百合,白色,花瓣大,花香浓郁。\n- 候选 3:白玫瑰,白色,花瓣较大,有一定香味。\n- 候选 4:大花蕙兰,有白色品种,花瓣大,花香较浓。\n\n思维步骤 3:根据顾客的需求筛选最佳选择。\n- 蓝色妖姬符合蓝色和大花瓣、浓烈花香的要求。\n- 白百合符合白色、大花瓣和浓烈花香的要求。\n- 白玫瑰符合白色和大花瓣,但花香相对较淡。\n- 大花蕙兰符合白色、大花瓣和较浓花香的要求。\n\n思维步骤 4:给出建议。\n“根据您男朋友的喜好,蓝色妖姬、白百合和大花蕙兰都是不错的选择。蓝色妖姬有独特的蓝色和大花瓣,花香浓郁;白百合颜色洁白,花瓣大且花香浓郁;大花蕙兰有白色品种,花瓣大,花香也较浓。您可以根据自己的喜好来选择组成一束花。”' additional_kwargs={'refusal': None} response_metadata={'token_usage': {'completion_tokens': 314, 'prompt_tokens': 405, 'total_tokens': 719}, 'model_name': 'Doubao-pro-32k', 'system_fingerprint': '', 'finish_reason': 'stop', 'logprobs': None} id='run-74baa3be-b6d4-4b80-9475-ebd6fb87aa59-0' usage_metadata={'input_tokens': 405, 'output_tokens': 314, 'total_tokens': 719}