langchain系列-FewShotPromptTemplate少量示例
- 游戏开发
- 2025-08-22 21:18:03

导读
环境: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)示例和提示词模型正确回答
参数说明 examplesOptional[list[dict]] = None 示例格式化到提示词中,应提供examples 或 example_selector。
example_selectorOptional[BaseExampleSelector] = None
ExampleSelector 选择要格式化到提示符中的示例,应提供examples 或 example_selector。
validate_templatebool = False
是否尝试验证模板。
example_promptPromptTemplate
PromptTemplate 用于格式化单个示例。"
suffixstr
要放在示例后面的提示模板字符串。
example_separatorstr = "\n\n"
用于连接前缀、示例和后缀的字符串分隔符。
prefixstr = ""
要放在示例前面的提示模板字符串。
template_formatLiteral["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少量示例”
上一篇
数据结构——模拟栈例题B3619
下一篇
Java中的方法参数传递与值传递