LangChain PromptTemplate 提示词模板

0 阅读3分钟

LangChain PromptTemplate 提示词模板能力详解

在 LangChain 框架中,PromptTemplate 是最基础也最常用的组件之一,它的核心作用是把提示词从硬编码变成可配置的"模板" ,让开发者可以像填表一样动态生成给大模型的输入。以下从两个示例代码中梳理出它的主要能力。

一、基本用法:占位符 + 填充

最直观的用法是定义一个包含 {变量名} 占位符的字符串,然后用 PromptTemplate.from_template() 快速构造模板对象:

template = "你是一个{role}专家,请用{style}的风格解释{topic}"
prompt = PromptTemplate.from_template(template)
res = prompt.format(role="人工智能", style="幽默通俗", topic="神经网络")

调用 format() 时传入具体值,占位符就被替换成实际文本。这种方式适合变量少、逻辑简单的场景,一行代码即可完成模板定义。

模板对象还会自动识别所有占位符,通过 prompt.input_variables 可以查看需要填充哪些变量,方便调试和校验。

二、构造器写法:更精细的控制

当需求复杂一些时,可以使用 PromptTemplate() 构造器,显式声明各项参数:

prompt = PromptTemplate(
    template="请把中文翻译成{lang}\n原文:{text}\n译文:",
    input_variables=['text', 'lang'],
    template_format="f-string",
    validate_template=True
)

这里涉及几个关键参数:

  • template:模板字符串本体,定义输出格式。
  • input_variables:手动声明需要外部传入的变量列表,确保模板和参数一一对应。
  • template_format:模板解析格式,默认 f-string(Python 花括号语法),也支持 jinja2 等更强大的模板引擎。
  • validate_template:是否校验模板中的占位符与 input_variables 一致。开启后,如果模板里有变量未在列表中声明,会直接报错,帮助在开发阶段提前发现拼写错误。

三、输出格式的灵活转换

PromptTemplate 提供多种输出方式,适配不同调用场景:

res = prompt.format_prompt(text="人工智能", lang="法语")
res.to_string()   # 输出纯文本字符串
res.to_message()  # 输出 LangChain 的 Message 对象(可直接传给模型)
  • format() → 返回纯字符串,适合直接拼接。
  • format_prompt() → 返回 StringPromptValue 对象,是更结构化的中间表示,可以进一步调用 .to_string() 或 .to_message() 做格式转换。.to_message() 特别适合在 Chain 中把提示词直接作为模型输入传递,省去手动包装角色的步骤。

四、partial_variables:预设固定变量

09template.py 展示了 partial_variables 这一进阶能力——预先绑定部分变量的值,调用时只需传入动态部分:

prompt = PromptTemplate(
    template="系统:{sys_prompt},用户:{user_input}",
    input_variables=['user_input'],
    partial_variables={
        'sys_prompt': "你是一个严谨的技术文档助手,回答问题必须带代码示例"
    }
)
res = prompt.format(user_input='解释一下什么是GIL')

效果是:sys_prompt 在模板定义时就固定写死了,每次调用只需传入 user_input,模板自动把两部分拼接完整。

这个能力的典型应用场景是:系统角色设定是固定的,用户输入每次不同。通过 partial_variables 把"不变的部分"和"变化的部分"分离,调用接口更简洁,也减少了出错的可能。此时 prompt.input_variables 只会返回 ['user_input'],已绑定的变量不再出现在待填列表中。

五、总结

能力说明
占位符填充用 {var} 定义模板,format() 填入具体值
自动识别变量input_variables 属性自动检测模板中所有占位符
构造器精细控制手动指定变量列表、模板格式、校验开关
多格式输出format() 返回字符串,format_prompt() 返回对象并支持转 Message
预设固定变量partial_variables 绑定不变的部分,简化调用

PromptTemplate 的本质价值是把提示词工程从"写死一段话"升级为"管理一组可复用的结构化输入" ,为后续构建 Chain、Agent 等复杂链路打好基础。