1. 基础字符串形式(最原始)
这是最基础的形式,直接使用普通字符串作为提示词,不依赖 LangChain 的任何封装,适合简单场景。
python
运行
# 示例:纯字符串提示词
simple_prompt = "请总结以下文本:{text}"
# 填充变量后直接使用
filled_prompt = simple_prompt.format(text="LangChain 是一个用于构建 LLM 应用的框架")
print(filled_prompt)
# 输出:请总结以下文本:LangChain 是一个用于构建 LLM 应用的框架
2. PromptTemplate(核心结构化形式)
这是 LangChain 中最常用的提示词形式,用于封装带变量的提示词模板,支持参数校验、批量填充等功能,是处理动态提示词的标准方式。
python
运行
from langchain.prompts import PromptTemplate
# 1. 基础 PromptTemplate
prompt_template = PromptTemplate(
input_variables=["product"], # 声明需要填充的变量
template="请为{product}写一句吸引人的广告语" # 提示词模板
)
# 填充变量
filled_prompt = prompt_template.format(product="智能水杯")
print(filled_prompt)
# 输出:请为智能水杯写一句吸引人的广告语
# 2. 带默认值的 PromptTemplate(简化使用)
prompt_template_with_default = PromptTemplate(
input_variables=["product"],
partial_variables={"adjective": "高端"}, # 默认变量
template="请为{adjective}的{product}写一句广告语"
)
filled_prompt2 = prompt_template_with_default.format(product="智能手表")
print(filled_prompt2)
# 输出:请为高端的智能手表写一句广告语
3. ChatPromptTemplate(对话型提示词)
专门针对聊天模型(如 ChatGPT、文心一言)设计,封装了「角色(role)+ 内容(content)」的对话结构,能精准还原多轮对话场景。
python
运行
from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate, SystemMessagePromptTemplate
# 构建系统提示(定义角色)和人类提示(用户输入)
system_prompt = SystemMessagePromptTemplate.from_template("你是一名专业的产品文案顾问,语气友好")
human_prompt = HumanMessagePromptTemplate.from_template("请为{product}写3条广告语")
# 组合成聊天提示模板
chat_prompt = ChatPromptTemplate.from_messages([system_prompt, human_prompt])
# 生成聊天格式的提示词(适配聊天模型的输入格式)
messages = chat_prompt.format_messages(product="无线耳机")
print(messages)
# 输出:
# [SystemMessage(content='你是一名专业的产品文案顾问,语气友好'),
# HumanMessage(content='请为无线耳机写3条广告语')]
4. FewShotPromptTemplate(少样本提示词)
用于构建包含「示例(Examples)」的提示词,解决小样本场景下模型效果差的问题,核心是封装示例集和示例格式化逻辑。
python
运行
from langchain.prompts import FewShotPromptTemplate, PromptTemplate
# 1. 定义示例
examples = [
{"input": "苹果", "output": "一种酸甜的水果,富含维生素C"},
{"input": "香蕉", "output": "一种软糯的水果,富含钾元素"}
]
# 2. 定义示例的格式化模板
example_prompt = PromptTemplate(
input_variables=["input", "output"],
template="输入:{input}\n输出:{output}"
)
# 3. 构建少样本提示模板
few_shot_prompt = FewShotPromptTemplate(
examples=examples, # 示例集
example_prompt=example_prompt, # 示例格式化模板
prefix="请按照以下示例描述物品:", # 示例前的引导语
suffix="输入:{input}\n输出:", # 示例后的用户输入部分
input_variables=["input"], # 最终需要填充的变量
example_separator="\n\n" # 示例之间的分隔符
)
# 生成少样本提示词
filled_few_shot = few_shot_prompt.format(input="橙子")
print(filled_few_shot)
# 输出:
# 请按照以下示例描述物品:
# 输入:苹果
# 输出:一种酸甜的水果,富含维生素C
#
# 输入:香蕉
# 输出:一种软糯的水果,富含钾元素
#
# 输入:橙子
# 输出:
5. PipelinePromptTemplate(流水线提示词)
将多个提示词模板按顺序组合,分步构建复杂提示词,适合需要分阶段生成提示词的场景(如先定义角色、再补充规则、最后输入问题)。
python
运行
from langchain.prompts import PipelinePromptTemplate, PromptTemplate
# 1. 定义各个阶段的提示模板
template1 = PromptTemplate(input_variables=[], template="你是一名{role}")
template2 = PromptTemplate(input_variables=[], template="你的回答需要满足:{rule}")
template3 = PromptTemplate(input_variables=["question"], template="请回答:{question}")
# 2. 定义流水线结构
pipeline_prompt = PipelinePromptTemplate(
final_prompt=PromptTemplate(
input_variables=["role", "rule", "question"],
template="{introduction}\n{guidelines}\n{query}"
),
pipeline_prompts=[
("introduction", template1), # 第一个阶段:角色定义
("guidelines", template2), # 第二个阶段:规则补充
("query", template3) # 第三个阶段:问题输入
]
)
# 生成流水线提示词
filled_pipeline = pipeline_prompt.format(
role="数学老师",
rule="用简单易懂的语言解释",
question="什么是勾股定理?"
)
print(filled_pipeline)
# 输出:
# 你是一名数学老师
# 你的回答需要满足:用简单易懂的语言解释
# 请回答:什么是勾股定理?