一、什么是 Chain
- Chain 在 LangChain 中用于链接各个组件和功能,可将模型之间或模型与其他组件链接起来,实现复杂应用程序的开发。它将多个组件相互链接成一个链,简化了复杂应用的实现,使其更模块化,便于调试、维护和改进。链可视为 LangChain 中的基本功能单元,内部封装一系列功能,外部可组合串联。LangChain 提供了多种预置链,方便各种任务的实现。
总的来说,链在内部把一系列的功能进行封装,而链的外部则又可以组合串联。链其实可以被视为LangChain中的一种基本功能单元。
LangChain中提供了很多种类型的预置链
二、LLMChain:最简单的链
-
LLMChain 围绕语言模型推理功能添加了一些功能,整合了 PromptTemplate、语言模型和 Output Parser,将 Model I/O 放在一个链中整体操作。使用提示模板格式化输入,将格式化的字符串传递给语言模型并返回输出。
-
链的调用方式有直接调用、通过 run 方法、通过 predict 方法、通过 apply 方法和通过 generate 方法。
三、Sequential Chain:顺序链
- 通过 Sequential Chain 可以把几个 LLMChain 串起来形成顺序链。示例中依次添加三个 LLMChain,分别生成鲜花的知识性说明、根据说明生成评论、根据说明和评论写出自媒体文案,最后用 Sequential Chain 将它们串起来,实现了从鲜花介绍到评论再到社交媒体文案的生成。
四、sum(上)
- LangChain 的 “链” 可连接多个组件,是一系列组件的调用顺序,还可包含其他 “链条”。可以用多种方法调用链,根据需求选择不同的链。除了 LLMChain 和 SequenceChain 之外,LangChain 还自带大量其他类型的链,可查看其实现细节并尝试使用。
(下)一、任务设定
- 任务需求是构建一个鲜花运营智能客服 ChatBot,根据用户问题类型进行分类处理。如果问题是关于鲜花养护的,指示 ChatBot A 处理;如果问题是关于鲜花装饰的,指示 ChatBot B 处理。通过构建不同的目标链,利用 RouterChain 自动引导大语言模型选择不同的模板来处理不同类型的问题。
二、整体框架
- RouterChain(路由链)能动态选择用于给定输入的下一个链。通过 LLMRouterChain 和 MultiPromptChain 组合实现路由功能,MultiPromptChain 调用 LLMRouterChain 选择与给定问题最相关的提示,然后使用该提示回答问题。具体步骤包括构建处理模板、提示信息、初始化语言模型、构建目标链、构建 LLM 路由链、构建默认链和构建多提示链。
三、具体实现
-
构建提示信息的模板: - 针对鲜花养护和鲜花装饰两种场景构建两个提示信息模板,分别以园丁和插花大师的角色回答问题。 - 用一个列表组织和存储两个处理模板的关键信息,包括模板的键、描述和实际内容。
-
初始化语言模型: - 导入并实例化 OpenAI 语言模型,设置 API 密钥。
-
构建目标链:
- 循环提示信息列表,为每个场景创建一个 LLMChain,根据场景模板生成提示并送入语言模型获取答案。
-
构建路由链:
- 根据提示信息构建路由模板,引导语言模型查看用户输入问题并确定问题类型。
- 路由模板包括引言、格式说明、额外说明和要求、候选提示以及输入 / 输出部分,目的是让模型知道如何处理用户输入并选择最佳模型提示回应。
- 路由提示根据路由模板生成具体传递给 LLM 的信息,包括输入变量名、输出解析器、模板内容、模板格式和验证模板有效性等。
-
构建默认链:
- 准备一个默认链,当路由链没有找到适合的链时,以默认链进行处理,这里使用 ConversationChain。
-
构建多提示链:
- 使用 MultiPromptChain 整合前几个链实现路由功能,包括 router_chain(决定目标链和输入的链)、destination_chains(将名称映射到候选链的字典)和 default_chain(当 router_chain 无法决定时使用的默认链)。 MultiPromptChain工作流程如下:
-
输入首先传递给router_chain。
-
router_chain根据某些标准或逻辑决定应该使用哪一个destination_chain。
-
输入随后被路由到选定的destination_chain,该链进行处理并返回结果。
-
如果router_chain不能决定正确的destination_chain,则输入会被传递给default_chain。
这样,MultiPromptChain就为我们提供了一个在多个处理链之间动态路由输入的机制,以得到最相关或最优的输出。
四、运行路由链
- 提出不同类型的问题进行测试,观察路由链将问题路由到不同的目标链或默认链的效果。///”verbose=True“可以实现ai输入输出思考过程展示。
五、sum(下)
- 示例中展示了 LLMRouterChain 和 MultiPromptChain 的使用,通过 MultiPromptChain 把其他链组织起来完成路由功能。