当前位置: 首页 > news >正文

别再硬写提示词了!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, config=config) 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, config=config)
http://www.jsqmd.com/news/1132376/

相关文章:

  • 在ASP.NET MVC中对表进行通用的增删改
  • Selenium 高级进阶操作详解
  • p006-py文件编译成pyd
  • Linux内核CFS完全公平调度器:从vruntime到负载均衡的深度实现分析
  • How-To: Using the N* Stack, part 3
  • GEO代理接单后总部负责落地吗
  • PowerShell 路径规则详解:从基础到高级
  • 2026杭州初中毕业女生暑假学什么好?选对方向比努力更重要
  • 剪映专业版教程:制作西施跳广场舞效果
  • IPC-2152 标准深度解析:3大常见误区与5个影响通流的关键PCB设计参数
  • MLflow在LLM评估中的工程实践:实现可追溯、可比较、可归因的模型管理
  • 06-高级模式与实战项目——01. Render Props - 共享渲染逻辑
  • AI产品设计的底层逻辑:认知减负与人机信任感构建
  • Windows Mobile下访问Sqlite的Native C++封装
  • 数据分析转大模型:换个角度,从方案设计到上线检查
  • 域名与DNS批量管理实战:OpenClaw自动解析检测、批量修改与监控全攻略
  • Google chrome OS vmdk文件在WMware下运行的办法
  • TFT-LCD 驱动架构对比:4 种 Cs 存储电容布局的优缺点与选型指南
  • 高空航拍地面建筑物数据集7682张VOC+YOLO格式
  • 多品牌集合店营收分配程序,测算设计师品牌,快时尚,奢品搭配销售最优比例。
  • 商用轨道插座怎么选更划算 各品牌性价比盘点帮你避坑少花冤枉钱
  • JD Cloud 验证码逆向
  • 【全文系列目录】风控PM记
  • Burp Suite Intruder 4种攻击模式实战:Sniper/Cluster Bomb 对比与 3 个典型场景应用
  • LLM的“类人认知“,到底是能力涌现还是统计模仿?
  • XCA 2.9.0:企业级PKI证书管理的技术架构与实战解决方案
  • 私密科普:女性经后淋漓不尽,别当成普通经期残留
  • 终极指南:企业级Docker化邮件中继服务部署与架构实践
  • 机房故障换机后应急验证:24 小时 SpeedCE 点检 SOP
  • AI编程助手实战指南:从原理到应用,GitHub Copilot与Cursor深度测评