夜雨聆风学习资料网

ARTICLE · 1128970

【知识】langchain的3种提示词模板

【知识】langchain的3种提示词模板
你将收获:
场景1:多语种翻译,提示词只想变一部分咋办?
  对应本文的PromptTemplate示例,设置系统提示词和人类提示词部分,以及半格式化提示词功能
场景2:回答风格不统一怎么办?
  希望某类问题回复风格统一,同时代码易维护、易读、易修改
对应FewShotPromptTemplate示例

本文目录
langchain要掌握哪些核心组件?
PromptTemplate示例
ChatPromptTemplate示例
FewShotPromptTemplate示例

langchain要掌握哪些核心组件?
6个部分:
1、模型包装器(输入、输出)
2、数据连接
3、链
4、记忆
5、代理
6、中间件
langchain的模型包装器包含3个部分:
提示词模板--模型封装--结果解析器

使用提示词模板管理提示词,好处是:易看、易懂、易复用维护
提示词模板有三种:LLM提示词、聊天提示词、少样本提示词
记忆的话,就记住最基础的是PromptTemplate,聊天的模板就加一个Chat,变成ChatPromptTemplate
PromptTemplate示例:
以翻译场景为例
# 字符串提示词模板from langchain_community.chat_models import ChatTongyifrom langchain_core.prompts import PromptTemplatefrom dotenv import load_dotenvload_dotenv()# 1 创建模型客户端model = ChatTongyi()# 2 构建提示词# prompt = "你是谁?"# 字符串提示词模板prompt = PromptTemplate(template="你是一个翻译助手,请将以下内容翻译成{language}:{text}")# 传入参数fact_prompt = prompt.format(language="中文", text="I am a programmer, I'm learning langchain")result = model.invoke(fact_prompt)# 3 打印结果print(result.content)
这里补充一个半格式化提示词
意思就是,有一半提示词的传参是固定的,另一半是可变的,这样一来可以一次输出多种结果
依然是用PromptTemplate这个类方法,只是多了一个参数input_variables来表明参数,用partitial方法来提前锁死其中一个参数
from langchain_community.chat_models import ChatTongyi # 别导错from langchain_core.prompts import PromptTemplatefrom dotenv import load_dotenvload_dotenv()# 1 模型客户端model = ChatTongyi()# 2 提示词prompt_txt = "讲一个关于{date}的小故事:{text}"prompt = PromptTemplate(template=prompt_txt,input_variables=["date","text"])# 3 传参half_prompt = prompt.partial(date="1999-1-10") # partial是langchain自带的函数,提前锁死某个变量print(half_prompt)result = model.invoke(half_prompt.format(text="一个幸福的爱情故事"))print(result.content)print('-'*50)result = model.invoke(half_prompt.format(text="一个悲伤的爱情故事"))print(result.content)# 4 打印
ChatPromptTemplate示例:
from langchain_community.chat_models import ChatTongyifrom langchain_core.prompts import ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplatefrom dotenv import load_dotenvload_dotenv()# 1 创建模型客户端model = ChatTongyi()# 2 构建提示词# prompt = "你是谁?"# 对话提示词模板prompt = ChatPromptTemplate.from_messages(    [#("system","你是一个翻译助手,请将以下内容翻译成{language}:{text}"),        SystemMessagePromptTemplate.from_template("你是一个翻译助手,请将以下内容翻译成{language}:{text}"),#("human","{text}"),        HumanMessagePromptTemplate.from_template("{text}")    ])# 传入参数fact_prompt = prompt.format(language="中文", text="I am a programmer, I'm learning langchain")result = model.invoke(fact_prompt)# 3 打印结果print(result.content)
注意导包别导错了,不用刻意记,直接用鼠标点导入即可
模板这里写法,原来是PromptTemplate,现在是
ChatPromptTemplate.from_message([])
为了防止写错,写系统提示词,直接用⬇️
SystemMessagePromptTemplate.from_template()
为了防止写错,写人类输入提示词,直接用⬇️
HumanMessagePromptTemplate.from_template()
FewShotPromptTemplate示例:
这个模板是给模型一个示例,参照这个示例的格式回答。核心是
记住FewShotPromptTemplate 这个模板里面的参数,然后按照参数补齐所需要的内容即可。
完整的代码如下
from langchain_community.chat_models import ChatTongyifrom langchain_core.prompts import PromptTemplate, FewShotPromptTemplatefrom dotenv import load_dotenvload_dotenv()# 1 大模型客户端client = ChatTongyi()# 2 构建提示词# 示例样本examples = [    {"input":"如何重置密码","output":"密码重置可以通过绑定邮箱重置密码,也可以通过手机号重置密码"},    {"input":"我的设备无法开机怎么办?","output":"故障排除步骤:1,可能是遥控器电池没电 2,确认电源状态 3,确认设备是否被锁屏"},    {"input":"这款产品是否有夜间模式","output":"这款不提供夜间模式,请选择xx款式的产品"},]# 提示词模板examples_prompt_tmplt_txt = "用户问题:{input},AI回答:{output}"prompt_sample = PromptTemplate.from_template(examples_prompt_tmplt_txt)prompt = FewShotPromptTemplate(    prefix="你是一个智能客服,能根据用户问题给出答案",  # 提示词前缀    example_prompt=prompt_sample,  # 提示词模板    examples=examples,  # 示例样本    suffix="现在给你用户提问:{input}, 请告诉我对应的结果",  # 提示词后缀    input_variables=["input"],  # 输入变量)print(prompt.format(input="这款产品有防水模式吗?"))print('-'*50)# 3 传参数result =  client.invoke(prompt.format(input="这款产品有防水模式吗?"))# 4 打印print(result.content)

相关学习资料