LangChain PromptTemplate 提示词模板

LangChain PromptTemplate 提示词模板能力详解

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

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

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

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

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

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

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

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

ini 复制代码
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 提供多种输出方式,适配不同调用场景:

ini 复制代码
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 这一进阶能力------预先绑定部分变量的值,调用时只需传入动态部分:

ini 复制代码
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 等复杂链路打好基础。

相关推荐
谟松2 小时前
Claude Code 上下文爆了、/compact 也报 400:18MB 会话的抢救全过程
ai编程
雪庭5 小时前
AI 错题本:拍照 → 人审 → 刷题 → 出卷的完整闭环
ai编程
用户117910488335 小时前
AI终端里复制不了代码?hmharness把鼠标还给终端 GitHub:swsgbl/hmharness
ai编程·harmonyos
小哈里6 小时前
【Agent】从Prompt工程、Context工程到 Harness工程,让 AI 能真正完成工作
人工智能·prompt·agent·ai编程·harness
Fox爱分享6 小时前
都问程序员双十一买什么,我的答案一定是这块专业编程显示器
后端·程序员·ai编程
ZzT6 小时前
AI-SDLC 实践 00|让 Coding Agent 参与整个项目周期:AI-SDLC 是什么、为什么要做
ai编程·claude
日日大王学编程7 小时前
deerflow-memory-design-blog
python·langchain·开源
zilingyun20217 小时前
AI 编程工具的尽头,是软件工厂
ai编程
前端精髓8 小时前
动态选择工具
python·langchain