大模型的构成组件之二——Chain

129 阅读3分钟

大模型之二,关键组件之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)

练中学代码运行

QQ_1731596215964.png 我们更改测试二中的问题,将输入的问题更改,得到以下回答

QQ_1731596280661.png

今天的分享就到这里。