LangChain教程:PromptTemplate提示词模板类

提出问题

看下面的代码

from langchain_community.llms.tongyi import Tongyi
from dotenv import load_dotenv

# 加载 .env 文件,并放入到环境变量中
load_dotenv()

model = Tongyi(model="qwen-max")       # 创建模型对象
res = model.invoke(input="请分析 手机 出现 掉电快 的原因,只给出3条简短解决建议。")
print(res)
print("-"*50)
res = model.invoke(input="请分析 电脑 出现 卡顿 的原因,只给出3条简短解决建议。")
print(res)
print("-"*50)
res = model.invoke(input="请分析 羽绒服 出现 销量低 的原因,只给出3条简短解决建议。")
print(res)

提出问题

下面例子的 提示词 中,大部分内容都是 相同的:

请分析 aaa 出现 bbb 的原因,只给出3条简短解决建议。

只有 aaa 和 bbb 的部分是不同的,每次都把这些字符串发给AI,是不合理的

解决

使用提示词模板,像数学公式那样,只需要把数字替换公式中的变量

提示词模板是什么?

就是 带占位符的提示词,方便反复用。

比如:

请分析 aaa 出现 bbb 的原因,只给出3条简短解决建议。

填完变量,就变成 真正的提示词。

提示词模板类

在调用大模型时,我们经常需要 动态替换提示词中的变量(比如姓名、问题类型、参数等),PromptTemplate 就是为了解决这个问题:

  • 把固定文本和动态变量分离,让提示词更易维护;
  • 支持批量渲染、格式校验、多变量替换;
  • 可与 LangChain 的其他组件(如模型、链)无缝衔接。

基础用法

1. 基本定义与渲染(不推荐)

先定义包含变量的模板(用 {变量名} 标记),再通过 format() 或 invoke() 填充变量:

from langchain_core.prompts import PromptTemplate

# 1. 定义提示词模板(包含两个变量:product 和 problem)
prompt_template = PromptTemplate(
    input_variables=["product", "problem"],  # 显式声明变量(可选,但建议写,方便校验)
    template="请分析{product}出现{problem}的原因,并给出3条解决建议。"
)

# 2. 渲染模板(填充变量)—— 两种方式
# 方式1:format()(简单场景)
prompt_text1 = prompt_template.format(product="手机", problem="电池掉电快")
# 方式2:invoke()(推荐,支持字典输入,适配 LangChain 生态)
prompt_text2 = prompt_template.invoke({"product": "电脑", "problem": "卡顿"})

# 打印结果
print("渲染结果1:\n", prompt_text1)
print("-" * 50)
print("渲染结果2:\n", prompt_text2.content)  # invoke 返回 PromptValue 对象,用 .content 取文本
运行结果:
渲染结果1:
 请分析手机出现电池掉电快的原因,并给出3条解决建议。
--------------------------------------------------
渲染结果2:
 请分析电脑出现卡顿的原因,并给出3条解决建议。

2. 简化定义(推荐)

用 from_template() 可以简化,LangChain 会自动识别模板中的变量:

# 简化写法(推荐)
prompt_template = PromptTemplate.from_template(
    "请给{age}岁的{gender}用户推荐{num}个适合的健身运动。"
)

# 渲染
prompt_text = prompt_template.format(age=25, gender="女性", num=5)
# 输出:请给25岁的女性用户推荐5个适合的健身运动。
print(prompt_text)

案例

使用提示词模板类和阿里千问大模型:


from langchain_core.prompts import PromptTemplate
from langchain_community.llms.tongyi import Tongyi
from dotenv import load_dotenv

# 加载 .env 文件,并放入到环境变量中
load_dotenv()

# 简化写法(推荐)
prompt_template = PromptTemplate.from_template(
    "请给{age}岁的{gender}用户推荐{num}个适合的健身运动。"
)

# 渲染
prompt_text = prompt_template.format(age=25, gender="女性", num=3)
# 输出:请给25岁的女性用户推荐3个适合的健身运动。
print(prompt_text)

model = Tongyi(model="qwen-max")       # 创建模型对象
res = model.invoke(input=prompt_text)   # 调用模型获取结果
print(res)

进阶功能

处理默认值(避免变量缺失)

给变量设置默认值,即使不传入该变量也不会报错:

prompt_template = PromptTemplate.from_template(
    "请写一篇关于{topic}的短文,字数要求:{word_count}字(默认100字)。"
)
# 设置默认值
prompt_template = prompt_template.partial(word_count=100)

# 只传 topic,使用默认的 word_count
prompt_text = prompt_template.format(topic="春天")
print(prompt_text)  # 输出:请写一篇关于春天的短文,字数要求:100字(默认100字)。

# 覆盖默认值
prompt_text2 = prompt_template.format(topic="秋天", word_count=200)
print(prompt_text2)  # 输出:请写一篇关于秋天的短文,字数要求:200字(默认100字)。

批量渲染模板

一次性渲染多组变量,适合批量调用模型:

prompt_template = PromptTemplate.from_template("计算{num1} + {num2}的结果。")

# 多组变量
variable_sets = [
    {"num1": 10, "num2": 20},
    {"num1": 5, "num2": 8},
    {"num1": 100, "num2": 200}
]

# 批量渲染
batch_prompts = prompt_template.format_batch(variable_sets)
for i, prompt in enumerate(batch_prompts):
    print(f"第{i+1}个提示词:{prompt}")
运行结果:
第1个提示词:计算10 + 20的结果。
第2个提示词:计算5 + 8的结果。
第3个提示词:计算100 + 200的结果。

注意事项

  1. 变量名规范:模板中的变量名要和传入的字典键完全一致(大小写敏感);
  2. 特殊字符处理:如果模板中需要保留 {}(比如代码示例),需用 {{}} 转义(例:模板中有{{代码}}块);
  3. 输入校验:显式声明 input_variables 可以提前校验变量是否缺失,避免运行时错误;
  4. API 配置:使用第三方模型(如通义千问、OpenAI)时,需先配置对应的 API_KEY(参考模型官方文档)。

总结

  1. LangChain 的 PromptTemplate 是构建结构化提示词的核心工具,核心是「模板定义 + 变量渲染」;
  2. 基础用法:用 from_template() 定义模板,format()/invoke() 填充变量;
  3. 进阶技巧:支持默认值、批量渲染,能大幅提升提示词复用性和开发效率。

原文出处:/show_1GW2qEzu7tpx.html