首先,还是先看一下今天要完成一个什么样的任务。
这里假设咱们的鲜花运营智能客服 ChatBot 通常会接到两大类问题。
你的需求是,如果接到的是第一类问题,你要给 ChatBot A 指示;如果接到第二类的问题,你要给 ChatBot B 指示。
我们可以根据这两个场景来构建两个不同的目标链。遇到不同类型的问题,LangChain 会通过 RouterChain 来自动引导大语言模型选择不同的模板。
当然我们的运营过程会遇到更多种类的问题,你只需要通过同样的方法扩充逻辑即可。
RouterChain,也叫路由链,能动态选择用于给定输入的下一个链。我们会根据用户的问题内容,首先使用路由器链确定问题更适合哪个处理模板,然后将问题发送到该处理模板进行回答。如果问题不适合任何已定义的处理模板,它会被发送到默认链。
在这里,我们会用 LLMRouterChain 和 MultiPromptChain(也是一种路由链)组合实现路由功能,该 MultiPromptChain 会调用 LLMRouterChain 选择与给定问题最相关的提示,然后使用该提示回答问题。
下面,就是用路由链自动选择处理模板的具体代码实现。
首先,我们针对两种场景,构建两个提示信息的模板。
# 构建两个场景的模板
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,
}]
下面,我们循环 prompt_infos 这个列表,构建出两个目标链,分别负责处理不同的问题。
# 构建目标链
from langchain.chains.llm import LLMChain
from langchain.prompts import PromptTemplate
chain_map = {}
for info in prompt_infos:
prompt = PromptTemplate(template=info['template'],
input_variables=["input"])
print("目标提示:\n",prompt)
chain = LLMChain(llm=llm, prompt=prompt,verbose=True)
chain_map[info["key"]] = chain