langchain介绍之-Prompt
LangChain 是一个基于语言模型开发应用程序的框架。它使得应用程序具备以下特点:1.数据感知:将语言模型与其他数据源连接起来。2.代理性:允许语言模型与其环境进行交互
LangChain 的主要价值在于:组件:用于处理语言模型的抽象,以及每个抽象的多个实现集合。这些组件是模块化且易于使用的,无论您是否在使用 LangChain 框架的其他部分
现成的链式结构:由多个组件组成的结构化组合,用于完成特定的高级任务现成的链式结构使得入门变得轻松。对于更复杂的应用程序和微妙的用例,组件使得可以轻松定制现有链式结构或构建新的结构。此篇博客主要介绍Langchain的prompt相关内容。
Langchain中提供了哪些Prompt呢?具体如下图所示,是截至目前Langchain提供的所有模版,对于base类模版,在通过langchain构建应用时,一般很少用到,开发者主要用的还是ChatPromptTemplate,PromptTemplate,以及各类MessagePromptTemplate。

为什么Lanchain会提供不同类型的MessagePromptTemplate呢?因为Openai的原始接口中,对于chat completion这个接口,里面的user role就分为user,system,assistant三个角色,所以,这里的MessageTemplate也分为HumanMessagePromptTemplate,AIMessagePromptTemplate,SystemMessagePromptTemplate。
openai官方提供的chat completion的接口如下图所示,可以看到原始调用openai的接口中,需要传入role的信息,所以上面的三种messagePromptTemplate对应三种不同的角色。

了解了前面的基础知识后,来看看如何使用PromptTemplate。下面的代码中调用from_template
(...)传入了一份带变量的字符串,调用format信息后,打印出来的message就是将变量值于原有字符串merge后的值。另外,从结果也可以看到,PromptTemplate是一个报刊input_variables和template变量的的class。
import openai
import os
from langchain.prompts import (PromptTemplate)prompt_template = PromptTemplate.from_template("Tell me a joke about {context}")
message = prompt_template.format(context="chidren")
print(prompt_template)
print(type(prompt_template))
print(message)

除了通过from_template()的方法初始化一个PromptTemplate的class外,还可以通过下面的方法初始化这个class
prompt_template_two = PromptTemplate(input_variables=['name'],template="what is your {name}"
)
print(prompt_template_two)
接着来看看SystemMessagePromptTemplate的使用,在创建好一个PromptTemplate后,可以将prompt赋值给SystemMessagePromptTemplate。可以看到SystemMessagePromptTemplate除了prompt变量外,还有template_format,validate_template变量。
prompt = PromptTemplate(template="You are a helpful assistant that translates {input_language} to {output_language}.",input_variables=["input_language", "output_language"],
)
system_message_prompt = SystemMessagePromptTemplate(prompt=prompt)
print(system_message_prompt)
print(type(system_message_prompt))

除了上面的方式初始化一个SystemMessageTemplate外,还可以通过调用from_template的方式进行初始化。可以看到初始化出来的对象是一样的。
prompt_string = """Translate the text \
that is delimited by triple backticks \
into a style that is {style}. \
text: ```{text}```
"""
system_message_prompt_two = SystemMessagePromptTemplate.from_template(prompt_string)
print(system_message_prompt_two)

接下来再看看ChatPromptTemplate,这里先创建了一个HumanMessagePromptTemplate,然后通过from_message,将创建了promptTemplate赋值给了ChatPromptTemplate
human_prompt_template = HumanMessagePromptTemplate.from_template(prompt_string)
print(human_prompt_template)
print('-------------------')
chat_prompt = ChatPromptTemplate.from_messages([human_prompt_template])
print(chat_prompt)
执行结果如下图所示,可以看到直接打印的话,HumanMessagePromptTemplate和前面的SystemMessagePromptTemplate无区别,class包含的字段都一样。组装出来的ChatPromptTemplate包含input_variables,output_parser,messages三个变量,messages的值就是生成的HumanMessagePromptTemplate.

调用ChatPromptTemplate的format_messages()方法,可以将变量值和原有的prompt中的文字进行合并。结果如下图所示,返回的message是一个List,List只有一个值就是HumanMessage对象,HumanMessage对象又包含content,additional_kwargs={},example变量。
message = chat_prompt.format_messages(style="myStyle", text="mytext")
print(message)

可以看到不同promptTemplate之间有一点绕,这可能也和AI技术不断在更新,langchain也在不断迭代有关吧。
message对象生成好后,就可以调用model生成内容了,代码如下所示:
chat = ChatOpenAI(model_name="gpt-3.5-turbo", verbose=True)
response = chat(message)
print(response)
print(response.content)
调用大模型生成的内容如下图所示:

以上就是对Langchain中Prompt的使用介绍。
相关文章:
langchain介绍之-Prompt
LangChain 是一个基于语言模型开发应用程序的框架。它使得应用程序具备以下特点:1.数据感知:将语言模型与其他数据源连接起来。2.代理性:允许语言模型与其环境进行交互 LangChain 的主要价值在于:组件:用于处理语言模型…...
汇编语言Nasmide编辑软件
用来编写汇编语言源程序,Windows 记事本并不是一个好工具。同时,在命令行编译源程序也令很多人迷糊。毕竟,很多年轻的朋友都是用着 Windows 成长起来的,他们缺少在 DOS和 UNIX 下工作的经历。 我一直想找一个自己中意的汇编语言编…...
用python开发一个炸金花小游戏
众所周知扑克牌可谓是居家旅行、桌面交友的必备道具, 今天我们用 Python 来实现一个类似炸金花的扑克牌小游戏,先来看一下基本的游戏规则。 炸(诈)金花又叫三张牌,是在全国广泛流传的一种民间多人纸牌游戏…...
Uniapp中使用uQRCode二维码跳转小程序页面
下载插件 uQRCode官网地址 引入插件 文件如下 //--------------------------------------------------------------------- // github https://github.com/Sansnn/uQRCode //---------------------------------------------------------------------let uQRCode = {};(functio…...
解决husky在mac下不生效的问题
目录 一、问题 1.1 问题描述 二、解决 2.1 解决 一、问题 1.1 问题描述 本文主要解决的问题是,husky在windows上正常生肖,但放到mac下后不生效的问题! 为了确保团队中提交代码的一致性,因此使用了 husky 作为提交的检测工具…...
如何在自动化测试中使用MitmProxy获取数据返回?
背景介绍 当我们在接口或UI自动化项目中,常常会出现这种现象——明明是正常请求,却无法获取到想要的数据返回。 比如: 场景A:页面是动态数据,第一次进入页面获取到的数据,和下次进入页面获取到的数据完全…...
达之云BI平台助力中国融通集团陕西军民服务社有限公司实现数字化运营
中国融通集团陕西军民服务社是一家大型综合类零售购物中心,公司目前管理系统运行了10年左右,面临系统新零售支持发展严重滞后,行业主流应用落地困难,如线上业务、到家业务、全渠道营销、电子发票、自助收银、扫码购、无感停车、未…...
Private market:借助ZK实现的任意计算的trustless交易
1. 引言 Private market,借助zk-SNARKs和以太坊来 隐私且trustlessly selling: 1)以太坊地址的私钥(ECDSA keypair)2)EdDSA签名3)Groth16 proof:借助递归性来匿名交易Groth16 proo…...
反序列化漏洞复现(typecho)
文章目录 执行phpinfogetshell 执行phpinfo 将下面这段代码复制到一个php文件,命名为typecho_1.0-14.10.10_unserialize_phpinfo.php,代码中定义的类名与typecho中的类相同,是它能识别的类: <?php class Typecho_Feed{const…...
QT设计一个小闹钟
设置一个闹钟,左侧窗口显示当前时间,右侧设置时间,以及控制闹钟的开关,下方显示闹钟响时的提示语。当按启动按钮时,设置时间与闹钟提示语均不可再改变。当点击停止时,关闭闹钟并重新启用设置时间与闹钟提示…...
MybatisPlus(3)
前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 一、查询投影🍭 查询投影是指在查询操作中,只选择…...
安全计算环境技术测评要求项
1.身份鉴别-在应用系统及各类型设备中确认操作者身份的过程(身份鉴别和数据保密) 1-2/2-3/3-4/4-4 a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换 b)应具有…...
Excel快捷键表
工作表插入新工作表ShiftF11或AltShiftF1移动到工作簿中的下一张工作表CtrlPageDown移动到工作簿中的上一张工作表CtrlPageUp选定当前工作表和下一张工作表ShiftCtrlPageDown取消选定多张工作表Ctrl PageDown选定其他的工作表CtrlPageUp选定当前工作表和上一张工作表ShiftCtrlP…...
Windows Server 系统各版本及授权说明(附下载地址
本文为Windows Server系统各版本差异对比及授权说明。 会对相关目前仍主流使用的相关Windows Server系统版本和相关授权进行对比和功能说明。 WindowsServer2012 R2 Windows Server 2012 R2授权方式是按照物理CPU数量进行授权,比如物理服务器CPU插槽数量2ÿ…...
【智慧工地源码】物联网和传感器技术在智慧工地的应用
物联网(IoT)和传感器技术在智慧工地中扮演着至关重要的角色。这些技术的应用,使得智慧工地能够实现对施工过程的精确监控、数据收集和分析,以及设备互联,从而提高工程效率、减少成本并改善工人的工作环境。 一、物联网…...
计算机安全学习笔记(IV):基于角色的访问控制 - RBAC
RBAC(Role-Based Access Control)基于用户在系统中设定的角色而不是用户的身份。一般来说,RBAC模型定义角色为组织中的一项工作职责,RBAC系统给角色而不是给单独的用户分配访问权。用户根据他们的职责被静态地或动态地分配给不同的角色。 RBAC模型间的关…...
MFC中的Button修改颜色的方法
添加工具箱下面的MFC Button Control控件(不使用普通的Button控件);给按键添加变量:m_MFCButton1,变量类型(默认)为:CMFCButton;testDlg.cpp中初始化中添加如下代码&…...
【算法】选择排序
选择排序 选择排序代码实现代码优化 排序: 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录&…...
golang之context实用记录
简言 WithCancel()函数接受一个 Context 并返回其子Context和取消函数cancel 新创建协程中传入子Context做参数,且需监控子Context的Done通道,若收到消息,则退出 需要新协程结束时,在外面调用 cancel 函数,即会往子C…...
音视频FFmpeg简单理解学习,必学技术
FFmpeg是一个开源的多媒体框架,它包含了一个用于音频和视频编解码的库。它可以执行各种多媒体操作,如格式转换、视频剪辑、音频处理等。可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。 FFmpeg的结构 默认的编译会生成…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
Qt 事件处理中 return 的深入解析
Qt 事件处理中 return 的深入解析 在 Qt 事件处理中,return 语句的使用是另一个关键概念,它与 event->accept()/event->ignore() 密切相关但作用不同。让我们详细分析一下它们之间的关系和工作原理。 核心区别:不同层级的事件处理 方…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...
