【langchain手把手3】使用示例选择器构建Prompt

news2025/1/21 4:49:09

【langchain手把手3】使用示例选择器构建Prompt

Example selector

示例选择器实现用于选择示例以将其包括在提示中的逻辑。这使我们能够选择与输入最相关的示例。core内置的有以下3种示例选择器:

  • LengthBasedExampleSelector:
  • MaxMarginalRelevanceExampleSelector:
  • SemanticSimilarityExampleSelector:

此外,langchain_community还有多种示例选择器,这里就不再过多尝试了。

# 为了使用示例选择器,我们需要创建一个示例列表。这些通常应该是示例输入和输出。
# 为了这个演示的目的,让我们假设我们正在选择如何转换反义词的例子。
examples = [
    {"input": "happy", "output": "sad"},
    {"input": "tall", "output": "short"},
    {"input": "energetic", "output": "lethargic"},
    {"input": "sunny", "output": "gloomy"},
    {"input": "windy", "output": "calm"},
]

from langchain_core.prompts import PromptTemplate
# PromptTemplate用于格式化这些用例。
example_prompt = PromptTemplate(
    input_variables=["input", "output"],
    template="Input: {input}\nOutput: {output}",
)

Select by length

当您担心构建一个将超过上下文窗口长度的提示时,这很有用。对于较长的输入,它将选择较少的示例来包括,而对于较短的输入,则会选择更多。

官方API地址:https://api.python.langchain.com/en/latest/example_selectors/langchain_core.example_selectors.length_based.LengthBasedExampleSelector.html


from langchain_core.example_selectors import LengthBasedExampleSelector
from langchain_core.prompts import FewShotPromptTemplate

"""
LengthBasedExampleSelector根据长度来选择示例,以下为几个变量:
- examples: List[dict] # 提示模板所需的示例列表。
- example_prompt: PromptTemplate # 用于设置示例格式的提示模板。
- get_text_length: Callable[[str], int] = _get_length_based # 用于测量提示长度的函数。默认为字数。get_text_length: Callable[[str], int] = lambda x: len(re.split("\n| ", x))
- max_length: int = 2048 # Max length for the prompt, beyond which examples are cut.
"""

example_selector = LengthBasedExampleSelector(
    examples=examples,
    example_prompt=example_prompt,
    max_length=25,
)

"""
通过LengthBasedExampleSelector构成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="Input: {adjective}\nOutput:",
    input_variables=["adjective"],
)

# An example with small input, so it selects all examples.
print(dynamic_prompt.format(adjective="big"))
Give the antonym of every input

Input: happy
Output: sad

Input: tall
Output: short

Input: energetic
Output: lethargic

Input: sunny
Output: gloomy

Input: windy
Output: calm

Input: big
Output:
# 给一个长句子(21个词),他就会限制prompt的长度,只输出1个示例
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(adjective=long_string))

import re
print("word count:" + str(len(re.split("\n| ", long_string))))
Give the antonym of every input

Input: happy
Output: sad

Input: big and huge and massive and large and gigantic and tall and much much much much much bigger than everything else
Output:
word count:21
# 给一个长句子(27个词),他就会限制prompt的长度,没有示例输出
long_string = "big and huge and massive and 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(adjective=long_string))

import re
print("word count:" + str(len(re.split("\n| ", long_string))))
Give the antonym of every input

Input: big and huge and massive and big and huge and massive and large and gigantic and tall and much much much much much bigger than everything else
Output:
word count:27

由以上实验可知,LengthBasedExampleSelector主要用于控制Prompt长度,以免超过模型要求的上限

Select by maximal marginal relevance (MMR)

MaxMarginalRelevanceExampleSelector根据与输入最相似的示例的组合来选择示例,同时优化多样性。它通过找到嵌入与输入具有最大余弦相似性的示例来做到这一点,然后迭代地添加它们,同时惩罚它们与已经选择的示例的接近程度。

官方API地址:https://api.python.langchain.com/en/latest/example_selectors/langchain_core.example_selectors.semantic_similarity.MaxMarginalRelevanceExampleSelector.html

官方Demo地址:https://python.langchain.com/v0.1/docs/modules/model_io/prompts/example_selectors/mmr/

论文:https://arxiv.org/pdf/2211.13892.pdf

from langchain_core.example_selectors import MaxMarginalRelevanceExampleSelector
from langchain_community.embeddings import DashScopeEmbeddings
from langchain_community.vectorstores.faiss import FAISS
import os
import getpass

"""
LengthBasedExampleSelector使用示例列表和嵌入创建k-shot示例选择器,以下为几个变量:
- examples: List[dict] # 提示模板所需的示例列表。
- embeddings: Embeddings # 初始化的嵌入API接口,例如OpenAIEmbeddings()。
- vectorstore_cls (Type[VectorStore]) # A vector store DB interface class, e.g. FAISS.
- k: int=4 # 选择生成的示例个数
"""

example_selector = MaxMarginalRelevanceExampleSelector.from_examples(
    # The list of examples available to select from.
    examples,
    # 由于OpenAI连接不方便,星火的Embedding API新老版本不一致,这里使用dashscope/阿里的
    # 注册地址:https://dashscope.console.aliyun.com/overview
    embeddings = DashScopeEmbeddings(dashscope_api_key="*", model="text-embedding-v1",),
    # 存储embedding
    vectorstore_cls=FAISS,
    # The number of examples to produce.
    k=2,
)

# Embedding和向量存储的选择后续章节会再讲,又是一大章篇幅

mmr_prompt = FewShotPromptTemplate(
    example_selector=example_selector,
    example_prompt=example_prompt,
    prefix="Give the antonym of every input",
    suffix="Input: {adjective}\nOutput:",
    input_variables=["adjective"],
)

# 输入是一种感觉,所以应该选择快乐/悲伤的例子作为第一个
print(mmr_prompt.format(adjective="worried"))
Give the antonym of every input

Input: happy
Output: sad

Input: windy
Output: calm

Input: worried
Output:

Select by similarity

此对象根据与输入的相似性来选择示例。它通过找到具有与输入具有最大余弦相似性的嵌入的示例来实现这一点。

from langchain_core.example_selectors import SemanticSimilarityExampleSelector 

example_selector = SemanticSimilarityExampleSelector.from_examples(
    # The list of examples available to select from.
    examples,
    # 由于OpenAI连接不方便,星火的Embedding API新老版本不一致,这里使用dashscope/阿里的
    # 注册地址:https://dashscope.console.aliyun.com/overview
    embeddings = DashScopeEmbeddings(dashscope_api_key="*", model="text-embedding-v1",),
    # 存储embedding
    vectorstore_cls=FAISS,
    # The number of examples to produce.
    k=1,
)

# Embedding和向量存储的选择后续章节会再讲,又是一大章篇幅

mmr_prompt = FewShotPromptTemplate(
    example_selector=example_selector,
    example_prompt=example_prompt,
    prefix="Give the antonym of every input",
    suffix="Input: {adjective}\nOutput:",
    input_variables=["adjective"],
)

# 输入是一种感觉,所以应该选择快乐/悲伤的例子作为第一个
print(mmr_prompt.format(adjective="worried"))
Give the antonym of every input

Input: happy
Output: sad

Input: worried
Output:
# 输入是一种度量,因此应选择高/短示例
print(mmr_prompt.format(adjective="large"))
Give the antonym of every input

Input: tall
Output: short

Input: large
Output:

请关注LLM硬着陆公众号,共同学习进步

在这里插入图片描述

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

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

相关文章

【leetcode--文本对齐(还没整理完)】

根据题干描述的贪心算法,对于每一行,我们首先确定最多的是可以放置多少单词,这样可以得到该行的空格个数,从而确定该行单词之间的空格个数。 根据题目中填充空格的细节,我们分以下三种情况讨论: 当前行是…

JVM学习-详解类加载器(一)

类加载器 类加载器是JVM执行类加载机制的前提 ClassLoader的作用 ClassLoader是Java的核心组件,所有的Class都是由ClassLoader进行加载的,ClassLoader负责通过各种方式将Class信息的二进制数据流读入JVM内部,转换为一个与目标类型对应的ja…

大模型时代的具身智能系列专题(九)

NYU Lerrel Pinto团队 Lerrel Pinto是NYU Courant的计算机科学助理教授,也是用机器人和人工智能实验室(CILVR小组)的一员。在加州大学伯克利分校读博士后,在CMU机器人研究所读博士,在印度理工学院古瓦哈蒂读本科。研究目标是让机器人在我们生…

SpringBoot项目实现自定义注解方式的接口限流

一,实现原理 该限流方式使用的是令牌桶算法,令牌桶算法是基于漏桶算法的一种改进,主要在于令牌桶算法能够在限制服务调用的平均速率的同时,还能够允许一定程度内的突发调用。 系统以固定的速率向桶中添加令牌当有请求到来时&#…

微信小程序实现图生图(AI动漫特效)效果代码(触站API)

1.效果 触站AI图生图 2.本次用的是触站平台的API,我申请的适用积分,有水印(博主没钱)。如果需要没有水印的可以去买他们的资源包 3.首先我们需要去触站官网平台注册/登录账号(已注册可跳过该步骤) 4.开通API权限 我们可以在主页看到自己免费获取的500积分,用于接口调用…

SHA-3算法:新一代的哈希函数标准

在信息安全领域,哈希函数是不可或缺的工具之一,它能够将任意长度的数据转换为固定长度的字符串,通常用于数据完整性验证、数字签名、密码存储等场景。随着计算能力的提升和攻击技术的发展,原有的哈希算法如SHA-1和SHA-2系列逐渐显…

数据结构之归并排序算法【图文详解】

P. S.:以下代码均在VS2019环境下测试,不代表所有编译器均可通过。 P. S.:测试代码均未展示头文件stdio.h的声明,使用时请自行添加。 博主主页:LiUEEEEE                        …

金属切削机床5G智能工厂工业物联数字孪生,推进制造业数字化转型

金属切削机床5G智能工厂工业物联数字孪生,推进制造业数字化转型。随着工业4.0时代的到来,制造业正面临着前所未有的变革与挑战。在这场变革中,金属切削机床智能工厂工业物联数字孪生平台正成为推动制造业数字化转型的重要力量。 数字孪生是指…

Ego微商项目部署(小程序项目)(全网最详细教程)

1.项目部署前的准备 1.1获取APPID和APPSecret(微信小程序) 微信小程序注册流程及APPID,APPSecret获取-CSDN博客 把获取到的APPID,APPSecret复制粘贴,保存下来,等会要用到 1.2测试工具 navicat&#xf…

ps怎么设置立体字

一. 输入文字并调整大小和位置。 二. 使用CtrlAlt和T键复制并自由变换文字图层。 三. 通过键盘的方向键将复制的图层向左、向上各移动一个像素,多次重复操作以创建立体效果。 更多实用教程: 点击进入

PS系统教程11

HUD拾色器 作用:它可以帮助使用者更加高效地选择和使用颜色,从而提高工作效率和设计质量。 先确定色相值改变饱和度改变亮度使用HUD拾色器选中画笔工具画笔模式-正常shiftAlt右键 色相轮 上下移动从黑到白亮度变化左右移动从浅到深饱和度的变化选中颜…

Linux 35.5 + JetPack v5.1.3@FUEL编译安装

Linux 35.5 JetPack v5.1.3FUEL编译安装 1. 源由2. 编译&安装Step 1:依赖库安装Step 2:建立工程Step 3:编译工程Step 4:安装工程 3. 问题汇总3.1 fuel_planner/exploration_manager - dw3.2 fuel_planner/plan_env - OpenCV库…

IDEA的使用配置Maven(及selenium+webdriver的下载配置)

一. 下载maven 1. maven官网下载链接 2.​​安装第二行第一列的zip压缩包 ​​​​​​​​ 二. 配置环境变量 1.新建环境变量 2.在系统变量Path环境变量中添加%Maven_HOME%\bin 三.验证环境变量是否配置成功 winr >cmd>mvn -v 如果出现Maven的版本信息&#xff0…

隐藏 IP 地址的重要性是什么?

在当今的数字时代,保护我们的在线身份至关重要。从保护个人信息到保护隐私,互联网用户越来越多地寻求增强在线安全性的方法。保持匿名和保护敏感数据的一个关键方面是隐藏您的 IP 地址。在这篇博文中,我们将深入探讨隐藏 IP 地址的重要性&…

Druid监控页面无法打开(404)

网上教程 我得到的结果 解决 如果localhost:7080/druid/login.html 无法打开Druid监控页面,那么说明Druid数据库连接池根本就没有配置成功,所以才会出现404. 上面配置不成功,要么是配置问题,要么就是版本不兼容问题(大…

推荐一个免费的相亲工具

推荐一个免费的相亲工具,步骤如下: 1)微信里面搜索公众号“光源桥”,并关注 2)输入搜索条件进行搜索对象 例如下面搜索:

Kotlin 网络请求小例子(Ktor)

文章目录 导入依赖创建 Http 客户端 其实还是借着 Ktor 学一学 Kotlin 如何导入依赖,这应该是我们 Kotlin 基础专栏的最后一期了。 Ktor 是 Kotlin 官方的一个网络请求库,它具有优秀且精炼的 API,并且是跨平台的。 本教程参考自 Ktor 文档 …

最强总结!18个机器学习核心算法模型!!

前言 大家好~在学习机器学习之后,你认为最重要的算法模型有哪些?今儿的内容涉及到 线性回归逻辑回归决策树支持向量机朴素贝叶斯K近邻算法聚类算法神经网络集成方法降维算法 我把每种算法模型的核心公式和代码也列举了出来,如果有其他比较重…

自动化测试-Selenium-元素定位

一.元素定位 因为使用selenium进行自动化测试,元素定位是必不可少的,所以这篇文章用于自动化测试中的selenium中的元素定位法。 1.根据id属性进行定位(id是唯一的) id定位要求比较高,要求这个元素的id必须是固定且唯…