1. 引入
from langchain.prompts import PromptTemplate
2. 定义模版
1. PromptTemplate 直接实例化
PromptTemplate(
# 字符串类型。使用{}作为占位符
template="你是一个专业的翻译助手,擅长将{input_language}文本准确翻译成{output_language}。",
# 数组。值必须是占位符中的字符串,表示在format时为必填
# 经过测试,该属性可以不写,只要不在partial_variables中出现的值都会自动在这里
input_variables=["input_language"],
# 字典类型。可选。作用:预先固定模版的值,相当于一个默认值,不需要format时输入,如果format中有输入则覆盖此值
partial_variables={"output_language":"德语"}
)
# 结果
# PromptTemplate(input_variables=['input_language'], input_types={}, partial_variables={'output_language': '德语'}, template='你是一个专业的翻译助手,擅长将{input_language}文本准确翻译成{output_language}。')
- 不使用
input_variables
和partial_variables
的示例1
PromptTemplate(
template="你是一个专业的翻译助手,擅长将{input_language}文本准确翻译成{output_language}。"
)
# 结果,可以看到自动将模版加入了input_variables,并且partial_variables没有值
'''
PromptTemplate(
input_variables=['input_language', 'output_language'],
input_types={},
partial_variables={},
template='你是一个专业的翻译助手,擅长将{input_language}文本准确翻译成{output_language}。')
'''
- 不使用
input_variables
的示例2
PromptTemplate(
template="你是一个专业的翻译助手,擅长将{input_language}文本准确翻译成{output_language}。",
partial_variables={"output_language":"德语"}
)
# 结果:input_variables的值是排除了partial_variables的值
'''
PromptTemplate(
input_variables=['input_language'],
input_types={},
partial_variables={'output_language': '德语'},
template='你是一个专业的翻译助手,擅长将{input_language}文本准确翻译成{output_language}。')
'''
2. from_template
和上面的PromptTemplate没有区别
# 定义模板和输入变量
template_str = (
"你是一个专业的翻译助手,擅长将{input_language}文本准确翻译成{output_language}。"
"请翻译以下内容:'{text}'"
)
prompt_template = PromptTemplate.from_template(
# 无需手动写 input_variables,方法会自动提取模板中所有 {} 包裹的变量名
template=template_str,
)
# 上面的方法等同于
prompt_template = PromptTemplate(
template=template_str,
input_variables=["input_language","output_language","text"]
)
2. 模版赋值
prompt1 = PromptTemplate(template="你是一个专业的翻译助手,擅长将{input_language}文本准确翻译成{output_language}。",partial_variables={"output_language":"德语"})
# 使用partial_variables固定值
prompt1.format(input_language="日语")
# 结果:'你是一个专业的翻译助手,擅长将日语文本准确翻译成德语。'
# 不使用partial_variables固定值
prompt1.format(input_language="英语",output_language="法语")
# 结果:'你是一个专业的翻译助手,擅长将英语文本准确翻译成法语。'
# from_template构建的模版和上面的结果一样
prompt2 = PromptTemplate.from_template(template="你是一个专业的翻译助手,擅长将{input_language}文本准确翻译成{output_language}。",partial_variables={"output_language":"德语"})
prompt2.format(input_language="英语",output_language="法语")
# '你是一个专业的翻译助手,擅长将英语文本准确翻译成法语。'
prompt2.format(input_language="日语")
# '你是一个专业的翻译助手,擅长将日语文本准确翻译成德语。'
3. invoke赋值
- 注意参数为字典类型
prompt1 = PromptTemplate(template="你是一个专业的翻译助手,擅长将{input_language}文本准确翻译成{output_language}。",partial_variables={"output_language":"德语"})
# 使用partial_variables固定值
prompt1.invoke({"input_language":"英语"})
# 结果:StringPromptValue(text='你是一个专业的翻译助手,擅长将英语文本准确翻译成德语。')
# 不使用partial_variables固定值
prompt1.invoke({"input_language":"英语","output_language":"法语"})
# 结果:StringPromptValue(text='你是一个专业的翻译助手,擅长将英语文本准确翻译成法语。')
4. 部分赋值PromptTemplate.partial
不用一次性将模版所有的值赋值,从结果可以看出相当于给了partial_variables的值
prompt3 = PromptTemplate.from_template(template="你是一个专业的翻译助手,擅长将{input_language}文本准确翻译成{output_language}。")
prompt3.partial(output_language="德语")
# 结果
'''
PromptTemplate(
input_variables=['input_language'],
input_types={},
partial_variables={'output_language': '德语'},
template='你是一个专业的翻译助手,擅长将{input_language}文本准确翻译成{output_language}。')
'''