主页 > 游戏开发  > 

langchain系列-FewShotPromptTemplate少量示例

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=" llm.xxx.xxxx /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),因此可认为是同一种类。

结束

标签:

langchain系列-FewShotPromptTemplate少量示例由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“langchain系列-FewShotPromptTemplate少量示例