每日学习-链 豆包MarsCode 技术训练营AI| 豆包MarsCode AI 刷题 2024-11-10 5 阅读4分钟

122 阅读5分钟

一、什么是 Chain

  • Chain 在 LangChain 中用于链接各个组件和功能,可将模型之间或模型与其他组件链接起来,实现复杂应用程序的开发。它将多个组件相互链接成一个链,简化了复杂应用的实现,使其更模块化,便于调试、维护和改进。链可视为 LangChain 中的基本功能单元,内部封装一系列功能,外部可组合串联。LangChain 提供了多种预置链,方便各种任务的实现。

总的来说,链在内部把一系列的功能进行封装,而链的外部则又可以组合串联。链其实可以被视为LangChain中的一种基本功能单元。

LangChain中提供了很多种类型的预置链

image.png

二、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 路由链、构建默认链和构建多提示链。

三、具体实现

  1. 构建提示信息的模板: - 针对鲜花养护和鲜花装饰两种场景构建两个提示信息模板,分别以园丁和插花大师的角色回答问题。 - 用一个列表组织和存储两个处理模板的关键信息,包括模板的键、描述和实际内容。

  2. 初始化语言模型: - 导入并实例化 OpenAI 语言模型,设置 API 密钥。

  3. 构建目标链:

    • 循环提示信息列表,为每个场景创建一个 LLMChain,根据场景模板生成提示并送入语言模型获取答案。
  4. 构建路由链:

    • 根据提示信息构建路由模板,引导语言模型查看用户输入问题并确定问题类型。
    • 路由模板包括引言、格式说明、额外说明和要求、候选提示以及输入 / 输出部分,目的是让模型知道如何处理用户输入并选择最佳模型提示回应。
    • 路由提示根据路由模板生成具体传递给 LLM 的信息,包括输入变量名、输出解析器、模板内容、模板格式和验证模板有效性等。
  5. 构建默认链:

    • 准备一个默认链,当路由链没有找到适合的链时,以默认链进行处理,这里使用 ConversationChain。
  6. 构建多提示链:

    • 使用 MultiPromptChain 整合前几个链实现路由功能,包括 router_chain(决定目标链和输入的链)、destination_chains(将名称映射到候选链的字典)和 default_chain(当 router_chain 无法决定时使用的默认链)。 MultiPromptChain工作流程如下:
  7. 输入首先传递给router_chain。

  8. router_chain根据某些标准或逻辑决定应该使用哪一个destination_chain。

  9. 输入随后被路由到选定的destination_chain,该链进行处理并返回结果。

  10. 如果router_chain不能决定正确的destination_chain,则输入会被传递给default_chain。

这样,MultiPromptChain就为我们提供了一个在多个处理链之间动态路由输入的机制,以得到最相关或最优的输出。

四、运行路由链

  • 提出不同类型的问题进行测试,观察路由链将问题路由到不同的目标链或默认链的效果。///”verbose=True“可以实现ai输入输出思考过程展示。

五、sum(下)

  • 示例中展示了 LLMRouterChain 和 MultiPromptChain 的使用,通过 MultiPromptChain 把其他链组织起来完成路由功能。