prompt提示词格式

47 阅读4分钟

6cb42492ab22f14458b74478950b9ca4.jpg

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)
# 输出:
# 你是一名数学老师
# 你的回答需要满足:用简单易懂的语言解释
# 请回答:什么是勾股定理?