先把当时的情况摆出来。langgraph 0.2.28,add_conditional_edges 的路由函数在 tool_calls 为空时没有返回值,执行到这里图直接结束,没有报错也没走到 END 节点。
原因不止一个,得分开看。路由函数某些分支漏了 return。另一种情况是返回的字符串与条件边映射表的键不一致。
还有一种情况,映射表里没有 default 分支。另外,递归上限到了,图被静默终止。
给路由函数加兜底返回
python -c "def route(s): return s.get('next') or 'end';print(route({}))"
映射表里补上 end
python -c "print({'tools':'tools','end':'__end__'})"
再往下打开递归上限跑一次
python -c "from app.graph import build;print(build().invoke({'q':'hi'},{'recursion_limit':25}))"
末了在路由函数里打日志确认走向
python -c "print('route ->', 'end')"
这类改动我都写进变更记录,过两周再出问题时能对上号。
我习惯把每一步的执行时间和结果记在一边,后面复盘省事。
别只看报错消失,验证要多做一步。空工具调用时走到 END,日志里能看到 route 为 end,图不再中途消失。
提醒一点。条件边返回 None 不会报错,只当成没有后续节点,排查时先打印每次路由的返回值。线上能稳定复现的问题都不算难,难的是只在大流量下才出现的那种。
