大模型之二,关键组件之Chain
上回我们说到了Model,这是大模型的基础组件之一,这次我们来讲讲Chain的功能
什么是Chain
字面意思就是将多个组件互相连接在一起。
具体使用:能够封装一些方法如Model I/O的流程,还能通过链与链之间的链接实现更复杂的链。
LLMChain
我们先介绍LLMChain,这是一个整合了Prompt模板,chat模型,还有输出解析器的一个简单的链。利用创建一个LLMChain对象,并将上面三个方法传入LLMChain对象中,我么得到一下代码和结果
# 导入所需的库
from langchain import PromptTemplate, OpenAI, LLMChain
# 原始字符串模板
template = "{flower}的花语是?"
# 创建模型实例
llm = OpenAI(temperature=0)
# 创建LLMChain
llm_chain = LLMChain(
llm=llm,
prompt=PromptTemplate.from_template(template))
# 调用LLMChain,返回结果
result = llm_chain("玫瑰")
print(result)
其结果也是通过格式化输出。
Sequential Chain
顺序链:将几个LLMChain串起来:
- 这几个链返回的内容相互之间都有链式关系
- 添加完LLMChain后,最后再由Sequential Chain串联起来,分别传入chains,输入和输出变量这几个参数。
如何运行Chian
直接的方法可以通过chain.run("input")来运行,对模板中有多个input元素,我们可以通过apply方法来说运行,其中apply中传入的是一个包含字典的list列表。
# apply允许您针对输入列表运行链
input_list = [
{"flower": "玫瑰",'season': "夏季"},
{"flower": "百合",'season': "春季"},
{"flower": "郁金香",'season': "秋季"}
]
result = llm_chain.apply(input_list)
print(result)
任务构建
上一个顺序链中,大模型是根据这三个模板依次输出的内容来进行推理,而这次我们的任务需要构建两个不同的目标链,旨在让大模型判断我们在执行不同任务时选择不同的模板。
RouterChain 也成为路由链,会根据用户的内容来确定问题更适合哪个处理模板,并送到该模板径向回答,否则会被发送到默认链中。
如果要完成一个任务,大模型该如何选择模型并输出呢,我们可以从这几步入手: 假如现在你要根据一个问题的输入来选择不同的模板来完成任务,现我们先构建两个模板,并以字典的形式存储到一个列表中。
接着我们初始化于丹模型,再根据我们刚创建的模板列表构建出不同的目标链,创建目标链可看上文如何创建。
下面我们来构建路由链,我们此时可以通过用户的输入来确定要解决的是哪种问题。
LLMRouterChain让你输入一个文本使得模型来选择最适合的提示来回答问题
# 构建路由链
#from langchain.chains.router.llm_router import LLMRouterChain, #RouterOutputParser
#from langchain.chains.router.multi_prompt_prompt import #MULTI_PROMPT_ROUTER_TEMPLATE as RounterTemplate
destinations = [f"{p['key']}: {p['description']}" for p in prompt_infos]
router_template = RounterTemplate.format(destinations="\n".join(destinations))
#print("路由模板:\n",router_template)
router_prompt = PromptTemplate(
template=router_template,
input_variables=["input"],
output_parser=RouterOutputParser(),)
#print("路由提示:\n",router_prompt)
router_chain = LLMRouterChain.from_llm(llm,
router_prompt,
verbose=True)
构建LLMRounterChain最主要的就上面的三个步骤。为了创建MultiPromptChain,我们还需构建默认链,默认链是在模型判断不出输入内容适合的模型,会自动使用该任务链进行回答问题。
# 构建多提示链
from langchain.chains.router import MultiPromptChain
chain = MultiPromptChain(
router_chain=router_chain,
destination_chains=chain_map,
default_chain=default_chain,
verbose=True)
练中学代码运行
我们更改测试二中的问题,将输入的问题更改,得到以下回答
今天的分享就到这里。