杂记 | Langchain中few-shot提示词模板的使用(给提示词添加示例)


Langchain是一个集成多个大语言模型的开源框架,可以使用它来快速开发大语言模型应用。

本文的代码使用到的模块:

from typing import List, Dict
from langchain import PromptTemplate, FewShotPromptTemplate, LLMChain, OpenAI

01 普通的提示词模板

先来看看普通的提示词模板如何使用,效果如何:

# 创建大语言模型对象 这里使用gpt-3.5最新的指令模型
llm = OpenAI(model="gpt-3.5-turbo-instruct", temperature=0)

# 设置提示词模板 其中的{input}为等待用户填充问题的插槽
template = "我会给你一种物品名称的输入,你需要输出该类物品的一种具体事物,且使用量词开头。\nInput: {input}"

# 提示词模板对象 指定接收参数的参数名为input 也就是上述插槽中的内容
prompt = PromptTemplate(input_variables=["input"], template=template)

# 大语言模型 + 提示词模板对象 -> 生成一个chian
chain = LLMChain(llm=llm, prompt=prompt)

# 执行chain并查看结果
print(chain.run(input="手机"))

在这个示例中,对大模型的输入为:

我会给你一种物品名称的输入,你需要输出该类物品的一种具体事物,且使用量词开头。
Input: 手机

大模型的输出为:

Output: 一部手机

可以看到输出并不能很好地满足我们的需求,因为我希望输出的是该类物品的一件具体的事物,例如:一部华为手机,而它只是简单的给我添加了个量词就完事了。而且它还自己添加了output前缀。

02 few-shot提示词模板

下面使用few-shot提示词模板试试:

# 创建大语言模型
llm = OpenAI(model="gpt-3.5-turbo-instruct", temperature=0)

# 创建一个实例列表
examples: List[Dict[str, str]] = [
    {
    
    "input": "水果", "output": "一个苹果"},
    {
    
    "input": "宠物", "output": "一只猫"},
    {
    
    "input": "家电", "output": "一台冰箱"}
]

# 创建提示词模板对象 该对象中的template部分插槽需要与示例中的键对应
example_prompt = PromptTemplate(input_variables=["input", "output"], template="Input: {input}\n{output}")

# 合成few-shot提示词模板对象
prompt = FewShotPromptTemplate(
    prefix="我会给你一种物品名称的输入,你需要输出该类物品的一种具体事物,且使用量词开头。",  # 示例提示词之前添加的内容
    examples=examples,  # 示例列表
    example_prompt=example_prompt,  # 容纳示例的提示词模板对象
    suffix="Input: {input}",  #  示例提示词之后添加的内容
    input_variables=["input"]  # 等待用户输入的参数插槽
)

# 创建一个chain
chain = LLMChain(llm=llm, prompt=prompt)

# 执行chain并查看结果
print(chain.run(input="手机"))

使用few-shot提示词模板后,对大模型的输入为:

我会给你一种物品名称的输入,你需要输出该类物品的一种具体事物,且使用量词开头。

Input: 水果
一个苹果

Input: 宠物
一只猫

Input: 家电
一台冰箱

Input: 手机

大模型的输出为:

一部iPhone

比起无示例版本,输出结果有了明显改观。

猜你喜欢

转载自blog.csdn.net/xuzhongyi103/article/details/133171545