LangChain 两大基础提示词模板:PromptTemplate 与 ChatPromptTemplate 详解

1. 引言

在使用 LangChain 构建大模型应用时,提示词(Prompt)是与模型交互的核心桥梁。LangChain 提供了两大基础提示词模板:PromptTemplateChatPromptTemplate。它们分别面向普通 LLM 与 Chat 对话模型,是后续所有高级提示词技巧的基石。本文将深入剖析这两个模板的定义、用法,并从「普通 LLM」与「Chat 对话模型」两个角度对比分析它们的适用场景与设计差异。

2. 什么是 PromptTemplate

PromptTemplate 是 LangChain 中最基础的提示词模板,用于将用户输入的变量动态填充到一段固定的文本模板中,最终生成一个完整的字符串提示词。

2.1 基本用法

python 复制代码
from langchain.prompts import PromptTemplate

# 定义模板,使用 {变量名} 占位
template = "请用{language}写一段关于{topic}的介绍。"

# 创建 PromptTemplate 实例
prompt = PromptTemplate(
    input_variables=["language", "topic"],
    template=template,
)

# 填充变量,生成最终提示词
final_prompt = prompt.format(language="Python", topic="装饰器")
print(final_prompt)

输出结果:

text 复制代码
请用Python写一段关于装饰器的介绍。

2.2 核心特点

  • 单一字符串输出PromptTemplate 最终产出的是一段纯文本字符串,没有角色(role)概念。
  • 变量占位符 :通过 {变量名} 在模板中预留位置,运行时用 format() 方法填充。
  • 简单直接:适用于输入输出都是纯文本的场景,如文本生成、文本分类、关键词提取等。

3. 什么是 ChatPromptTemplate

ChatPromptTemplate 是面向 Chat 对话模型的提示词模板。它不再是一段孤立的文本,而是由多条「消息」(Message)组成的对话结构,每条消息都带有角色标识(如系统、人类、AI)。

3.1 基本用法

python 复制代码
from langchain.prompts import ChatPromptTemplate

# 定义对话模板,使用元组 (角色, 内容) 列表
template = ChatPromptTemplate.from_messages([
    ("system", "你是一位精通{language}的资深技术专家。"),
    ("human", "请用通俗易懂的方式解释{topic}。"),
])

# 填充变量,生成消息列表
messages = template.format_messages(
    language="Python",
    topic="闭包",
)
print(messages)

输出结果:

text 复制代码
[
    SystemMessage(content="你是一位精通Python的资深技术专家。"),
    HumanMessage(content="请用通俗易懂的方式解释闭包。"),
]

3.2 核心特点

  • 多消息结构:由系统消息、人类消息、AI 消息等组成,模拟真实对话上下文。
  • 角色区分:每条消息都有明确的角色,帮助模型理解对话语境与任务边界。
  • 支持消息模板 :除了 from_messages,还支持 MessagePromptTemplate 等更细粒度的组合方式。

4. 从「普通 LLM」角度分析

普通 LLM(如早期的 GPT-3、文本补全类模型)接收的输入是一段连续的文本,没有对话历史与角色概念。此时 PromptTemplate 是最合适的选择。

4.1 适用场景

  • 单轮文本生成任务,如写文章、翻译、摘要。
  • 输入输出均为纯文本,无需维护多轮对话状态。
  • 调用的是 llm.predict()llm.invoke() 这类文本补全接口。

4.2 示例:使用 PromptTemplate 调用普通 LLM

python 复制代码
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

llm = OpenAI(model="text-davinci-003")

prompt = PromptTemplate(
    input_variables=["product"],
    template="为以下产品写一句吸引人的广告语:{product}",
)

# 生成提示词并调用模型
text = prompt.format(product="智能保温杯")
response = llm.invoke(text)
print(response)

4.3 局限性

  • 无法表达「系统指令」与「用户输入」的层次关系。
  • 多轮对话时需要手动拼接历史消息,维护成本高。
  • 对需要角色扮演或复杂指令约束的任务,表达能力有限。

5. 从「Chat 对话模型」角度分析

Chat 对话模型(如 GPT-4、ChatGLM、通义千问等)原生支持多消息对话结构,能区分系统指令、用户输入与历史回复。此时 ChatPromptTemplate 能充分发挥模型能力。

5.1 适用场景

  • 多轮对话机器人、客服系统、AI 助手。
  • 需要系统角色设定(如「你是资深律师」「你是幽默的导游」)的任务。
  • 调用的是 chat_model.invoke()chat_model.predict_messages() 这类对话接口。

5.2 示例:使用 ChatPromptTemplate 调用 Chat 模型

python 复制代码
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate

chat_model = ChatOpenAI(model="gpt-4")

template = ChatPromptTemplate.from_messages([
    ("system", "你是一位耐心的数学老师,擅长用生活例子讲解概念。"),
    ("human", "请解释什么是{concept}?"),
])

# 生成消息列表并调用模型
messages = template.format_messages(concept="微积分")
response = chat_model.invoke(messages)
print(response.content)

5.3 核心优势

  • 系统消息设定角色:在对话开始前明确模型的身份与行为准则。
  • 天然支持多轮上下文:消息列表可不断追加历史对话,模型能理解完整语境。
  • 更精细的控制:可分别构造系统、用户、助手消息,实现复杂对话流程。

6. 两大模板对比总结

对比维度 PromptTemplate ChatPromptTemplate
输出形式 单一字符串 消息列表(含角色)
角色概念 有(system / human / ai)
适用模型 普通 LLM(文本补全) Chat 对话模型
多轮对话 需手动拼接 原生支持
调用接口 llm.invoke(text) chat_model.invoke(messages)
典型场景 文本生成、翻译、摘要 聊天机器人、AI 助手
复杂度

7. 如何选择

  • 如果你的模型是普通文本补全模型 ,且任务为单轮文本处理,优先使用 PromptTemplate
  • 如果你的模型是Chat 对话模型 ,或需要系统角色设定、多轮上下文,优先使用 ChatPromptTemplate
  • 在实际项目中,两者可以结合使用:先用 PromptTemplate 处理文本,再用 ChatPromptTemplate 组织对话流程。

8. 总结

PromptTemplateChatPromptTemplate 是 LangChain 提示词体系的两大基石。前者面向普通 LLM,以简单字符串完成单轮文本任务;后者面向 Chat 对话模型,以多消息结构实现复杂对话与角色控制。理解两者的差异,能帮助你在不同模型与场景下做出正确选择,为构建更强大的 LLM 应用打下坚实基础。

相关推荐
狗都不学爬虫_1 小时前
AI逆向 - 99aq中心滑块验证+登录(wasm纯算)
爬虫·python·网络爬虫
小码哥哥1 小时前
如何评价“构建企业级 AI 知识库“这一趋势?从技术架构到落地实践的完整分析
人工智能·架构
小罗水1 小时前
第18章 接口回归、异常演练与轻量压测
人工智能·数据挖掘·回归
卷福同学1 小时前
AI编程出海第二步:验证关键词能否做站
前端·人工智能·后端
逻辑君1 小时前
ANNA 认知引擎 · Humanoid 机器人训练白皮书
人工智能·深度学习·机器学习·机器人
hans汉斯1 小时前
计算机科学与应用|改进MeanShift算法在智能监控视频中的应用研究
图像处理·人工智能·功能测试·深度学习·算法·音视频
重庆传粉科技2 小时前
AI推荐生态下品牌内容筛选标准重构与GEO优化路径
人工智能
天才测试猿2 小时前
实例介绍:Unittest框架及自动化测试实现流程
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
梦想三三2 小时前
LangChain Output Parser 实战:从字符串到结构化数据的完整指南
android·服务器·langchain·github·uv