首页 > 其他分享 >5分钟了解LangChain的路由链

5分钟了解LangChain的路由链

时间:2024-06-21 09:43:26浏览次数:13  
标签:prompt chain LangChain 分钟 template router chains 路由

上上篇文章《5分钟理透LangChain的Chain》里用到了顺序链SequentialChain,它可以将多个链按顺序串起来。本文介绍LangChain里的另外1个重要的链:路由链

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, MultiPromptChain
from langchain.chains.router.llm_router import RouterOutputParser
from langchain.chains.router.multi_prompt_prompt import MULTI_PROMPT_ROUTER_TEMPLATE
from langchain.chains import LLMChain, ConversationChain
from 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_chain
destination_chains["math"] = math_chain
destination_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://mp.weixin.qq.com/s/zIu0DjVgbv7R4mMCpETSNA

标签:prompt,chain,LangChain,分钟,template,router,chains,路由
From: https://www.cnblogs.com/mangod/p/18259931

相关文章

  • BaseHref 以及前端路由的问题
    BaseHref以及前端路由的问题BaseHref是什么?MDN,说的直白一点就是,这个站点里面所有的访问主站的资源文件,都会在路由前面加上这个basehref,包括*js,scss,image,ajax,......**。如果一个DOM里面有多个这样的base,只有第一个会起作用。BaseHref在Angular工程的编译中有......
  • Spring Cloud Gateway网关下Knife4j文档聚合,以及动态路由的读取和代码配置
    SpringCloudGateway网关下Knife4j文档聚合,以及动态路由的读取和配置一.Knife4j文档聚合1.1基础环境明细1.2集成knife4j1.2.1maven1.2.2yml配置1.2.2.1其他模块配置1.2.2.2manual手动配置模式1.2.2.3discover服务发现模式1.2.2.3==这里请注意==:如果你使用了:S......
  • (四十三)Vue Router之嵌套路由
    文章目录什么是嵌套路由嵌套路由的使用demo上一篇:(四十二)Vue之路由及其基本使用VueRouter什么是嵌套路由实际生活中的应用界面,有可能由多层嵌套的组件组合而成。同样地,URL中各段动态路径也按某种结构对应嵌套的各层组件,例如:/user/foo/profile......
  • 【计算机网络仿真实验-实验3.1、3.2】交换路由综合实验
    实验3.1交换路由综合实验——作业1一、实验目的运用实验二(可前往博主首页计算机网络专栏下查看)中学到的知识,将这个图中的PC机连接起来组网并分析,本篇涉及代码以截图展示,过于简单的代码及操作不再详细介绍,建议做完实验二中所有实验后再来完成该实验,难度递进,学习过程合理......
  • langchain入门
    LangChain为各种大型语言模型应用提供通用接口,从而简化应用程序的开发流程,轻松地构建如下所示的RAG应用 理解langchain的运作机制LangChain是一个为构建大型语言模型(LLMs)驱动的应用程序而设计的框架。它的核心目标是简化从开发到生产的整个应用程序生命周期。模块化构......
  • 植物大战僵尸杂交版(极速下载,解锁全部植物,存档,只需要两分钟!!)
    文章目录下载夸克网盘百度网盘gitee下载压缩包/gitee拉取安装解锁全部植物游戏技巧友情提示游戏背景(可不阅)更多相关内容可查看不说废话,先玩起来下载夸克网盘有夸克网盘会员的直接用夸克网盘下载原创作者:潜艇伟伟迷B站地址:https://space.bilibili.com/97213......
  • 2024 年最新 Python 基于 LangChain 框架基础案例详细教程(更新中)
    LangChain框架搭建安装langchainpipinstalllangchain-ihttps://mirrors.aliyun.com/pypi/simple/安装langchain-openaipipinstalllangchain-openai-ihttps://mirrors.aliyun.com/pypi/simple/ChatOpenAI配置环境变量环境变量OPENAI_API_KEY=OpenAIAP......
  • Django链接数据库,ORM迁移数据库,ORM操作之数据操作,Django框架之生命周期流程图,Djan
    ⅠDjango链接数据库默认的Django数据库是sqlite3链接MySQL数据库--->电脑上则会运行MySQL【一】下载数据库【二】在settings.py设置定义参数#链接MySQL数据库DATABASES={'default':{#指定我们使用的引擎是mysql数据库的引擎'ENGINE':'......
  • 路由器动态路由的配置方法
    路由器动态路由的配置方法 二、实验原理:RIP协议是应用较早、适用于小型同类网络的内部网关协议,每台具有RIP功能的路由器默认每隔30秒利用UDP520端口向与它相邻的路由器广播(RIPv1)或组播(RIPv2)路由更新信息。使用跳数(HopCount)作为度量值,最大跳数为15跳。OSPF协议用链路状态来......
  • 【第20章】Vue实战篇之Vue Router(路由)
    文章目录前言一、使用Vue-Router1.安装2.创建路由器实例3.注册路由器插件4.根组件二、访问路由器1.理论2.使用3.展示三、嵌套路由(子路由)1.准备文件2.配置路由3.菜单配置4.展示总结前言VueRouter是Vue.js的官方路由。它与Vue.js核心深度集成,让用......