写点什么

5 分钟了解 LangChain 的路由链

  • 2024-06-24
    福建
  • 本文字数:1901 字

    阅读完需:约 6 分钟

1. 路由链概念


**路由链(RouterChain)**是由 LLM 根据输入的 Prompt 去选择具体的某个链。路由链中一般会存在多个 Prompt,Prompt 结合 LLM 决定下一步选择哪个链。



2. 路由链的使用场景


路由链一般涉及到 2 个核心类,LLMRouterChainMultiPromptChain,一起看看官网介绍:



  • LLMRouterChain:使用 LLM 路由到可能的选项中。

  • MultiPromptChain:该链可用于在多个提示词之间路由输入,当你有多个提示词并且只想路由到其中一个时,可以用这个链。


一般使用路由链时,有固定的几个步骤:

  1. 准备多个链的 Prompt 提示词,然后各自封装成链。

  2. 将可能路由到的链封装到 destination_chains 里。

  3. 构建多提示词和 RouterChain ,负责选择下一个要调用的链。

  4. 构建默认链。

  5. 使用 MultiPromptChain 选择某个链,然后再去执行此链。


3. 使用路由链的案例


假设我们有一个常见的场景,根据用户的输入内容选择不同的处理路径,如果没有选到合适的链,则使用默认链。比如:根据用户的输入问题,选择不同的链去处理,如果没选到合适的,则走默认链。


具体代码如下:

from langchain_openai import ChatOpenAI
model = ChatOpenAI( model_name="gpt-3.5-turbo", openai_api_key="sk-xxxx", openai_api_base="https://api.302.ai/v1",)

from langchain.chains.router import LLMRouterChain, MultiPromptChainfrom langchain.chains.router.llm_router import RouterOutputParserfrom langchain.chains.router.multi_prompt_prompt import MULTI_PROMPT_ROUTER_TEMPLATEfrom langchain.chains import LLMChain, ConversationChainfrom langchain.prompts import PromptTemplate
# 准备2条目的链:一条物理链,一条数学链# 1. 物理链physics_template = """你是一位物理学家,擅长回答物理相关的问题,当你不知道问题的答案时,你就回答不知道。具体问题如下:{input}"""physics_prompt = PromptTemplate.from_template(physics_template)physics_chain = LLMChain(llm=model, prompt=physics_prompt)
# 2. 数学链math_template = """你是一个数学家,擅长回答数学相关的问题,当你不知道问题的答案时,你就回答不知道。具体问题如下:{input}"""math_prompt = PromptTemplate.from_template(math_template)math_chain = LLMChain(llm=model, prompt=math_prompt)
# 3. 英语链english_template = """你是一个非常厉害的英语老师,擅长回答英语相关的问题,当你不知道问题的答案时,你就回答不知道。具体问题如下:{input}"""english_prompt = PromptTemplate.from_template(english_template)english_chain = LLMChain(llm=model, prompt=english_prompt)

######### 所有可能的目的链destination_chains = {}destination_chains["physics"] = physics_chaindestination_chains["math"] = math_chaindestination_chains["english"] = english_chain

######### 默认链default_chain = ConversationChain(llm=model, output_key="text")
# 让多路由模板 能找到合适的 提示词模板destinations_template_str = """physics:擅长回答物理问题math:擅长回答数学问题english:擅长回答英语问题"""router_template = MULTI_PROMPT_ROUTER_TEMPLATE.format( destinations=destinations_template_str)
# 通过路由提示词模板,构建路由提示词router_prompt = PromptTemplate( template=router_template, input_variables=["input"], output_parser=RouterOutputParser(),)
######### 路由链router_chain = LLMRouterChain.from_llm(llm=model, prompt=router_prompt)
######### 最终的链multi_prompt_chain = MultiPromptChain( router_chain=router_chain, destination_chains=destination_chains, default_chain=default_chain, verbose=True,)


# multi_prompt_chain.invoke({"input": "重力加速度是多少?"})# multi_prompt_chain.invoke("y=x^2+2x+1的导数是多少?")multi_prompt_chain.invoke("将以下英文翻译成中文,只输出中文翻译结果:\n The largest community building the future of LLM apps.")# multi_prompt_chain.invoke("你是怎么理解java的面向对象的思想的?")
复制代码


执行结果跟我们预想的一致,执行结果如下:





4. 总结


这篇博客主要介绍了 LangChain 中的**路由链(RouterChain)**的概念,它主要用在不确定性的场景下,根据提示词,选择具体的某个链去执行。还聊了它的使用场景和具体案例,希望对你有帮助!


文章转载自:程序员半支烟

原文链接:https://www.cnblogs.com/mangod/p/18259931

体验地址:http://www.jnpfsoft.com/?from=infoq

用户头像

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
5分钟了解LangChain的路由链_数据库_快乐非自愿限量之名_InfoQ写作社区