Langchain是一个集成多个大语言模型的开源框架,可以使用它来快速开发大语言模型应用。
本文的代码使用到的模块:
from typing import List, Dict
from langchain import PromptTemplate, FewShotPromptTemplate, LLMChain, OpenAI
先来看看普通的提示词模板如何使用,效果如何:
# 创建大语言模型对象 这里使用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前缀。
下面使用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
比起无示例版本,输出结果有了明显改观。