1. 理解PromptTemplate的核心价值
在构建AI应用时,我们经常需要与大型语言模型(LLM)进行交互。最基础的方式是直接将字符串传递给模型,比如:
python复制model.invoke("帮我写一首诗")
这种简单粗暴的方式被称为零样本提示(Zero-shot Prompting)。虽然它能工作,但在实际业务场景中存在明显缺陷:
- 缺乏结构化:每次请求都需要手动拼接字符串,代码可读性差
- 维护困难:当需要修改提示词时,需要在代码中多处查找替换
- 易出错:手动处理变量替换时容易遗漏空格或特殊字符转义
- 难以复用:相同的提示逻辑无法在不同场景中共享使用
LangChain的PromptTemplate正是为解决这些问题而设计的。它本质上是一个模板引擎,提供了以下关键能力:
- 模板定义:将提示词中的固定部分和可变部分分离
- 变量管理:使用
{变量名}的格式声明占位符 - 类型安全:在运行时检查变量是否匹配
- 格式控制:自动处理空格、缩进等格式问题
提示:PromptTemplate的设计理念类似于Python中的f-string或format函数,但专门针对LLM交互场景进行了优化。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. PromptTemplate基础用法
2.1 模板定义与变量声明
创建一个基本的PromptTemplate非常简单:
python复制from langchain_core.prompts import PromptTemplate
template = """
你是一个专业的命名顾问,请根据以下信息为孩子起名:
- 姓氏:{lastname}
- 性别:{gender}
- 家族辈分字:{generation_word}(可选)
请给出3个推荐名字,并简要说明每个名字的含义。
"""
prompt_template = PromptTemplate.from_template(template)
在这个模板中:
lastname和gender是必填变量generation_word是可选变量(通过在模板中标注"可选"来提示使用者)
2.2 变量注入与使用
填充模板变量有两种主要方式:
方式一:使用format方法
python复制filled_prompt = prompt_template.format(
lastname="张",
gender="男孩",
generation_word="明"
)
方式二:使用invoke方法
python复制filled_prompt = prompt_template.invoke({
"lastname": "李",
"gender": "女孩"
})
注意:当缺少必
