一.在复杂应用中,我们可以将多个提示词模板组合起来使用,可降低复杂度,组合提示词模板需引入 PipelinePromptTemplate 组模块
下面是代码示例:
"""组合提示词模板测试"""
from langchain.prompts import PromptTemplate
from langchain.prompts import PipelinePromptTemplate
from qifan_ai import CreateMyLLM
PROMPT_TEMPLATE = """
{character}
{behavior}
{prohibit}
"""
full_prompt = PromptTemplate.from_template(template=PROMPT_TEMPLATE)
character_template ="你是{person},你有着{xingge},请生成一段文字。"
character_prompt=PromptTemplate.from_template(template=character_template)
behavior_template="""
你尊从以下行为:
{behavior_list}
"""
behavior_prompt=PromptTemplate.from_template(template=behavior_template)
prohibit_template="""你不允许有以下行为:
{prohibit_list}"""
prohibit_prompt=PromptTemplate.from_template(template=prohibit_template)
pip_list=[("character",character_prompt),("behavior",behavior_prompt),("prohibit",prohibit_prompt)]
pip_prompt=PipelinePromptTemplate(final_prompt=full_prompt,pipeline_prompts=pip_list)
print(pip_prompt.input_variables)
p=pip_prompt.format(
person="作家",
xingge="幽默风趣的写作风格",
behavior_list=["1.你会说一些很有哲理的话","2.你会讲故事","3.你会写一些有哲理的文章"],
prohibit_list=["1.说脏话","2.有违道德的行为","3.有违反法律的行为"]
)
print(p)
#调用大模型测试
model=CreateMyLLM()
chain=pip_prompt|model
res=chain.invoke({"person":"作家","xingge":"幽默风趣的写作风格","behavior_list":"1.你会说一些很有哲理的话\n2.你会讲故事\n3.你会写一些有哲理的文章","prohibit_list":"1.说脏话\n2.有违道德的行为\n3.有违反法律的行为"})
print(res.content)
二.为了能够更好的维护提示词模板板本,我们需要将提示词模板保存在文件中,在使用时从文件中加载。使用文件存储提示词模板的文件格式包:.json文件和.yaml文件, 觉的.json格式文件更好用。
如下为simple_p.json文件内容:
{
"_type": "prompt",
"input_variables": [
"name",
"what"
],
"template": "你好, {name}! 你能帮我 {what}?"
}
下面为simple_p.yaml文件内容:
_type:prompt
input_variables:
["name","what"]
template:
"给我讲一个关于{name}的{what}的故事。"
上图为官网上更为复杂的模板文件内容
下面示例代码为从文件加载的提示词模板代码:
"""使用文件夹来存储提示词模板"""
from langchain.prompts import load_prompt
from qifan_ai import CreateMyLLM
prompt=load_prompt("simple_p.json",encoding="utf-8")
p=prompt.format(name="图书管理员",what="推荐一些关于机器学习类的图书")
print(p)
model=CreateMyLLM()
res=model.predict(p)
print(res)