当前位置: 首页 > news >正文

[LangGraph] 边

边是两个节点的连接线,决定了图在运行时从哪里到哪里。

LangGraph 中边有 4 种类型:

  1. 普通边
  2. 条件边
  3. 入口点:START
  4. 条件入口点

普通边

连接两个节点,例如 nodeAnodeB

graph.addEdge("nodeA", "nodeB");

注意这里添加的边是有流向的,代表着从 nodeA 流向 nodeB

条件边

语法如下:

graph.addConditionalEdges("nodeA", routingFunction [, mapping]);
  • "nodeA":哪个节点跑完以后要做分流。
  • routingFunction(state):路由函数,接收当前 state,返回一个“去向”。
  • mapping(可选):把路由函数的返回值翻译成真正的节点名或节点名列表。

路由函数

顾名思义就是一个函数,例如:

function shouldSearch(state) {return state.query?.trim() ? true : false;
}
function route(state) {if (state.needTools) return "tools";if (state.done) return "stop";return "finalize";
}
function fanOut(state) {return ["fetchProfile", "fetchOrders"]; // 下一步并发的跑两个节点
}

路由函数的返回值:

  1. 返回字符串
  2. 返回字符串数组,字符串数组就代表要并发跑的节点
  3. 返回自定义的标签:如 true/false"search"
  4. 返回END

mapping

让路由函数只关心判定结果,不耦合具体的节点名字。

mapping 是做一个节点的映射,目的是让路由函数和具体的节点名称解耦。

graph.addConditionalEdges("nodeA", routingFunction, {true: "nodeB",false: "nodeC",
});

routingFunction 是路由函数,只需要返回 true/false,具体映射的节点由 mapping 来决定。

条件入口点

其实就是条件边,只不过第一个参数为 START

graph.addConditionalEdges(START, routingFunction);

routingFunction(state) 是一个路由函数,会根据初始 state 做判断,然后路由函数的返回值决定从哪个节点开始运行。

条件入口点也可以使用映射表:

graph.addConditionalEdges(START, routingFunction, {true: "nodeB",false: "nodeC",
});

routingFunction 返回值:

  • true:以 nodeB 作为起点
  • false:以 nodeC 作为起点

import { END, START, StateGraph } from "@langchain/langgraph";
import { registry } from "@langchain/langgraph/zod";
import z from "zod";const Schema = z.object({a: z.string().optional(),b: z.string().optional(),c: z.string().optional(),path: z.enum(["B", "C"]).optional(),logs: z.array(z.string()).register(registry, {reducer: {fn: (oldVal, newVal) => [...oldVal, ...newVal],},default: () => [],}),
});
type TState = z.infer<typeof Schema>;const graph = new StateGraph(Schema).addNode("A", () => {console.log("运行A节点");return {a: "A节点执行后的结果",logs: ["A节点"],};}).addNode("B", async (state: TState) => {console.log("运行B节点");return {b: "B节点执行后的结果",logs: ["B节点"],};}).addNode("C", async (state: TState) => {console.log("运行C节点");return {c: "C节点执行后的结果",logs: ["C节点"],};}).addNode("D", async (state: TState) => {console.log("运行D节点");return {d: "D节点执行后的结果",logs: ["D节点"],};}).addEdge(START, "A").addConditionalEdges("A",(state: TState) => {return state.path === "B" ? "B" : "C";},{B: "B",C: "C",},).addEdge("B", "D").addEdge("C", "D").addEdge("D", END).compile();const result = await graph.invoke({logs: [],path: "C",
});
console.log(result);
http://www.jsqmd.com/news/370073/

相关文章:

  • 2026年充电桩品牌终极评测(权威机构双重背书)| 企业采购避坑全指南 - 品牌推荐
  • 2026年污水池清洗市场盘点,这些企业备受青睐,行业内污水池清洗排名行业优质排行榜亮相 - 品牌推荐师
  • HIS系统厂商哪家强?2025年-2026年HIS系统推荐与评测,解决长期稳定与合规适配核心痛点 - 品牌推荐
  • 2026年抛丸机厂家联系电话推荐:高效对接与甄选策略 - 品牌推荐
  • 充电桩品牌哪个靠谱?2026年充电桩推荐与排名,解决运维成本与品质核心痛点 - 品牌推荐
  • 便携式草坪修剪机
  • 小智AI机器人开发系列项目之(2)小智AI智能风扇控制系统-基于STM32F103+ESP32-S3开发板(附教程/源码)
  • 新媒体人差点中招,公众号排版却真的有“捷径”!推荐3款超高效微信编辑器工具 - peipei33
  • 充电桩品牌哪个适配性强?2026年充电桩推荐与评价,解决电网协同与智能管理痛点 - 品牌推荐
  • ‌无障碍测试AI:CLIP在WCAG 3.0合规性的自动检查工具‌
  • 26年充电桩建站厂家推荐:多场景建站痛点深度评测,附2026年2月权威排名榜单 - 十大品牌推荐
  • 2026年充电桩品牌推荐:多场景兼容性深度评测,破解安全与效率核心痛点排名 - 品牌推荐
  • 【C/C++】Order Book实现
  • 2026年充电桩品牌推荐:技术趋势与合规评测,涵盖公共快充与安全痛点 - 品牌推荐
  • 租在西安,驰行无忧|2026西安租车_汽车租赁_自驾_商务_包车企业实力排名 - 朴素的承诺
  • 好写作AI:当理论构建遇上AI舞伴,人类如何优雅领舞?
  • 2026年2月充电桩建站厂家实战报告:主流服务商技术实力及建站效能对比 - 十大品牌推荐
  • 2026年度中国充电桩品牌TOP5综合评估与选型指南 - 品牌推荐
  • 2025年-2026年中国HIS系统厂商发布:以为医软件为代表的标杆企业深度解析 - 品牌推荐
  • 斯玛特卡回收技巧大公开:高效流程让你省时省心 - 团团收购物卡回收
  • 2026国产光催化反应器品牌深度评测:品质、性能与服务全方位对比 - 品牌推荐大师
  • EMS储能管理平台解决方案
  • DOS叙事环与意义行为原生论:智能时代意义生成的重构、责任伦理的奠基与人机共生愿景的导航
  • 2026年充电桩建站厂家推荐:多场景建站痛点深度评测,附2026年2月权威排名榜单 - 十大品牌推荐
  • 寻找靠谱的GEO优化伙伴?这5家口碑服务商值得深入了解 - 品牌推荐大师1
  • 2026年市场可靠的升降平台实力厂家哪家靠谱,液压升降平台/自行走升降平台/登车桥/升降机,升降平台品牌哪家权威 - 品牌推荐师
  • 【临沂】2026本地生活服务运营公司实力榜TOP5测评 - 野榜数据排行
  • 2026年度权威发布:最新充电桩建站厂家实力与服务深度解析 - 十大品牌推荐
  • 2026年充电桩建站厂家推荐榜单:技术产能与生态价值双维度评估的行业标杆 - 十大品牌推荐
  • 2026年梳理成都计算机培训实力机构,哪个口碑好? - 工业品牌热点