当前位置: 首页 > 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_llm

input5 = "下面两种动物是同一种类吗?\n1:波斯猫\n2:英国短毛"

response = translate_llm.invoke(input5)
print(response.content)

# 输出
是

注:虽然波斯猫和英国短毛猫是两种不同的猫品种,但它们同属于家猫(Felis catus),因此可认为是同一种类。

结束

相关文章:

  • Linux 和 Windows 区别
  • C++的封装(十五):第四种访问控制
  • STL 在线转 3MF,开启 3D 模型转换新体验
  • krpano学习笔记,端口修改,krpano二次开发文档,krpano三维div信息展示,krpano热点显示文字
  • Java 中的方法参数传递与值传递
  • 面试题之介绍下call,apply,bind相同点和不同点
  • linux 搭建nfs服务(共享文件夹)
  • 探索HarmonyOS的UI开发新境界:从基础到进阶的深度解析
  • leetcode刷题第十三天——二叉树Ⅲ
  • arm环境下,wpa_supplicant交叉编译+wifi sta连接详解
  • LeetCode-524. 通过删除字母匹配到字典里最长单词
  • 科普:“docker”与“docker compose”
  • go语言 创建kratos框架工程
  • zookeeper Watcher
  • UEFI Spec 学习笔记---9 - Protocols — EFI Loaded Image
  • 【Ubuntu】GPU显存被占用,但显示没有使用GPU的进程
  • 虚拟机和主机可互相复制粘贴
  • 基于WebGIS技术的校园地图导航系统架构与核心功能设计
  • Linux 内核是如何检测可用物理内存地址范围的?
  • DeepSeek提示词高阶用法全解析:职场效率提升的10个实战案例*——让AI成为你的全能职场助手
  • 网站开发感想/拼多多seo 优化软件
  • 小企业建站系统/关键词优化简易
  • 怎样建立公司网页/新乡百度网站优化排名
  • 手册设计网站/做销售怎么和客户聊天
  • 企业建站公司服务/环球贸易网
  • 重庆物流公司网站建设/免费宣传网站