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

【LangChain系列 11】Prompt模版——拼装组合

原文地址:【LangChain系列 11】Prompt模版——拼装组合

本文速读:

  • 多prompt模版组合

  • 单prompt模版拼装

在平常业务开发中,我们常常需要把一些公共模块提取出来作为一个独立的部分,然后将业务中去将这些模块进行组合。在LLM应用开发中,我们也会需要采用这种思想,比如将一些公共的promt模版独立出来,这样prompt模版就可以更好地复用,减少不必要的代码,保持代码和逻辑的简洁。

LangChain对prompt模版的组合提供两种方式:

1. 针对多个prompt模版进行组合。

2. 将多个部分拼装成一个prompt模版。

01 多prompt模版组合


LangChain提供了PipelinePrompt来进行多prompt模版组合。一个PipelinePrompt包含两个部分:

  • 最终的prompt模版:最终生成的prompt模版。

  • 待组合的prompt模版:它是一个列表,列表里的每一项包含一个名字和一个prompt模版。

如下面代码所示,full_prompt就是最终的 prompt模版,input_prompts就是 待组合的prompt模版;将input_prompts中的prompt模版最终组合成了full_prompt。

from langchain.prompts.pipeline import PipelinePromptTemplate
from langchain.prompts.prompt import PromptTemplatefull_template = """{introduction}{example}{start}"""
full_prompt = PromptTemplate.from_template(full_template)introduction_template = """You are impersonating {person}."""
introduction_prompt = PromptTemplate.from_template(introduction_template)example_template = """Here's an example of an interaction: Q: {example_q}
A: {example_a}"""
example_prompt = PromptTemplate.from_template(example_template)start_template = """Now, do this for real!Q: {input}
A:"""
start_prompt = PromptTemplate.from_template(start_template)input_prompts = [("introduction", introduction_prompt),("example", example_prompt),("start", start_prompt)
]
pipeline_prompt = PipelinePromptTemplate(final_prompt=full_prompt, pipeline_prompts=input_prompts)
print(pipeline_prompt.input_variables)

输出结果:

['example_a', 'person', 'example_q', 'input']

执行下面代码:

print(pipeline_prompt.format(person="Elon Musk",example_q="What's your favorite car?",example_a="Tesla",input="What's your favorite social media site?"
))

输出结果:

    You are impersonating Elon Musk.Here's an example of an interaction: Q: What's your favorite car?A: TeslaNow, do this for real!Q: What's your favorite social media site?A:

02 单prompt版拼装


单prompt模版拼装是指将多个部分拼装成一个完整的prompt模版,一般来说是将字符串与prompt模版拼成一个新的prompt模版。下面主要介绍字符串prompt模版和对话prompt模版这两种模版的拼装,通过两个代码示例来介绍它们的用法。

字符串prompt模版

在下面代码中,将一个字符串prompt模版和两个字符串通过 + 拼装起来。

from langchain.prompts import PromptTemplateprompt = (PromptTemplate.from_template("Tell me a joke about {topic}")+ ", make it funny"+ "\n\nand in {language}"
)
print(prompt)

输出结果:

PromptTemplate(input_variables=['language', 'topic'], output_parser=None, partial_variables={}, template='Tell me a joke about {topic}, make it funny\n\nand in {language}', template_format='f-string', validate_template=True)

执行代码:

print(prompt.format(topic="sports", language="spanish"))

输出结果:

'Tell me a joke about sports, make it funny\n\nand in spanish'

同样,我们可以在LLMChain中使用这个拼装的prompt。

from langchain.chat_models import ChatOpenAI
from langchain.chains import LLMChainmodel = ChatOpenAI(openai_api_key="xxx")
chain = LLMChain(llm=model, prompt=prompt)
chain.run(topic="sports", language="spanish")

执行代码,输出结果:

'¿Por qué el futbolista llevaba un paraguas al partido?\n\nPorque pronosticaban lluvia de goles.'

对话prompt模版

在下面代码中,将对话prompt中的Message和字符串通过 + 进行拼装,形成一个新的prompt模版,不仅可以将Message进行拼装,而且可以将MessagePrompt进行拼装,不过先要将MessagePrompt中的变量进行赋值。

from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate
from langchain.schema import HumanMessage, AIMessage, SystemMessageprompt = SystemMessage(content="You are a nice pirate")
new_prompt = (prompt+ HumanMessage(content="hi")+ AIMessage(content="what?")+ "{input}"
)print(new_prompt.format_messages(input="i said hi"))

输出结果:

[SystemMessage(content='You are a nice pirate', additional_kwargs={}),HumanMessage(content='hi', additional_kwargs={}, example=False),AIMessage(content='what?', additional_kwargs={}, example=False),HumanMessage(content='i said hi', additional_kwargs={}, example=False)]

同样地,可以在LLMChain中使用它:

from langchain.chat_models import ChatOpenAI
from langchain.chains import LLMChainmodel = ChatOpenAI(openai_api_key="xxx")
chain = LLMChain(llm=model, prompt=new_prompt)
chain.run("i said hi")

执行代码,输出结果:

'Oh, hello! How can I assist you today?'

本文小结

本文主要介绍了prompt模版的拼装组合,既可以将多个prompt模版进行组合,也可以对单个prompt模版进行拼装。

 更多最新文章,请关注公众号:大白爱爬山

相关文章:

【LangChain系列 11】Prompt模版——拼装组合

原文地址:【LangChain系列 11】Prompt模版——拼装组合 本文速读: 多prompt模版组合 单prompt模版拼装 在平常业务开发中,我们常常需要把一些公共模块提取出来作为一个独立的部分,然后将业务中去将这些模块进行组合。在LLM应用…...

JVM三色标记

三色标记 什么是三色标记法 三色标记法,也被称为Tri-color Marking Algorithm,是一种用于追踪对象存活状态的垃圾回收算法。它基于William D. Hana和Mark S. McCulleghan在1976年提出的两色标记法的基础上进行了改进。 与两色标记法只能将对象标记为“…...

UE5--物体卡片与材质入门

参考资料: 《Unreal Engine5 入门到精通》--左央 虚幻引擎5.2文档:https://docs.unrealengine.com/5.2/zh-CN/ 前言: 跟着左央老师的《Unreal Engine5 入门到精通》学习制作AI版胡闹厨房,把学习过程与学习到的东西归纳总结起来。 …...

ios 实现TEXT、DOC、PDF等文档读取与预览

文章目录 一、前言二、iCould相关配置三、功能实现3.1 UIDocumentPickerViewController 选取控制器3.2 读取文件3.3 文档预览3.3.1 下载并保存3.3.2 QLPreviewController预览文档四、总结一、前言 最近正在研发的项目有一个需求: 允许用户将iCloud中的文档上传,实现文件的流…...

智慧矿山:让AI算法提高未戴安全带识别率!

未穿戴安全带识别AI算法,作为智慧矿山的重要应用之一,不仅可以有效提高矿山工作人员的安全意识,还可以降低事故发生的概率。然而,识别准确率的提高一直是该算法面临的挑战之一。为了解决这个问题,研究人员不断努力探索…...

【Unity程序技巧】公共Update管理器

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…...

Node学习笔记之HTTP 模块

回顾:什么是客户端、什么是服务器? 在网络节点中,负责消费资源的电脑,叫做客户端;负责对外提供网络资源的电脑,叫做服务器。 http 模块是 Node.js 官方提供的、用来创建 web 服务器的模块。通过 http 模块…...

SD NAND对比TF卡优势(以CSNP4GCR01-AMW为例)

最近做的一个项目, 需要加大容量存储,这让我想到之前在做ARM的开发板使用的TF卡方案,但是TF卡需要携带卡槽的,但是有限的PCB板布局已经放不下卡槽的位置。 这个时候就需要那种能够不用卡槽,直接贴在板子上面&#xff0…...

在Espressif-IDE中使用Wokwi仿真ESP32

陈拓 2023/10/17-2023/10/19 1. 概述 在Espressif-IDE v2.9.0版本之后可直接在IDE中使用Wokwi模拟器。 1.1 什么是 Wokwi 模拟器? Wokwi 是一款在线电子模拟器,支持模拟各种开发板、元器件和传感器,例如乐鑫产品 ESP32。 Wokwi 提供基于浏…...

vue3里面vant组件的标签页使用?

一、绑一个v-model事件 二、让activeName的初始为0也就是默认是显示第一个标签页的下标 三、给标签页下面的东西进行一个判断 想让哪个优先显示就把哪个判断作为初始值存入...

【CSS】使用 CSS 实现一个宽高自适应的正方形

1. 利用 padding 或 vw <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><metaname"viewport"content"widthdevice-width, initial-scale1.0"><title>Document</title><st…...

Java Stream流详解

Stream API主要提供了两种类型的操作&#xff1a;中间操作 和 终止操作。 中间操作 中间操作是返回一个新的流&#xff0c;并在返回的流中包含所有之前的操作结果。它们总是延迟计算&#xff0c;这意味着它们只会在终止操作时执行&#xff0c;这样可以最大限度地优化资源使用。…...

localforage-本地存储的优化方案

前言 前端本地化存储算是一个老生常谈的话题了&#xff0c;我们对于 cookies、Web Storage&#xff08;sessionStorage、localStorage&#xff09;的使用已经非常熟悉&#xff0c;在面试与实际操作之中也会经常遇到相关的问题&#xff0c;但这些本地化存储的方式还存在一些缺陷…...

自学SLAM(4)《第二讲:三维物体刚体运动》作业

前言 小编研究生的研究方向是视觉SLAM&#xff0c;目前在自学&#xff0c;本篇文章为初学高翔老师课的第二次作业。 文章目录 前言1.熟悉 Eigen 矩阵运算2.几何运算练习3.旋转的表达4.罗德里格斯公式的证明5.四元数运算性质的验证6.熟悉 C11 1.熟悉 Eigen 矩阵运算 设线性⽅程 …...

C++:容量适配器(栈、队列、优先级队列)

目录 1.容器适配器 4.1 什么是适配器 4.2 STL标准库中的容器适配器 2.stack的使用 2.1 STL库中对stack的实现 3.queue的使用 3.1 STL库中对queue的实现 4.priority_queue使用 4.1模拟实现 priority_queue 5.deque 的简介 1.容器适配器 4.1 什么是适配器 适配器是一种…...

Java-IO流

文章目录 Java-IO流文件字节流文件字符流File类缓冲流转换流打印流数据流对象流 Java-IO流 JDK提供了一套用于IO操作的框架&#xff0c;为了方便我们开发者使用&#xff0c;就定义了一个像水流一样&#xff0c;根据流的传输方向和读取单位&#xff0c;分为字节流InputStream和…...

04、Python 爬取免费小说思路

目录 Python 爬取免费小说思路代码解析爬取东西基本的四行代码:user-agent安装模块从 bs4 导入 BeautifulSoup ,查询某个标签开头的数据筛选遍历获取小说的章节名称每章小说的链接获取请求网址的响应获取小说的内容筛选内容整理内容爬取下载到指定文件夹完整代码:Python 爬取…...

【前端vue面试】vue2

目录 computed和watchv-show和v-ifkey 的重要性v-for 和 v-if 不能一起使用&#xff01;click的event修饰符事件修饰符表单项修饰符 父子组件通讯生命周期父子组件生命周期顺序 $nextTickslot 插槽动态组件异步组件keep-alivemixin computed和watch computed 有缓存&#xff0…...

自然语言处理---Transformer机制详解之GPT模型介绍

1 GPT介绍 GPT是OpenAI公司提出的一种语言预训练模型.OpenAI在论文<< Improving Language Understanding by Generative Pre-Training >>中提出GPT模型.OpenAI后续又在论文<< Language Models are Unsupervised Multitask Learners >>中提出GPT2模型.…...

【论文阅读】点云地图动态障碍物去除基准 A Dynamic Points Removal Benchmark in Point Cloud Maps

【论文阅读】点云地图动态障碍物去除基准 A Dynamic Points Removal Benchmark in Point Cloud Maps 终于一次轮到了讲自己的paper了 hahaha&#xff0c;写个中文的解读放在博客方便大家讨论 Title Picture Reference and prenotes paper: https://arxiv.org/abs/2307.07260 …...

DDL急救包!2026论文降AI率实测:10款润色工具稳保安全区

现在写论文最怕的&#xff0c;已经不是查重了。怕什么&#xff1f;怕那个AIGC率太高。 真的&#xff0c;越来越多学校开始抓AIGC检测报告了&#xff0c;重复率放一边&#xff0c;就看你AI痕迹多不多。我自己就是刚爬出坑的25届学姐&#xff0c;这坑我踩得死死的。怎么说呢&…...

Phi-4-mini-reasoning数据库优化实践:基于MySQL查询语句的智能分析与索引建议

Phi-4-mini-reasoning数据库优化实践&#xff1a;基于MySQL查询语句的智能分析与索引建议 1. 引言&#xff1a;当数据库遇上AI助手 最近在帮一个电商平台做数据库优化时&#xff0c;遇到了一个典型问题&#xff1a;随着订单量突破百万级&#xff0c;他们的报表查询从秒级响应…...

【智能代码生成实战权威指南】:长代码场景下3大致命缺陷与7步修复框架

第一章&#xff1a;智能代码生成在长代码中的挑战 2026奇点智能技术大会(https://ml-summit.org) 长代码上下文建模是当前大语言模型在编程任务中面临的核心瓶颈。当函数体超过2000行、模块依赖深度超过5层或跨文件调用链超过10跳时&#xff0c;主流代码生成模型的语义一致性错…...

别再让串口数据丢失了!手把手教你为STM32 HAL库串口添加环形FIFO缓冲区

STM32 HAL库串口通信的救星&#xff1a;环形FIFO缓冲区实战指南 在嵌入式开发中&#xff0c;串口通信就像系统的神经末梢&#xff0c;负责与外界交换关键数据。但当你满怀期待地调试STM32的串口功能时&#xff0c;是否遇到过这样的场景&#xff1a;传感器数据莫名其妙丢失、蓝牙…...

告别图片重复困扰:AntiDupl.NET 图片去重工具完整使用指南

告别图片重复困扰&#xff1a;AntiDupl.NET 图片去重工具完整使用指南 【免费下载链接】AntiDupl A program to search similar and defect pictures on the disk 项目地址: https://gitcode.com/gh_mirrors/an/AntiDupl 你是否曾为电脑中大量重复图片占用宝贵存储空间而…...

Vivado 2017下Zynq-7Z035 PS端UDP通信避坑指南:从lwIP配置到性能调优

Vivado 2017环境下Zynq-7Z035 PS端UDP通信实战&#xff1a;从基础配置到高速传输优化 在工业控制和嵌入式网络通信领域&#xff0c;Zynq系列SoC凭借其独特的ARM处理器与可编程逻辑结合架构&#xff0c;成为许多高性能网络应用的首选平台。本文将深入探讨在Vivado 2017这一经典版…...

FanControl风扇控制终极指南:5分钟告别电脑噪音烦恼

FanControl风扇控制终极指南&#xff1a;5分钟告别电脑噪音烦恼 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/F…...

Windows系统突破性解决方案:mac-precision-touchpad驱动让苹果触控板完美适配Windows系统

Windows系统突破性解决方案&#xff1a;mac-precision-touchpad驱动让苹果触控板完美适配Windows系统 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mir…...

Kimi K2 模型总结

版本&#xff1a;2026-04-17 主题&#xff1a;Kimi K2 算法框架分析、训练/后训练方法、公开代码结构与工程落地解读 说明&#xff1a;本文基于 Kimi K2 官方技术报告、官方 GitHub 仓库、Hugging Face 模型卡与配置/代码文件整理而成。由于官方并未完整开源预训练与 RL 训练框…...

LCD1602显示异常?51单片机驱动DS1302时钟的5个常见坑点及解决方法

51单片机驱动DS1302与LCD1602的五大实战陷阱与破解之道 1. 通信协议配置不当导致的显示异常 当LCD1602显示乱码或完全不亮时&#xff0c;首先需要检查通信协议配置。51单片机与LCD1602的通信需要严格遵循时序要求&#xff0c;常见问题包括&#xff1a; 初始化序列缺失&#xff…...