LangChain中的PromptTemplate实现与应用
一、PromptTemplate的参数解析
在LangChain中,PromptTemplate是构建提示文本的核心组件。除了常见的input_variables和template参数外,还有两个重要的参数:template_format和validate_template。
- template_format
template_format指定了提示模板的格式,默认值为“f-string”,但也可以设置为“jinja2”。这使得开发者能够使用更灵活和功能强大的模板引擎。例如,Jinja2支持条件语句、循环等,可以更加灵活地生成复杂的文本。 - validate_template
validate_template用于控制是否验证模板的有效性。默认为True,启用该功能将确保模板在使用之前是有效的。如果模板存在语法错误或不符合预期的格式,系统将抛出异常。这可以帮助开发者在开发阶段就发现潜在问题,提高程序的稳定性。
二、使用template_format与validate_template
接下来,我们将通过一个简单的示例来演示如何使用这些参数。我们将创建一个使用Jinja2格式的模板,并启用模板验证。
python复制代码
from langchain.prompts import PromptTemplate
# 使用Jinja2格式的PromptTemplate
template = """
{% if flower_type %}
你好!{{ customer_name }},你想了解关于 {{ flower_type }} 的信息吗?
{% else %}
你好!{{ customer_name }},请问有什么我可以帮助你的呢?
{% endif %}
"""
prompt_template = PromptTemplate(
template=template,
template_format="jinja2",
input_variables=["customer_name", "flower_type"],
validate_template=True
)
print(prompt_template.format(customer_name="小红", flower_type="玫瑰"))
这个示例展示如何利用Jinja2的条件语句生成功能强大的提示。当客户询问特定花卉时,系统会自动识别并给予对应的回答。
三、构建PipelinePromptTemplate与自定义Template
PipelinePromptTemplate
在一些复杂的情境中,我们可能需要设计多个步骤的对话流程。PipelinePromptTemplate可用于管理这样的多步骤过程。
python复制代码
from langchain.prompts import PipelinePromptTemplate
pipeline_template = PipelinePromptTemplate(
templates=[
SystemMessagePromptTemplate("你是一个鲜花店的客服助手。"),
HumanMessagePromptTemplate("你好,我想知道关于{{ flower_type }}的信息。"),
AIMessagePromptTemplate("当然,{{ flower_type }}的价格是{{ price }}元。")
],
input_variables=["flower_type", "price"]
)
print(pipeline_template.format(flower_type="玫瑰", price="100"))
这个示例展示了如何使用PipelinePromptTemplate组合不同的消息,以便形成一段完整的对话。
四、少样本学习任务构想
场景描述
假设我们有一家鲜花店,客户经常会咨询各种问题,例如鲜花的价格、推荐合适的花卉、了解如何保养花卉等。为了提高客户服务的效率,我们希望通过少样本学习来训练模型,使其能够迅速理解并回答客户的问题。
示例对话
我们将为模型提供几个示例对话,以帮助其学习如何回应客户的提问。
plaintext复制代码
1. 客户:请问玫瑰花的价格是多少?
客服:您好,玫瑰花的价格是100元每束。
2. 客户:您能推荐一下适合送人的花吗?
客服:当然,我推荐您选择百合花,寓意美好,非常适合赠送。
3. 客户:鲜花的保养方法是什么?
客服:一般来说,要保持鲜花的新鲜,建议每天换水,并避免阳光直射。
ChatModel的实现
我们将使用ChatOpenAI来构建客服机器人,让其能够根据示例进行学习。
python复制代码
from langchain.chat_models import ChatOpenAI
from langchain import ChatPromptTemplate
# 创建ChatPromptTemplate
chat_prompt_template = ChatPromptTemplate.from_messages([
SystemMessagePromptTemplate("你是一个鲜花店的客服助手。"),
HumanMessagePromptTemplate("{customer_query}"),
AIMessagePromptTemplate("好的,我会帮你解决这个问题。")
])
# 初始化ChatOpenAI模型
chat_model = ChatOpenAI(model="gpt-3.5-turbo")
# 进行一次对话
customer_query = "请问我可以送什么花给我的朋友?"
response = chat_model([chat_prompt_template.format(customer_query=customer_query)])
print(response)