当你的客服系统有87个if-else分支时,你就知道该重构了
某电商公司的客服系统最初是用LangChain的Chain模式搭建的。核心逻辑很简单:用户输入→意图识别→路由到对应处理逻辑→返回结果。但随着业务增长,处理逻辑从5个膨胀到87个——退换货、退款、物流查询、投诉、优惠券、会员等级、价格保护……每个逻辑都有自己的条件分支。
代码变成了一个巨大的if-else地狱。修改一个退款逻辑,可能影响退换货。新增一个物流查询,需要在5个地方添加路由。团队的开发速度从每周2个新功能降到了每个月1个。
这就是LangGraph的用武之地。
为什么用LangGraph而不是继续用Chain?
LangChain的Chain模型是"线性"的:A→B→C→D。适合简单的Pipeline,但不适合有分支、有循环、有状态管理的复杂场景。
LangGraph的Graph模型是"图"的:节点之间通过边连接,可以有条件分支、循环、并行执行。它天然适合客服系统这种"多入口、多分支、有状态"的场景。
金句:Chain是"一条路走到黑",Graph是"哪条路对走哪条"。
重构过程:从if-else地狱到状态图
我们花了3天时间,用LangGraph重构了整个客服系统。核心变化:
重构前(LangChain Chain):
# 伪代码:87个if-else分支
if intent == "refund":
if order_status == "delivered":
if within_7_days:
return process_refund()
else:
return "超过7天不能退款"
elif order_status == "shipped":
return "请先确认收货"
else:
return "订单未发货,直接取消即可"
elif intent == "exchange":
if product_type == "clothing":
if size_available:
return process_exchange()
else:
return "没有合适的尺码"
# ... 80多个类似分支
重构后(LangGraph):
# 状态图:清晰的节点和边
graph = StateGraph(AgentState)
# 节点:每个处理逻辑独立
graph.add_node("intent_classifier", classify_intent)
graph.add_node("refund_handler", handle_refund)
graph.add_node("exchange_handler", handle_exchange)
graph.add_node("shipping_handler", handle_shipping)
graph.add_node("complaint_handler", handle_complaint)
# 边:路由逻辑清晰
graph.add_conditional_edges(
"intent_classifier",
route_intent,
{
"refund": "refund_handler",
"exchange": "exchange_handler",
"shipping": "shipping_handler",
"complaint": "complaint_handler"
}
)
# 每个handler内部也可以有自己的状态图
重构后的效果
| 指标 | 重构前 | 重构后 | 变化 |
|---|---|---|---|
| 代码行数 | 800行 | 300行 | -62% |
| 条件分支 | 87个 | 12个 | -86% |
| 新增功能时间 | 3天 | 4小时 | 效率提升6倍 |
| Bug修复时间 | 1天 | 2小时 | 效率提升4倍 |
| 新人上手时间 | 2周 | 3天 | 学习曲线降低80% |
关键设计决策
- 每个节点一个职责:不要在一个节点中处理多种逻辑。退款处理、换货处理、物流查询各自独立。
- 状态管理:用
AgentState存储对话上下文,包括用户信息、订单信息、历史对话。节点之间通过State传递信息。 - 人机交互节点:对于退款等敏感操作,插入
human_approval节点,暂停Agent执行,等待人工确认。 - 错误恢复:每个节点都有try-except,失败时路由到
error_handler节点,而不是整个图崩溃。
金句:LangGraph的图编排不是"让代码更短",而是"让逻辑更清晰"。
部署后的稳定性数据
上线3个月后:
- 任务完成率:91.3%(重构前78.5%)
- 平均对话轮数:3.2轮(重构前5.8轮)
- 人工介入率:12%(重构前35%)
- Token消耗/对话:平均$0.08(重构前$0.15)
金句:LangGraph帮你省的不是代码,是维护成本。800行if-else的维护成本是300行状态图的10倍。