当你的客服系统有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%

关键设计决策

  1. 每个节点一个职责:不要在一个节点中处理多种逻辑。退款处理、换货处理、物流查询各自独立。
  2. 状态管理:用AgentState存储对话上下文,包括用户信息、订单信息、历史对话。节点之间通过State传递信息。
  3. 人机交互节点:对于退款等敏感操作,插入human_approval节点,暂停Agent执行,等待人工确认。
  4. 错误恢复:每个节点都有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倍。