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

langchain-PipelinePromptTemplate

这是一个 LangChain 中相对高级但非常强大的概念,它允许你将多个提示模板像管道一样串联起来,将一个模板的输出作为下一个模板的输入,最终组合成一个复杂的、结构化的最终提示。

核心概念

想象一下工厂的​​装配线(Pipeline)​​:

  1. 第一个工位安装底盘。

  2. 第二个工位接收带有底盘的半成品,并安装发动机。

  3. 第三个工位接收前两步的半成品,并安装车身。

  4. 最终,一台完整的汽车下线。

PipelinePromptTemplate的工作方式与此类似。它让你可以定义一系列提示模板步骤,并将它们组合成一个整体,而不是手动地、一步步地调用和拼接多个模板。

为什么要使用它?

在没有 PipelinePromptTemplate时,如果你要构建一个包含多个部分(如系统指令、一些示例、用户查询、上下文信息)的复杂提示,你可能需要:

  1. 单独格式化每个模板。

  2. 手动将它们拼接成一个巨大的字符串。

  3. 管理它们之间的依赖关系和输入变量。

这种方式非常繁琐且容易出错。PipelinePromptTemplate通过​​自动化这个拼接过程​​并​​明确管理依赖关系​​来解决这个问题。

核心组成部分

一个 PipelinePromptTemplate主要由两部分组成:

  1. ​最终提示模板(Final Prompt Template)​​:

    • 这是最终生成的、将要发送给大语言模型(LLM)的提示模板。

    • 它定义了最终提示的结构,并包含对所有可用变量的引用(这些变量来自前面的管道步骤)。

  2. ​管道提示模板(Pipeline Prompt Templates)​​:

    • 这是一个由多个中间提示模板组成的列表。

    • 每个中间模板执行一项特定的任务(例如,生成系统消息、格式化示例等)。

    • 每个模板的​​输出​​将成为下一个模板的​​输入变量​​之一。

工作原理图解

下图直观地展示了 PipelinePromptTemplate的工作流程,它将多个提示模板的串联过程自动化:

如图所示,前一个模板的输出会成为后一个模板的输入,最终所有内容被整合到最终模板中。

代码示例

下面是一个具体的代码示例,展示了如何创建和使用 PipelinePromptTemplate

from langchain.prompts.pipeline import PipelinePromptTemplate
from langchain.prompts.prompt import PromptTemplate# 1. 定义多个独立的提示模板
# 模板1:生成系统指令
system_template = PromptTemplate.from_template("你是一位专业的{role}。请用{style}的风格来回答用户问题。"
)
# 模板2:格式化示例
example_template = PromptTemplate.from_template("以下是一个示例:\n输入:{example_input}\n输出:{example_output}"
)
# 模板3:最终提示(它将整合所有部分)
final_template = PromptTemplate.from_template("""
{system_message}{formatted_examples}请回答用户的问题:
{user_input}
""")# 2. 将模板组合成管道
# 每个元素是一个元组:(变量名, 模板)
pipeline_prompts = [("system_message", system_template),   # system_template的输出会赋给最终模板的system_message变量("formatted_examples", example_template) # example_template的输出会赋给formatted_examples变量
]
# 创建管道提示模板
pipeline = PipelinePromptTemplate(final_prompt=final_template,pipeline_prompts=pipeline_prompts
)# 3. 准备输入变量(包含所有模板需要的所有变量)
input_variables = {"role": "厨师","style": "风趣幽默","example_input": "如何做西红柿炒蛋?","example_output": "第一步,先让西红柿和鸡蛋交个朋友...","user_input": "如何做红烧肉?" # 最终模板需要的变量
}# 4. 格式化提示!PipelinePromptTemplate会自动处理所有的拼接工作。
formatted_prompt = pipeline.format(**input_variables)
print(formatted_prompt)

输出结果

运行上述代码,formatted_prompt将会是一个完美组合好的字符串:

你是一位专业的厨师。请用风趣幽默的风格来回答用户问题。以下是一个示例:
输入:如何做西红柿炒蛋?
输出:第一步,先让西红柿和鸡蛋交个朋友...请回答用户的问题:
如何做红烧肉?

优势总结

  1. ​模块化(Modularity)​​:你可以将复杂的提示分解成小的、可重用的模块。例如,可以单独维护一个“系统指令模板库”和一个“示例模板库”。

  2. ​可维护性(Maintainability)​​:修改其中一个部分(例如,更改系统指令的风格)不会影响其他部分。

  3. ​清晰性(Clarity)​​:清晰地定义了提示的每个部分是如何生成的,以及它们之间的依赖关系。

  4. ​减少错误​​:自动化拼接过程,避免了手动拼接可能出现的错误和疏忽。

何时使用?

当你发现自己在反复拼接多个提示字符串时,或者当你需要构建非常长且结构复杂的提示时,PipelinePromptTemplate是一个非常好的工具。它特别适用于构建高级的​​智能代理(Agents)​​、​​复杂链(Chains)​​ 以及​​需要动态注入少量示例(few-shot)​​ 的场景。

http://www.dtcms.com/a/390595.html

相关文章:

  • git 本地仓库与远程仓库链接
  • 绘想 - 百度推出的AI视频创作平台
  • 穿越像素的凝视:深度解析视频中的人物与动物识别算法技术
  • OpenHarmony 4.0 Release源码下载、编译及烧录
  • 大模型提示词Prompt工程:2-全攻略+最佳实践框架+原理解析+实战案例库+七招要诀
  • 大模型微调——Prompt-Tuning
  • code2prompt 快速生成项目 Markdown 文档(结合大模型进行问答)
  • UIKit-CAGradientLayer
  • K8s LoadBalancer服务深度解析
  • Windows 系统开发 iOS 与安卓应用全流程指南,附 PC 前端工具链
  • CentOS 7 系统 “cannot find a valid baseurl for repo base7x86_64” 报错完整解决方案
  • centos7通过kubeadm安装k8s1.27.1版本
  • kubesphere(k8s)如何设置存储类的默认路径
  • 在 k8s 上部署 Kafka 4.0 3节点集群
  • k8s 部署 EMQX 5.8.6 静态三节点集群
  • UVa1374/LA3621 Power Calculus
  • 以 NoETL 重塑 AI-Ready 的数据底座,Aloudata 获评 IDC 面向生成式 AI 的数据基础设施核心厂商
  • 声音转文字API平台推荐
  • Vue3: watch watchEffect
  • 梯度提升算法及其在回归与分类中的应用实战
  • 【自然语言处理与大模型】大模型应用开发四个场景
  • 深度神经网络-传播原理
  • 交通仿真术语
  • 关于Oracle主外键约束的几个SQL语句
  • Python 操作 SQLite:Peewee ORM 与传统 sqlite3.connect 的全方位对比
  • go资深之路笔记(四)中间件(Middleware)设计模式
  • MySQL分库分表迁移:ETL平台如何实现数据合并与聚合
  • [极客大挑战 2019]BabySQL
  • SQL-索引使用
  • 数据库和数据仓库有什么区别