langchain系列:Model I/O模块之-Prompts

news2024/10/7 19:26:07

文章目录

  • Model I/O简介
    • 输入部分(Prompts)
      • PromptTemplate
        • from_template
      • ChatPromptTemplate

  langchain是基于大语言模型而开发的一个框架,既然是基于大语言模型,自然最重要的就是先要介绍Model I/O模块。

Model I/O简介

  Model I/O模块其实就是提供了语言模型的基础构建接口,那既然是提供构建的接口,我们首先要知道,构建一个模型到底需要哪一些部分。官方给出了一个图例如下:
在这里插入图片描述
  从上面可以看出,在整个工作的流程中,数据通过一定的格式(Format)组织起来,送入到模型中进行预测(Predict),最后将预测结果进行解析(Parse)输出。
从上面可以总结出,整个模型的构建包括了:

  • 输入部分
  • 语言模型构建部分
  • 输出部分

输入部分(Prompts)

  在LLM领域,我们把模型的输入称作Prompts,因为对于大语言模型来说,你如果要用好他,通常不会简单的抛出一个问题给他,而是会给他一些前提设定,甚至还会给他看一些案例,诸如你问chatgpt:“能不能帮我翻译一下下面的英文”,此时最好是不要直接发问,而是应该先和模型说:你是一个中英翻译专家,这样它才能回答得更好。所以我们可以大致拆解一下一个prompt大致有哪些东西组成

  • 对语言模型的身份设定描述(可选)
  • 一些回答案例,帮助回答得更好(可选)
  • 具体要问的问题(必选)

langchain针对以上的prompts的三个组成部分,提供了一些组件和接口来实现。

PromptTemplate

  PromptTemplate提供了语言模型输入的构建方式,下面我先抛出代码,然后进行解释

from langchain import PromptTemplate

prompt = PromptTemplate(
    input_variables=['product'],
    template="""
        what is a good name for a company that makes {product}?
    """
)

print(prompt.format(product="colorful socks"))
what is a good name for a company that makes colorful socks?

  在PromptTemplate中,需要指定两个东西:

template:我们要发问的问题,但是当我们用户在发问的时候,并不需要每一次都输入完整的这句话,而只需要输入一小部分,这一小部分就是用中括号括起来的变量,这个变量需要在input_variables变量中指定;
input_variables:指定template中实际需要用户输入的变量;

  从上面的解释可以看出,我们在对话的过程中,实际只需要输入input_variables的部分,其他的不需要重复输入,这也是PromptTemplate中有一个Template的原因,它是一个固定模板。同时也可以理解为什么最开始官方给的图中Format那里就像一个插槽一样,我们只需要讲用户输入的少部分数据插入到模板中,组成完整的prompt,然后送给模型就可以了。

改进一:设定模型角色
  为了让模型回答得更好,可以设定模型的角色,其实也就是添加了一句说明

from langchain import PromptTemplate

prompt = PromptTemplate(
    input_variables=['product'],
    template="""
        You are a naming consultant for new companies.
        what is a good name for a company that makes {product}?
    """
)

print(prompt.format(product="colorful socks"))

from_template

  当然以上的初始化需要显示的在input_variables中指定我们需要输入的变量,如果你角色这很麻烦,PromptTemplate还提供了一个from_template方法,让langchain自动识别出需要输入的变量。

from langchain import PromptTemplate
template1 = """
    You are a naming consultant for new companies.
    what is a good name for a company that makes {product}?
"""
prompt = PromptTemplate.from_template(template1)
print(prompt.format(product="colorful socks"))

ChatPromptTemplate

 在langchain中,对话模型(Chat Model)和大语言模型(LLMs)是稍有区分的,对话模型可以理解为是LLMs高级封装,它有更规范的输入和输出,而规范的输出就是通过ChatPromptTemplate来实现的。
  在上面一小节中,是针对LLMs的,可以看出,我们关于模型的身份设定,人类提问是不做区分的,就在一个字符串中一起描述就行,但是在Chat Model是严格区分的。分别用SystemMessagePromptTemplate和SystemMessagePromptTemplate来指定。

下面对上一小节的内容进行改造

from langchain.prompts import (
    ChatPromptTemplate,
    PromptTemplate,
    SystemMessagePromptTemplate,
    AIMessagePromptTemplate,
    HumanMessagePromptTemplate,
)

system_prompt = PromptTemplate(
    input_variables=['test'],
    template="""
        You are a naming consultant for new {test}.
    """
)
system_message_prompt = SystemMessagePromptTemplate(prompt=system_prompt)
human_prompt = PromptTemplate(
    input_variables=['product'],
    template="""
        what is a good name for a company that makes {product}?
    """
)
human_message_prompt = HumanMessagePromptTemplate(prompt=human_prompt)

chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt,human_message_prompt])
print(chat_prompt.format_prompt(test='compies',product='colorful socks'))

 可以看出,在这里对于模型身份的设定,会用SystemMessagePromptTemplate进行包装,而我们的提问,会用HumanMessagePromptTemplate进行包装。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/742348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Helm3安装和使用

Helm3安装和使用 1、Helm简介 Helm 是 Kubernetes 上的包管理器,用来管理 Kubernetes 应用程序,Helm Charts 可帮助您定义,安装和升级 复杂的 Kubernetes 应用程序。Helm 把 Kubernetes 资源(比如deployments、services或ingress等) 打包到…

ProtoBuf的学习并且制作了一个网络通讯录项目

Linux环境下载安装ProtoBuf编译器 1. 安装依赖库 Ubuntu用户选择 sudo apt-get install autoconf automake libtool curl make g unzip -yCentos用户选择 sudo yum install -y autoconf automake libtool curl make gcc-c unzip2. 下载ProtoBuf编译器 Github地址&#xff…

kmalloc与vmalloc如何选择

kmalloc和vmalloc都是Linux内核中用于内存分配的函数,但它们适用于不同的内存分配场景。 kmalloc函数用于在内核空间中分配小块(通常小于一个页面大小)的连续内存区域,这些内存区域可以用于存储内核数据结构和缓冲区等。kmalloc内…

MySQL与Oracle的粗略对比

前言 首先先说自己的感受,我第一次使用Oracle是在我第一次的实习当中,包括我也在Leetcode中做了一些题目来练习,大家也可以做做,还是有收获的。 首先,我之前一直听说Oracle是要付费的,但其实它有免费版&am…

使用nvm use 切换node版本失败

使用nvm use 切换node版本失败 exit status 1: Access is denied.(或者显示乱码)解决方法一: 使用管理员的方式运行 解决方法二: 还有一种可能,在安装nvm之前电脑中已经安装过node,所以会导致切换失败,&#xff08…

【Java练习题汇总】《第一行代码JAVA》入门介绍篇程序基本概念篇,汇总Java练习题——基础语法:变量、数据类型、运算符、控制流... ~

Java练习题 入门介绍篇&程序基本概念篇 1️⃣ 入门介绍篇习题2️⃣ 程序基本概念篇习题 1️⃣ 入门介绍篇习题 一、填空题 Java 源程序文件的后缀是_______, Java 字节码文件的后缀名称是_______。Java 程序实现可移值性,依靠的是______________。Java 语言的…

C++中的类型转化

目录 1.C语言中的类型转化 2.C强制类型转换 2.1、static_cast 2.2、reinterpret_cast 2.3、const_cast 2.4、dynamic_cast 1.C语言中的类型转化 在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或者返回值类型与…

华为ERP思考:国产自研迈出第一步

华为的进入会刺激用友、金蝶、浪潮等国产厂商加快技术革新,以及伴随着华为自身技术自研全栈的布局和不断测试,国产ERP的兼容性和标准性都将上一个新的台阶。 作者|斗斗 编辑|皮爷 出品|产业家 15小时完成全球88家子公司Meta ERP系统的切换&#x…

c++游戏小技巧6:rand()+随机迷宫(3写法:BFS,DFS,并查集)

目录 1.前言 2.前文(rand,随机数引入) 1.rand() 2.srand,随机数种子 3.用法: 1. 生成0~RAND_MAX里面的数 2.生成大于RAND_MAX的数 3.生成负数 3.正文(确信) 1.bfs写法: 1.让迷宫全是墙确定起点 2.初始化 3.循环操作: 4.总…

路径规划算法:基于天鹰优化的路径规划算法- 附代码

路径规划算法:基于天鹰优化的路径规划算法- 附代码 文章目录 路径规划算法:基于天鹰优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化算法天鹰…

漏洞复现 || TerraMaster TOS exportUser.php 远程命令执行

阅读须知 技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责。…

既有颜值又能打,达尔优实用之外的设计进化

对于时下不少二次元或游戏玩家来说,外设产品不再只是实用就够了,设计、风格也很重要,可盐可甜,有帅的也要有萌的,主打一个个性十足又非常实用。在这样的趋势下,达尔优的A系列,一改以往“硬朗”的设计风格,加入更多更贴合年轻人审美取向的主题配色。除此,新推出的针对女性市场的…

为什么Qt没有像其他框架一样广泛流行起来?

Qt 是一种功能强大且广泛应用的跨平台开发框架,具有许多优点。然而,以下是一些可能解释为什么 Qt 没有像其他框架那样广泛流行起来的原因: 我这里刚好有嵌入式、单片机、plc的资料需要可以私我或在评论区扣个6 知名度和推广力度&#xff1a…

GPT模型应用丨遥感云大数据在灾害、水体与湿地领域典型案例实践

​ ​ ​ ​ 第一部分 基础实践 一 平台及基础开发平台 GEE平台及典型应用案例介绍; GEE开发环境及常用数据资源介绍; ChatGPT、文心一言等GPT模型介绍 JavaScript基础简介; GEE遥感云重要概念与典型数据分析流程; …

技术导向下的业务测试何去何从?

前两天我发了篇鼓励测试人员学编程(思维)的文章《做测试到底要不要学编程?》,有不少同学在后台问我,自己底子差,实在跟不上怎么办? 看起来,应该是我没说清楚,导致大家有…

SOCVPOCV、global/local variation

Global/local variation global variation 用PVT 跟 RC-corner 来模拟;local variation 用 OCV/ AOCV/ SOCV 来模拟。在40nm 之前OCV 被广泛采用,但是OCV 对同一条path 上的所有cell 都设同一个derate 值,如果设的太严则过于悲观,…

自定义设置echarts label里的颜色

自定义echarts label里的颜色 option {xAxis: {type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yAxis: {type: value},series: [{data: [120, 200, 150, 80, 70, 110, 130],type: bar,label:{show: true,formatter: function (params){console.log(params)if (pa…

Three.js加载外部glb,fbx,gltf,obj 模型文件

vue3使用Three.js加载外部模型文件 1.安装Three.js yarn add three npm install three2.新建一个renderModel.js 用于处理Three.js相关逻辑 import * as THREE from three //导入整个 three.js核心库 import { GLTFLoader } from three/examples/jsm/loaders/GLTFLoader im…

FENDI CLUB啤酒,浅谈精酿分类

啤酒被爱酒人士戏称为是世界是最复杂的快乐酒精饮料。据不完全统计,啤酒的分类不少于120种。如果要详细分类的话,需要很大的篇幅。FENDI CLUB啤酒给大家一个简单的区分类别方法。 一般谈到精酿啤酒说的就是各式各样的艾尔,英文是Ale&#xff…

c++中的时间处理(2)time.h库及几个time相关的函数

关于time.h,有人总结了这么3句话: (1)time_t:表示距离 UTC 时间 1970-01-01 00:00:00 的秒数。也叫做日历时,类型是 long (2)clock_t: 只用于程序计时,貌似其他的没它什…