当前位置: 首页 > 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.mrgr.cn/news/92008.html

相关文章:

  • 【论文带读(1)】《End-to-End Object Detection with Transformers》论文超详细带读 + 翻译
  • 出行项目案例
  • 1.15作业
  • 基于Flink SQL实现7天用户行为风险识别,结合滚动窗口预聚合与CEP复杂事件处理技术,根据用户7天的动作,包括交易,支付,评价等行为,识别用户的风险等级
  • 【找工作】C++和算法复习(自用)
  • Golang | 每日一练 (3)
  • Oracle备库srvctl start丢失某个原有的service_names的案例
  • C/C++跳动的爱心
  • AD(Altium Designer)器件封装——立创商城导出原理图和PCB完成器件封装操作指南
  • 如何用校园内网远程连接服务器
  • 【排序算法】六大比较类排序算法——插入排序、选择排序、冒泡排序、希尔排序、快速排序、归并排序【详解】
  • 网络运维学习笔记 017 HCIA-Datacom综合实验01
  • 视觉应用工程师(面试)
  • 学习笔记-沁恒第五讲-米醋
  • 前端八股——JS+ES6
  • 基于深度学习的信号滤波:创新技术与应用挑战
  • ROS2学习
  • 计算机视觉:主流数据集整理
  • Golang深度学习
  • cline通过硅基流动平台接入DeepSeek-R1模型接入指南