LangChain 中不同提示模板类型的应用 | 豆包MarsCode AI刷题

228 阅读5分钟

LangChain 中不同提示模板类型的应用

LangChain 是一个强大的框架,它帮助开发者更高效地与大型语言模型(LLM)交互。LangChain 提供了丰富的提示模板(Prompt Template)和链(Chain)功能,能够让开发者根据任务需求设计和优化与 LLM 的对话。

1. LangChain 提示模板的基本概念

在自然语言处理任务中,提示模板的核心功能是指导语言模型生成特定的文本输出。LangChain 提供了几种不同的提示模板类型,包括 基础字符串模板(String Prompt Template)、聊天消息模板(Chat Prompt Template)和 少样本学习模板(Few-Shot Prompt Template)。每种类型的模板都有其特定的使用场景和特点,能够帮助开发者更精准地向模型提供指令,达成预期目标。

1.1 基础字符串模板(String Prompt Template)

StringPromptTemplate 是 LangChain 中最简单的一种模板类型。它允许开发者创建一个包含占位符的字符串,方便在执行时动态传入变量。通常,这种模板用于生成简单的文本或进行简单的推理任务。

使用示例:
from langchain.prompts import PromptTemplate

template = "你是一个经验丰富的园丁,擅长解答关于养花育花的问题。如何照顾 {flower_name}?"
prompt = PromptTemplate(input_variables=["flower_name"], template=template)

print(prompt.format(flower_name="玫瑰"))

输出:

你是一个经验丰富的园丁,擅长解答关于养花育花的问题。如何照顾 玫瑰?

在这个示例中,我们定义了一个简单的模板,用来询问如何照顾特定的花卉。在执行时,通过 format() 方法动态传入花卉名称,从而生成一个特定的问题。

1.2 聊天消息模板(Chat Prompt Template)

随着模型能力的增强,聊天型接口逐渐成为与模型交互的主流方式。ChatPromptTemplate 提供了一种更灵活和富有表现力的方式来生成多轮对话的提示。它不仅支持输入多个消息(如系统消息、用户消息等),而且能够构建完整的对话上下文,帮助模型更好地理解任务。

使用示例:
from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate, SystemMessagePromptTemplate

template = "你是一个经验丰富的厨师,请回答关于烹饪的相关问题。"
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_message_prompt = HumanMessagePromptTemplate.from_template("如何做一道简单的家常菜?")
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])

prompt = chat_prompt.format_prompt().to_messages()
print(prompt)

输出:

[SystemMessage(content='你是一个经验丰富的厨师,请回答关于烹饪的相关问题。'), HumanMessage(content='如何做一道简单的家常菜?')]

在这里,ChatPromptTemplate 帮助我们构建了一个包含系统消息和用户消息的对话模板。通过这种方式,开发者能够向模型提供更为复杂的上下文,使其能够理解并回答更具挑战性的问题。

1.3 少样本学习模板(Few-Shot Prompt Template)

Few-Shot Learning 是一种通过少量示例来学习新任务的技术。LangChain 的 FewShotPromptTemplate 允许开发者提供少量示例,帮助模型更好地理解如何执行任务。这种模板在任务不明确或者模型未见过某种任务时尤为有用。

使用示例:
from langchain.prompts import PromptTemplate
from langchain.prompts.few_shot import FewShotPromptTemplate

samples = [
    {"flower_type": "玫瑰", "occasion": "爱情", "ad_copy": "玫瑰,浪漫的象征,是你向心爱的人表达爱意的最佳选择。"},
    {"flower_type": "康乃馨", "occasion": "母亲节", "ad_copy": "康乃馨代表着母爱的纯洁与伟大,是母亲节赠送给母亲的完美礼物。"}
]

prompt_template = PromptTemplate(input_variables=["flower_type", "occasion", "ad_copy"], template="鲜花类型: {flower_type}\n场合: {occasion}\n文案: {ad_copy}")
few_shot_prompt = FewShotPromptTemplate(examples=samples, example_prompt=prompt_template, suffix="鲜花类型: {flower_type}\n场合: {occasion}", input_variables=["flower_type", "occasion"])

print(few_shot_prompt.format(flower_type="百合", occasion="庆祝"))

输出:

鲜花类型: 玫瑰
场合: 爱情
文案: 玫瑰,浪漫的象征,是你向心爱的人表达爱意的最佳选择。

鲜花类型: 康乃馨
场合: 母亲节
文案: 康乃馨代表着母爱的纯洁与伟大,是母亲节赠送给母亲的完美礼物。

鲜花类型: 百合
场合: 庆祝

通过少样本学习模板,我们提供了一些花卉类型和场合的示例,模型基于这些示例生成了新的广告文案。在实际应用中,少样本学习模板广泛应用于营销、推荐系统等需要根据少量数据推测目标任务的场景。

2. 使用 LangChain 提示模板的最佳实践

尽管 LangChain 提供了多种类型的提示模板,但如何合理地选择并组合这些模板来完成复杂任务才是关键。

2.1 确定任务目标

在选择提示模板时,首先要明确任务的目标。如果任务涉及生成简单的文本,基础字符串模板(String Prompt Template)通常就足够了;如果任务是多轮对话或上下文丰富的推理,聊天消息模板(Chat Prompt Template)会更加适合;如果任务是针对新领域的学习,少样本学习模板(Few-Shot Prompt Template)将能够提供更多的帮助。

2.2 结合多模板使用

有时候,单一模板不足以处理复杂的任务。在这种情况下,MultiPromptChainLLM Router Chain 可以将多个模板和任务处理逻辑串联起来,从而提升任务的完成效率和准确度。例如,可以通过 Chat Prompt Template 处理多轮对话,通过 Few-Shot Prompt Template 完成少样本学习任务,最终通过 MultiPromptChain 将它们整合在一起。

2.3 动态调整提示模板

在使用 LangChain 时,可以根据实际情况动态调整模板的内容。随着任务的变化,提示模板可以通过 input_variablesformat() 方法灵活调整,提供不同的输出内容。这种灵活性使得 LangChain 在许多实际应用中都能表现得非常出色。

3. 总结

LangChain 为开发者提供了多种类型的提示模板,帮助在与大型语言模型交互时达到最佳效果。通过合理选择和组合不同的模板,开发者可以高效地完成各种任务,从简单的文本生成到复杂的推理和对话系统。LangChain 提供的提示模板不仅增强了模型的任务理解能力,还通过多种链式结构帮助开发者处理复杂的任务需求。