整理并翻译自DeepLearning.AI×LangChain的官方课程:Chains(源代码可见)
直译链,表达的意思更像是对话链,对话链的背后是思维链
首先介绍了一个最简单的例子,LLM Chain:
将一个大语言模型和prompt模板组合起来调用LLMChain
,即可得到一个LLMChain对象,该对象的run
实现的功能即给定输入自动使用prompt模板生成prompt,调用LLM得到回复。
顺序链是另外一种类型的链,它的基本思想是以一个链的输出是下一个链的输入这种方式组合的多个链。
目前有2种类型的顺序链:
调用SimpleSequentialChain
,传入两个构建好的LLM Chain即可构建一个顺序链,第一个LLM Chain的输出是第二个LLM Chain的输入,同样也可以指定verbose=true
将打印对话历史。
图示如下:
第一个chain将review翻译为英文,第二个chain则提取摘要。
第三个chain识别review的类型。
第四个chain使用指定语言类型和摘要生成回复。
注意点是这些chain里面的变量名称要对齐,否则会报错。
即将构建的顺序链如下图所示:
运行一下:
结果:
视频可能看不太清楚,整条链的输入输出的依赖关系是依靠每一个子链都设置一个output_key
,在下一个链的prompt模板里以{output_key}
的形式指定来实现的,写python的朋友估计已经习以为常了,其他语言的小伙伴可能需要点时间思考,如下图:
先决定输入要分发到哪个子链,再分发到对应的子链:
定义回答多个学科的多个prompt模板:
为每个学科的prompt模板添加一些说明信息:
为了实现路由链,引入了MultiPromptChain
和LLMRouterChain
定义LLM,训练prompt模板列表,构建子链:
再构建一个默认链(用来兜底):
定义路由提示词模板:
定义路由链(注意output_parser指定的是RouterOutputParser
对象):
现在,组合起来构建路由链:
chain = MultiPromptChain(router_chain=router_chain,
destination_chains=destination_chains,
default_chain=default_chain, verbose=True
)
尝试运行一下物理题:
尝试运行一下数学题:
如果输入一个不属于路由内的学科,比如下面的生物,则会兜底走默认链,由于GPT也具备生物学知识,所以也可以给出有效回答: