青训营X豆包MarsCode 技术训练营第一课 | 豆包MarsCode AI刷题

88 阅读3分钟

今天假设鲜花运营智能客服ChatBot通常会接到两大类问题。

  1. 鲜花养护(保持花的健康、如何浇水、施肥等)
  2. 鲜花装饰(如何搭配花、如何装饰场地等)

你的需求是,如果接到的是第一类问题,你要给ChatBot A指示;如果接到第二类的问题,你要给ChatBot B指示。

f13a7c5551170c7f481ce7abc4ab52c.jpg 我们可以根据这两个场景来构建两个不同的目标链。遇到不同类型的问题,LangChain会通过RouterChain来自动引导大语言模型选择不同的模板。

整体框架

RouterChain,也叫路由链,能动态选择用于给定输入的下一个链。根据用户的问题内容,首先使用路由器链确定问题更适合哪个处理模板,然后将问题发送到该处理模板进行回答。如果问题不适合任何已定义的处理模板,它会被发送到默认链。

在这里,用LLMRouterChain和MultiPromptChain(也是一种路由链)组合实现路由功能,该MultiPromptChain会调用LLMRouterChain选择与给定问题最相关的提示,然后使用该提示回答问题。

具体步骤如下:

  1. 构建处理模板:为鲜花护理和鲜花装饰分别定义两个字符串模板。

  2. 提示信息:使用一个列表来组织和存储这两个处理模板的关键信息,如模板的键、描述和实际内容。 初始化语言模型:导入并实例化语言模型。

  3. 构建目标链:根据提示信息中的每个模板构建了对应的LLMChain,并存储在一个字典中。

  4. 构建LLM路由链:这是决策的核心部分。首先,它根据提示信息构建了一个路由模板,然后使用这个模板创建了一个LLMRouterChain。

  5. 构建默认链:如果输入不适合任何已定义的处理模板,这个默认链会被触发。

  6. 构建多提示链:使用MultiPromptChain将LLM路由链、目标链和默认链组合在一起,形成一个完整的决策系统。

用路由链自动选择处理模板的具体代码实现。

构建提示信息的模板

首先,针对两种场景,构建两个提示信息的模板。

  • 构建两个场景的模版

flower_care_template = """你是一个经验丰富的园丁,擅长解答关于养花育花的问题。

                        下面是需要你来回答的问题:

                        {input}"""

flower_deco_template = """你是一位网红插花大师,擅长解答关于鲜花装饰的问题。

                        下面是需要你来回答的问题:

                        {input}"""

  • 构建提示信息 prompt_infos = [

    {

        "key": "flower_care",

        "description": "适合回答关于鲜花护理的问题",

        "template": flower_care_template,

    },

    {

        "key": "flower_decoration",

        "description": "适合回答关于鲜花装饰的问题",

        "template": flower_deco_template,

    }]

初始化语言模型

from langchain.llms import OpenAI

import os

os.environ["OPENAI_API_KEY"] = '你的OpenAI Key'

llm = OpenAI()