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

langchain系列 - FewShotPromptTemplate 少量示例

导读

环境:OpenEuler、Windows 11、WSL 2、Python 3.12.3 langchain 0.3

背景:前期忙碌的开发阶段结束,需要沉淀自己的应用知识,过一遍LangChain

时间:20250220

说明:技术梳理,针对FewShotPromptTemplate专门来写一篇博客

概念说明

few-shot最初来源于机器学习的概念,还有one-shot、zero-shot概念,概念如下:

机器学习中的概念

Zero-Shot学习

在训练集中没有某个类别的样本,但在测试集中出现了这个类别。我们需要模型在训练过程中,即使没有接触过这个类别的样本,但仍然可以通过对这个类别的描述,对没见过的类别进行分类。

One-Shot学习

可以理解为用一条数据fine-tune模型。例如,在人脸识别场景里,你只提供一张照片,门禁就能认识各个角度的你。属于Few-Shot学习的特例。

Few-Shot学习

在模型训练过程中,如果每个类别只有少量样本(一个或几个),研究人员希望机器学习模型在学习了一定类别的大量数据后,对于新的类别,只需要少量的样本就能快速学习。

LangChain中的概念

zero-shot

仅通过提示词即可实现模型正确回答

one-shot

通过一个示例和提示词模型正确回答

few-shot

通过少量(大于1)示例和提示词模型正确回答

参数说明

examples

Optional[list[dict]] = None
示例格式化到提示词中,应提供examples 或 example_selector。

example_selector

Optional[BaseExampleSelector] = None

ExampleSelector 选择要格式化到提示符中的示例,应提供examples 或 example_selector。

validate_template

bool = False

是否尝试验证模板。

example_prompt

PromptTemplate

PromptTemplate 用于格式化单个示例。"

suffix

str

要放在示例后面的提示模板字符串。

example_separator

str = "\n\n"

用于连接前缀、示例和后缀的字符串分隔符。

prefix

str = ""

要放在示例前面的提示模板字符串。

template_format

Literal["f-string", "jinja2"] = "f-string"

提示模板的格式。选项包括:'f-string', 'jinja2'。

代码实战

 使用少量示例的prompt和大模型实现分类的功能

from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate# 示例
examples = [{"question": "下面两个动物是同一种类吗?\n1:拉布拉多\n2:哈士奇","answer": "是"},{"question": "下面两个动物是同一种类吗?\n1:草鱼\n2:鲸鱼","answer": "不是"}
]# 示例提示
example_prompt = PromptTemplate(template="Question: {question}\n{answer}")# 整合后的提示词的前缀
prefix = "你是一个生物学家,判断用户提问的动物种类回答,就判断为同一种类, 回答'是',反之回答'不是'。\n下面是一些示例:"# 整合后的提示词的前缀
suffix = "Question: {input}"# 通过FewShotPromptTemplate整合提示词
prompt = FewShotPromptTemplate(prefix=prefix,examples=examples,example_prompt=example_prompt,suffix=suffix,# input_variables=["input"] # 可省略
)print(prompt.invoke("下面两种动物是同一种类吗?\n1:波斯猫\n2:英国短毛").to_string())# 输出
你是一个生物学家,判断用户提问的动物种类回答,就判断为同一种类, 回答'是',反之回答'不是'。
下面是一些示例:Question: 下面两个动物是同一种类吗?
1:拉布拉多
2:哈士奇
是Question: 下面两个动物是同一种类吗?
1:草鱼
2:鲸鱼
不是Question: 下面两种动物是同一种类吗?
1:波斯猫
2:英国短毛

 显然,promptvalue将提示词按照规则整合在一起了,并将用户提问放在最后

下面看下配置大模型后运行结果

from langchain_core.prompts import PromptTemplate, FewShotPromptTemplate
from langchain_openai import ChatOpenAI# 示例
examples = [{"question": "下面两个动物是同一种类吗?\n1:拉布拉多\n2:哈士奇","answer": "是"},{"question": "下面两个动物是同一种类吗?\n1:草鱼\n2:鲸鱼","answer": "不是"}
]# 示例提示
example_prompt = PromptTemplate(template="Question: {question}\n{answer}")# 整合后的提示词的前缀
prefix = "你是一个生物学家,判断用户提问的动物种类回答,就判断为同一种类, 回答'是',反之回答'不是'。\n下面是一些示例:"# 整合后的提示词的前缀
suffix = "Question: {input}"# 通过FewShotPromptTemplate整合提示词
prompt = FewShotPromptTemplate(prefix=prefix,examples=examples,example_prompt=example_prompt,suffix=suffix,# input_variables=["input"] # 可省略
)
# 大模型信息
# translate_llm = ChatOpenAI(base_url="https://llm.xxx.xxxx.com/v1/",openai_api_key="sk-xxxxxxxxxx",model_name="qwen2.5-instruct")translate_llm = ChatOpenAI(**llm_info)
translate_llm =  prompt | translate_llminput5 = "下面两种动物是同一种类吗?\n1:波斯猫\n2:英国短毛"response = translate_llm.invoke(input5)
print(response.content)# 输出
是注:虽然波斯猫和英国短毛猫是两种不同的猫品种,但它们同属于家猫(Felis catus),因此可认为是同一种类。

结束

http://www.lryc.cn/news/540196.html

相关文章:

  • 详细介绍下软件生命周期的各个阶段以及常见的软件生命周期模型
  • 重构谷粒商城07:Git一小时快速起飞指南
  • 设计模式教程:命令模式(Command Pattern)
  • Qt中使用QPdfWriter类结合QPainter类绘制并输出PDF文件
  • Android开发-深入解析Android中的AIDL及其应用场景
  • RT-Thread+STM32L475VET6实现红外遥控实验
  • 【机器学习】衡量线性回归算法最好的指标:R Squared
  • 设计模式-Java
  • 代码讲解系列-CV(五)——语义分割基础
  • 在mfc中使用自定义三维向量类和计算多个三维向量的平均值
  • RDMA ibverbs_API功能说明
  • 【C++语言】string 类
  • 快速上手gdb/cgdb
  • 《养生》(二)
  • JAVA:集成 Drools 业务规则引擎的技术指南
  • GeoHD - 一种用于智慧城市热点探测的Python工具箱
  • 记一次Ngnix配置
  • 2024年国赛高教杯数学建模C题农作物的种植策略解题全过程文档及程序
  • java基础语知识(8)
  • 室内定位精度方案对比
  • Pytorch深度学习教程_5_编写第一个神经网络
  • ImportError: cannot import name ‘FixtureDef‘ from ‘pytest‘
  • 改BUG:Mock测试的时候,when失效
  • 【自动化脚本工具】AutoHotkey (Windows)
  • 专题--Linux体系
  • 【DeepSeek】Mac m1电脑部署DeepSeek
  • Spring AI + Ollama 实现调用DeepSeek-R1模型API
  • 如何在本地和服务器新建Redis用户和密码
  • jmeter接口测试(一)
  • Java-11