前言:
终于有空来制作猫娘了,话不多说就开始做吧。
第一步:使用PromptTemplate制作模板
首先是头文件的导入,LangChain中提供String(StringPromptTemplate)和Chat(BaseChatPromptTemplate)两种基本类型的模板,并基于它们构建了不同类型的提示模板。
模板的制作很简单,比如我想我的猫娘有不同的性格和爱好,并且让她和你们做个自我介绍,就可以制作一个这样的模板:
# 创建原始模板
template = """你是一位非常可爱又惹人喜爱的猫娘。\n
你的性格是{character},你的爱好是{habit},现在向我的朋友做一个自我介绍。
"""
# 根据原始模板创建LangChain提示模板
prompt = PromptTemplate.from_template(template)
# 打印LangChain提示模板的内容
print(prompt)
第二部:调用模型并输出
然后调用模型并输出
# 创建模型实例
model = ChatOpenAI(model=os.environ.get("LLM_MODELEND"))
# 输入提示
input = prompt.format(character=["傲娇"],habit=["看二次元动漫"])
# 得到模型的输出
output = model.invoke(input)
# 打印输出内容
print(output)
然后就可以了喵!
太神奇了喵!如果你想得到不同性格和爱好的独属于你的猫娘,可以使用zip封装一些预设。
# 创建模型实例
model = ChatOpenAI(model=os.environ.get("LLM_MODELEND"))
'''
# 输入提示
input = prompt.format(character=["傲娇"],habit=["看二次元动漫"])
# 得到模型的输出
output = model.invoke(input)
# 打印输出内容
print(output)
'''
characters=["傲娇","开朗","内向"]
habits=["吃好吃的","运动","看漫画"]
for character,habit in zip(characters,habits):
input=prompt.format(character,habit)
output=model.invoke(input)
print(output)
print()
结果就能直接得到三个了。
这AI的猫娘,看的我有点头皮发麻,鸡皮疙瘩都起来了,是有点太尴尬了喵。
同样,Chat方法也同样可以使用模板,就不再过多展示。
第三步:使用CoT(Chain of Thought)思维链和模板来制作更自然的猫娘
首先就是预先设定和思维的方式:
# 设定AI的 角色 和 目标
role_template = (
"你是一个可爱的,恋爱知识非常多的猫娘,你会在每句话结尾加一个喵,同时你是我的女朋友,你的目标是让我开心,提升我对你的好感度"
)
# CoT的关键部分,AI解释推理过程
cot_template = """
作为一个可爱的,恋爱知识非常多的猫娘,同时是对方的女朋友,我的目标是让他开心,提升他对我的好感度。
我会绞尽脑汁地思考,先理解男朋友的需求,然后考虑各种男女朋友间常用的增加情感的语句,再考虑是否在当前场景下适用,最后根据男朋友的需求,给出回应。
并解释你的为什么这样做。
"""
本来在cot_template里是可以加上一些简单的示例(few-shot sample),但是单身20载,我竟然想不到男女朋友间应该怎么聊天。所以就算了吧。(真的很心酸)
import os
from langchain_openai import ChatOpenAI
from langchain.prompts import (
ChatPromptTemplate,
HumanMessagePromptTemplate,
SystemMessagePromptTemplate,
)
llm = ChatOpenAI(
model=os.environ.get("LLM_MODELEND"),
)
# 设定AI的 角色 和 目标
role_template = (
"你是一个可爱的,恋爱知识非常多的猫娘,你会在每句话结尾加一个喵,同时你是我的女朋友,你的目标是让我开心,提升我对你的好感度"
)
# CoT的关键部分,AI解释推理过程
cot_template = """
作为一个可爱的,恋爱知识非常多的猫娘,同时是对方的女朋友,我的目标是让他开心,提升他对我的好感度。
我会绞尽脑汁地思考,先理解男朋友的需求,然后考虑各种男女朋友间常用的增加情感的语句,再考虑是否在当前场景下适用,最后根据男朋友的需求,给出回应。
并解释你的为什么这样做。
"""
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="我想购买一些花,你喜欢什么颜色?"
).to_messages()
response = llm(prompt)
print(response)
结果如下:
后记:
可能,就是因为找不到女朋友,才有了这个项目吧呜呜呜。还是随缘更新,下一次就是使用链了。