返回顶部
首页 > 资讯 > 后端开发 > Python >LangChain:Prompt Templates介绍及应用
  • 753
分享到

LangChain:Prompt Templates介绍及应用

人工智能python开发语言chatgpttransformer 2023-09-15 17:09:11 753人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但


❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

Prompt Templates

(封面图由文心一格生成)

LanGChain:Prompt Templates介绍及应用

在自然语言生成任务中,生成高质量的文本是非常困难的,尤其是当需要针对不同的主题、情境、问题或任务进行文本生成时,需要花费大量的时间和精力去设计、调试和优化模型,而这种方式并不是高效的解决方案。因此,Prompt Templates技术应运而生,可以大大降低模型设计、调试和优化的成本。

Prompt Templates是一种可复制的生成Prompt的方式,它包含一个文本字符串,可以接受来自终端用户的一组参数并生成Prompt。Prompt Templates可以包含指令、少量示例和一个向语言模型提出的问题。我们可以使用Prompt Templates技术来指导语言模型生成更高质量的文本,从而更好地完成我们的任务。

在这篇博客中,我们将学习

什么是Prompt Templates以及为什么需要它
如何创建Prompt Templates
如何传递few-shot examples给Prompt Templates
如何为Prompt Templates选择examples

什么是Prompt Templates?

Prompt Templates是一种可复制的生成Prompt的方式,它包含一个文本字符串,可以接受来自终端用户的一组参数并生成Prompt。Prompt Templates可以包含指令、少量示例和一个向语言模型提出的问题。Prompt Templates可以帮助我们指导语言模型生成更高质量的文本,从而更好地完成我们的任务。

Prompt Templates可以包含以下内容:

Prompt Templates可能包含:

  • 对语言模型的指令
  • 一组few-shot examples,以帮助语言模型生成更好的响应
  • 对语言模型的问题

下面的代码段包含Prompt Template的一个示例:

from langchain import PromptTemplatefrom langchain import PromptTemplatetemplate = """I want you to act as a naming consultant for new companies.Here are some examples of Good company names:- search engine, Google- social media, Facebook- video sharing, YouTubeThe name should be short, catchy and easy to remember.What is a good name for a company that makes {product}?"""prompt = PromptTemplate(    input_variables=["product"],    template=template,)

创建Prompt Templates

你可以使用PromptTemplate类创建简单的硬编码提示。Prompt Templates可以采用任何数量的输入变量,并且可以进行格式化以生成提示。

from langchain import PromptTemplate# 没有输入变量的示例promptno_input_prompt = PromptTemplate(input_variables=[], template="给我讲个笑话。")no_input_prompt.fORMat()# -> "给我讲个笑话。"# 一个有一个输入变量的示例promptone_input_prompt = PromptTemplate(input_variables=["adjective"], template="告诉我一个{adjective}笑话。")one_input_prompt.format(adjective="好笑的")# -> "告诉我一个好笑的笑话。"# 一个有多个输入变量的示例promptmultiple_input_prompt = PromptTemplate(    input_variables=["adjective", "content"],     template="告诉我一个{adjective}关于{content}的笑话。")multiple_input_prompt.format(adjective="好笑的", content="小鸡")# -> "告诉我一个好笑的关于小鸡的笑话。"

从LangChainHub加载Prompt Templates

LangChainHub包含了许多可以通过LangChain直接加载的Prompt Templates。

from langchain.prompts import load_promptprompt = load_prompt("lc://prompts/conversation/prompt.JSON")prompt.format(history="", input="What is 1 + 1?")

传递few-shot examples给Prompt Templates

Few-shot examples是一组可用于帮助语言模型生成更好响应的示例。

要生成具有few-shot examples的prompt,可以使用FewShotPromptTemplate。该类接受一个PromptTemplate和一组few-shot examples。然后,它使用这些few-shot examples格式化prompt模板。

在这个示例中,我们将创建一个用于生成单词反义词的提示。

from langchain import PromptTemplate, FewShotPromptTemplate# First, create the list of few shot examples.examples = [    {"Word": "happy", "antonym": "sad"},    {"word": "tall", "antonym": "short"},]# Next, we specify the template to format the examples we have provided.# We use the `PromptTemplate` class for this.example_formatter_template = """Word: {word}Antonym: {antonym}\n"""example_prompt = PromptTemplate(    input_variables=["word", "antonym"],    template=example_formatter_template,)# Finally, we create the `FewShotPromptTemplate` object.few_shot_prompt = FewShotPromptTemplate(    # These are the examples we want to insert into the prompt.    examples=examples,    # This is how we want to format the examples when we insert them into the prompt.    example_prompt=example_prompt,    # The prefix is some text that goes before the examples in the prompt.    # Usually, this consists of intructions.    prefix="Give the antonym of every input",    # The suffix is some text that goes after the examples in the prompt.    # Usually, this is where the user input will go    suffix="Word: {input}\nAntonym:",    # The input variables are the variables that the overall prompt expects.    input_variables=["input"],    # The example_separator is the string we will use to join the prefix, examples, and suffix together with.    example_separator="\n\n",)# We can now generate a prompt using the `format` method.print(few_shot_prompt.format(input="big"))# -> Give the antonym of every input# -> # -> Word: happy# -> Antonym: sad# -># -> Word: tall# -> Antonym: short# -># -> Word: big# -> Antonym:

为Prompt Templates选择examples

如果你有大量的示例,则可以使用ExampleSelector来选择最有信息量的一些示例,以帮助你生成更可能产生良好响应的提示。

接下来,我们将使用LengtHBasedExampleSelector,根据输入的长度选择示例。当你担心构造的提示将超过上下文窗口的长度时,此方法非常有用。对于较长的输入,它会选择包含较少示例的提示,而对于较短的输入,它会选择包含更多示例。

from langchain.prompts.example_selector import LengthBasedExampleSelector# These are a lot of examples of a pretend task of creating antonyms.examples = [    {"word": "happy", "antonym": "sad"},    {"word": "tall", "antonym": "short"},    {"word": "energetic", "antonym": "lethargic"},    {"word": "sunny", "antonym": "gloomy"},    {"word": "windy", "antonym": "calm"},]# We'll use the `LengthBasedExampleSelector` to select the examples.example_selector = LengthBasedExampleSelector(    # These are the examples is has available to choose from.    examples=examples,     # This is the PromptTemplate being used to format the examples.    example_prompt=example_prompt,     # This is the maximum length that the formatted examples should be.    # Length is measured by the get_text_length function below.    max_length=25,)# We can now use the `example_selector` to create a `FewShotPromptTemplate`.dynamic_prompt = FewShotPromptTemplate(    # We provide an ExampleSelector instead of examples.    example_selector=example_selector,    example_prompt=example_prompt,    prefix="Give the antonym of every input",    suffix="Word: {input}\nAntonym:",    input_variables=["input"],    example_separator="\n\n",)# We can now generate a prompt using the `format` method.print(dynamic_prompt.format(input="big"))# -> Give the antonym of every input# -># -> Word: happy# -> Antonym: sad# -># -> Word: tall# -> Antonym: short# -># -> Word: energetic# -> Antonym: lethargic# -># -> Word: sunny# -> Antonym: gloomy# -># -> Word: windy# -> Antonym: calm# -># -> Word: big# -> Antonym:

相比之下,如果我们提供了一个非常长的输入,则LengthBasedExampleSelector将选择较少的示例包含在提示中。

long_string = "big and huge and massive and large and gigantic and tall and much much much much much bigger than everything else"print(dynamic_prompt.format(input=long_string))# -> Give the antonym of every input# -> Word: happy# -> Antonym: sad# -># -> Word: big and huge and massive and large and gigantic and tall and much much much much much bigger than everything else# -> Antonym:

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️

👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博相关......)👈

来源地址:https://blog.csdn.net/qq_41667743/article/details/129678577

--结束END--

本文标题: LangChain:Prompt Templates介绍及应用

本文链接: https://lsjlt.com/news/408806.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • LangChain:Prompt Templates介绍及应用
    ❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但...
    99+
    2023-09-15
    人工智能 python 开发语言 chatgpt transformer
  • Python Ast介绍及应用
    Abstract Syntax Trees即抽象语法树。Ast是python源码到字节码的一种中间产物,借助ast模块可以从语法树的角度分析源码结构。此外,我们不仅可以修改和执行语法树,还可以将Source生成的语法树unparse成py...
    99+
    2023-01-30
    Python Ast
  • HTML5 Web Sockets的介绍以及应用
    这篇文章给大家介绍HTML5 Web Sockets的介绍以及应用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。HTML 5之中一个很酷的新特性就是Web Sockets介绍通过PHP...
    99+
    2024-04-02
  • ThreadLocal原理介绍及应用场景
    本次给大家介绍重要的工具ThreadLocal。讲解内容如下,同时介绍什么场景下发生内存泄漏,如何复现内存泄漏,如何正确使用它来避免内存泄漏。 ThreadLocal是什么...
    99+
    2024-04-02
  • Reactive反应式编程及使用介绍
    目录前言反应式编程简介阻塞可能会浪费资源使用异步来解决?回调地狱的例子与回调代码等效的Reactor代码示例具有超时和回退的Reactor代码示例CompletableFuture组...
    99+
    2024-04-02
  • Node中的Events模块介绍及应用
    目录Node 中的 Events1. 事件和监听器2. 处理 error 事件3. 继承 Events 模块4. 手写 EventEmitterNode 中的 Events Node...
    99+
    2022-11-13
    Node Events Node Events模块
  • Apache介绍及使用
    Apache的介绍 Apache全称:Apache HTTPD Server ;是Apache基金会的一个开源网页服务器,可以在大多数计算机操作系统中运行。Apache提供的服务器又称为:补丁服务器 ...
    99+
    2023-09-17
    apache php 服务器
  • fastjson2 介绍及使用
    目录 前言一、导入fastjson2依赖二、json对象与json数组的创建json对象创建json数组创建 三、json对象取值与json数组遍历取值json对象取值json数组遍历取值 四、json对象与字符串的转换js...
    99+
    2023-08-18
    java fastjson2 fastjson fastJson
  • JDBC中PreparedStatement详解及应用场景介绍
    前言 在Java中,当需要向数据库中执行SQL语句并传递参数时,我们通常会使用PreparedStatement接口。PreparedStatement继承自Statement接口,用于预编译SQL语句并执行参数化查询,这样可以提高执行...
    99+
    2023-09-22
    sql java mybatis 数据库 mysql
  • Java中工厂模式的介绍及应用
    本篇内容介绍了“Java中工厂模式的介绍及应用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!介绍意图:提供一个创建一系列相关或相互依赖对象的...
    99+
    2023-06-05
  • Oracle服务介绍及应用场景解析
    Oracle服务介绍及应用场景解析 Oracle公司是全球著名的数据库软件公司,其产品Oracle Database是业界领先的关系型数据库管理系统(RDBMS)。Oracle Dat...
    99+
    2024-03-02
    数据管理 应用场景 sql语句 用户权限管理 敏感数据 数据丢失
  • Golang反射介绍及应用场景分析
    go 语言中的反射功能允许程序在运行时检查和修改类型的结构。通过使用 type、value 和 reflect.kind,我们可以获取对象的类型信息、字段值和方法,还可以创建和修改对象。...
    99+
    2024-04-03
    golang 反射
  • iOS应用TestFlight内部及外部测试介绍
    通过本篇教程,可以学习到ios证书申请和打包ipa上传到App Store进行TestFlight测试的流程!TestFlight测试分内部及外部测试,针对没有上架的app,可以通过此方式安装到手机测试。内部测试(上传即可测试):通过测试码...
    99+
    2023-06-04
  • phpcms V9 默认templates主题模板文件目录结构介绍
    这篇文章则详细的介绍一下系统自带默认模板的文件目录结构。主题模板位于“..\phpcms\templates\”文件夹内。而css样式、js文件,以及模板配带的images文件夹则位于根目录下&l...
    99+
    2022-06-12
    templates 主题模板 文件目录
  • SpringCache框架应用介绍
    目录介绍常用注解实际测试介绍 Spring Cache是一个框架,实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能。 Spring Cache提供了一层抽象,底层可...
    99+
    2024-04-02
  • Numpy中Meshgrid函数介绍及2种应用场景
    Meshgrid函数是NumPy中的一个函数,用于生成一个二维坐标网格。它接受两个一维数组作为输入,然后返回两个二维数组,分别表示这...
    99+
    2023-09-20
    Numpy
  • MySQL数据库的应用领域及功能介绍
    MySQL数据库的应用领域及功能介绍 MySQL数据库作为一种轻量级、开源的关系型数据库管理系统,被广泛应用于各个领域,包括网站开发、数据分析、日志管理等多个领域。本文将介绍MySQL...
    99+
    2024-04-02
  • KVM 介绍及作用详解
    目录一、虚拟化1、背景2、虚拟化技术介绍3、虚拟化技术发展4、虚拟化类型5、虚拟化的特性特性:二、KVM概述1、KVM简介2、KVM的作用3、KVM 虚拟化架构/三种模式4、KVM核...
    99+
    2024-04-02
  • Delphi中QuotedStr介绍及使用
    在Delphi中,QuotedStr是一个函数,用于将字符串用引号括起来。QuotedStr函数接受一个字符串参数,并返回引号括起来...
    99+
    2023-09-20
    Delphi
  • Apache介绍及常用配置
    Apache是一款开源的Web服务器软件,也是目前世界上使用最广泛的Web服务器软件之一。它能够处理静态文件和动态内容,并且支持多种...
    99+
    2023-09-21
    Apache
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作