别再硬写提示词了!LangChain PromptTemplate从入门到实战

发布时间:2026/7/6 3:49:42

别再硬写提示词了!LangChain PromptTemplate从入门到实战 当你需要创建一个 PromptTemplate 实例时LangChain 提供了两种方式直接使用构造方法或者使用官方更推荐的 from_template 类方法。直接使用构造方法需要你手动列出所有的输入变量代码冗长不说还很容易出错。比如如果你在模板中添加了一个新变量但忘记在 input_variables 参数中同步声明就会导致运行时错误。而 from_template 方法的最大优势在于它能够自动扫描模板字符串智能推断出所有的输入变量。这不仅让代码更加简洁易读还能彻底避免手动维护变量列表带来的不一致问题。PromptTemplate 内置了对三种主流模板格式的支持你可以根据自己的实际需求选择最合适的一种f-string这是 Python 的原生语法也是 LangChain 默认使用的格式。它使用单大括号{variable_name}来标记变量占位符。f-string 格式简单直观没有额外的学习成本而且安全性最高是绝大多数场景下的首选。jinja2如果你需要在提示词中实现条件判断、循环等复杂逻辑jinja2 格式会是更好的选择。它支持{% if %}、{% for %}等控制结构可以根据不同的输入动态调整提示词的内容。不过需要注意的是jinja2 模板存在一定的安全风险在处理不可信的用户输入时需要格外谨慎。mustache这是一种跨语言通用的模板格式使用双大括号{{variable_name}}来标记变量。如果你需要在不同编程语言之间共享提示词模板mustache 格式可以提供最好的兼容性。根据大量实际开发经验总结90% 以上的应用场景使用默认的 f-string 格式就完全能够满足需求。只有当你确实需要复杂的逻辑控制或者跨语言共享时才需要考虑使用其他两种格式。从本质上讲PromptTemplate 就是一个可复用的模板字符串。它的工作流程非常清晰(1) 定义一个包含变量占位符的模板字符串(2) 以字典的形式传入具体的变量值(3) PromptTemplate 会将这些值精确地填充到对应的占位符中(4) 最终输出一个统一格式的PromptValue对象这个 PromptValue 对象是 LangChain 中的一个通用数据类型它可以直接传入任何大语言模型的 invoke 方法。同时它也提供了便捷的转换方法可以轻松地转换为普通字符串或者消息列表满足不同模型的输入要求。prompt PromptTemplate.from_template( 将{word}翻译成{lang} )下面我们通过一个完整的示例来演示如何在实际代码中使用 PromptTemplate。首先从langchain_core.prompts模块导入PromptTemplate类。接着使用from_template方法创建PromptTemplate实例该方法接收一个字符串模板作为参数模板中用大括号包裹的部分即为变量占位符。然后调用 prompt 的invoke方法传入包含具体填充值的字典该方法会将这些值替换到模板中生成完整的提示词对象PromptValue。最后将PromptValue传入之前已初始化好的大语言模型实例的invoke方法并传入配置信息大模型会根据该提示词生成对应的回答。from langchain_core.prompts import PromptTemplate prompt PromptTemplate.from_template( 将{word}翻译成{lang} ) prompt_value prompt.invoke({word: good, lang: 中文}) res llm.invoke(prompt_value, configconfig) print(res.content)在某些情况下你的模板中可能有一些变量的值在大部分时候都是固定的只有少数几个变量需要每次调用时动态传入。这时你可以使用partial_variables参数来预先定义这些固定变量从而简化后续的调用过程。from langchain_core.prompts import PromptTemplate prompt PromptTemplate.from_template( 将{word}翻译成{lang}, partial_variables{lang: 中文} ) prompt_value prompt.invoke({word: good}) res llm.invoke(prompt_value, configconfig)

相关新闻