前言
Chain是LangChain中的关键组件,如果我们想开发更复杂的应用程序,那么就需要通过 “Chain” 来链接LangChain的各个组件和功能——模型之间彼此链接,或模型与其他组件链接。Chain在内部把一系列的功能进行封装,而其的外部则又可以组合串联。因此,Chain其实可以被视为LangChain中的一种基本功能单元。下面的内容是我对Chain课程一些重点的总结。
链的调用方式
-
直接调用:
如果我们的提示模板中包含多个变量,在调用链的时候,可以使用字典一次性输入它们。 -
通过run方法:
通过run方法,也等价于直接调用_call_函数。即:等价于:llm_chain("玫瑰")llm_chain.run("玫瑰") -
通过predict方法:
predict方法类似于run,只是输入键被指定为关键字参数而不是 Python 字典。result = llm_chain.predict(flower="玫瑰") print(result) -
通过apply方法:
apply方法允许我们针对输入列表运行链,一次处理多个输入。input_list = [{"flower": "玫瑰",'season': "夏季"}, {"flower": "百合",'season': "春季"}, {"flower": "郁金香",'season': "秋季"}] result = llm_chain.apply(input_list) print(result) -
通过generate方法:
generate方法类似于apply,只不过它返回一个LLMResult对象,而不是字符串。LLMResult通常包含模型生成文本过程中的一些相关信息,例如令牌数量、模型名称等。result = llm_chain.generate(input_list) print(result)
路由链
RouterChain,能动态选择用于给定输入的下一个链。我们可以根据用户的问题内容,首先使用路由器链确定问题更适合哪个处理模板,然后将问题发送到该处理模板进行回答。如果问题不适合任何已定义的处理模板,它会被发送到默认链。路由链的使用要根据我们想要大模型做的事情来具体使用。
具体步骤如下:
- 构建处理模板:为想做的事情所需的内容方案分别定义字符串模板。
- 提示信息:使用一个列表来组织和存储这些处理模板的关键信息,如模板的键、描述和实际内容。
- 初始化语言模型:导入并实例化语言模型。
- 构建目标链:根据提示信息中的每个模板构建了对应的LLMChain,并存储在一个字典中。
- 构建LLM路由链:这是决策的核心部分。首先根据提示信息构建了一个路由模板,然后使用这个模板创建了一个LLMRouterChain。
- 构建默认链:如果输入不适合任何已定义的处理模板,这个默认链会被触发。
- 构建多提示链:使用MultiPromptChain将LLM路由链、目标链和默认链组合在一起,形成一个完整的决策系统。
总结
LangChain为我们提供了好用的“链”,帮助我们把多个组件像链条一样连接起来。这个“链条”就是一系列组件的调用顺序,这个顺序里还可以包括其他的“链条”。我们可以使用多种方法调用链,也可以根据开发时的需求选择各种不同的链。Chain的使用使得大模型在面对我们想要获得的回答时,能够综合多种需要,将每个回答完美地串联在一起!这部分课程也给了我巨大的收获,使我对LangChain的了解更进了一步!