Skip to content

条件路由

所谓条件路由(Conditional Routing),就是在一条 AI 推理/数据处理流水线里,先依据输入内容、上下文或运行时信号做一次判别,再把请求分发到不同的子流程(链)上执行。本质上是受控的 if/else:先“判别”,再“选择”,最后“执行”,避免“一个提示词走天下”。

在 LangChain.js 中,常见做法有两种:

  1. RunnableBranch 声明式按顺序匹配分支(可视作 if/else-if/else 的旧范式)
  2. RunnableLambda 在函数里动态返回要执行的子链(官方更推荐,灵活且易组合)

路由条件既可以是规则驱动(正则、关键字、用户角色、租户权限、时间段、阈值等),也可以是模型辅助分类(先用轻量 LLM 判断“数学/SQL/闲聊/RAG”等意图);命中失败时应设置兜底分支,保证可用性。

总结一句话:条件路由让系统不再押注单一路径,而是把“该走哪条路”的选择设计为一等公民。

RunnableBranch#

RunnableBranch 是 LangChain.js 中提供的条件分派器。

它把一条流程拆成多条“候选子链”,并附带各自的触发条件,运行时从左到右依次评估条件,命中第一个就执行对应子链,若都不命中则走默认分支。可以把它理解成链式的 if/else if/else

适用场景

基础语法

RunnableBranch 是一个类,因此使用的时候需要实例化:

new RunnableBranch({ branches, default })

RunnableBranch 还有一个静态方法 RunnableBranch.from([...BranchLike[], defaultRunnableLike]),该方法接受一个数组,数组的前 N 项是 [条件, 子链] 的数组,最后一项是默认子链。

RunnableBranch.from([[条件1, 子链1], [条件2, 子链2], [条件3, 子链3], 默认子链])

课堂练习

使用 RunnableBranch 创建子链

RunnableLambda#

不过现在 官方更加推荐使用 RunnableLambda 的方式。因为 RunnableLambda 更灵活,在函数里可以做复杂判别、动态返回任意子链,便于与外部系统结合。

课堂练习

使用 RunnableLambda 重构上面例子