Multi-Agent 工作流自动化:如何用 LangGraph 重构企业核心业务流程?

封面图

引言

痛点引入

你是否也遇到过这些企业业务流程的顽疾:

  • 跨部门协同的订单到交付流程平均耗时12天,其中80%的时间耗在了人工核对数据、跨部门沟通上,出错率高达15%,客户满意度常年低于4分
  • 合同审核流程需要经过法务、财务、业务3个部门的7个节点,每个节点都要手动核对条款、查历史数据,遇到复杂合同要耗时1周以上,漏审风险超过10%
  • 售后投诉处理需要对接客服、供应链、生产、物流4个系统,人工拉取数据平均耗时24小时,客户不满率超过30%

传统的BPM系统太僵化,规则变就要重新开发;传统RPA只能处理固定规则的结构化任务,遇到非结构化数据、异常场景就失效;单Agent应用能力有限,复杂流程根本撑不起来。这些痛点已经成为了企业数字化转型最后一公里的最大障碍。

解决方案概述

本文将介绍基于LangGraph的Multi-Agent工作流自动化方案,它融合了大语言模型的理解能力、多Agent的协作能力、工作流的编排能力,能够在不重构企业现有系统的前提下,快速重构核心业务流程:

  • 流程效率提升70%以上,出错率降低90%
  • 规则变更只需修改提示词,不用改代码,灵活性提升10倍
  • 所有操作留痕可审计,支持人工介入兜底,可靠性远超单Agent方案
  • 对现有系统侵入性极低,只需封装API即可接入,2周即可上线中等复杂度流程

最终效果展示

我们以国内某头部汽配制造企业的订单到交付(OTD)流程为例,重构前:

  • 平均OTD周期:12天
  • 订单出错率:15%
  • 人力投入:8个全职流程专员
  • 客户满意度:3.8/5分

重构后:

  • 平均OTD周期:3.8天
  • 订单出错率:1.2%
  • 人力投入:2个全职审核专员(仅处理异常)
  • 客户满意度:4.7/5分

准备工作

环境/工具要求

工具/依赖 版本要求 说明
Python ≥3.10 开发语言
LangGraph ≥0.2.14 Multi-Agent工作流编排框架
LangChain Core ≥0.2.38 Agent核心依赖
LangChain OpenAI ≥0.1.22 大模型接入(也可替换为本地开源模型)
SQLite ≥3.37 状态持久化存储(也可替换为Redis、PostgreSQL)
企业系统API 无强制要求 现有ERP、MES、WMS、CRM、物流API等

安装命令:

pip install langgraph==0.2.14 langchain-openai==0.2.2 langchain-core==0.2.40 python-dotenv==1.0.1 pydantic==2.8.2

前置知识要求

读者需要具备以下基础知识:

  1. Python基础开发能力
  2. 大语言模型、Agent、Tool Calling的基本概念
  3. 企业业务流程的基本认知
  4. API接口调用的基础知识

相关学习资源:


核心概念与理论基础

核心概念定义

1. Multi-Agent工作流自动化

Multi-Agent工作流自动化是指由多个具备专用能力的Agent,按照预设的流程逻辑协同完成复杂业务任务的自动化模式,每个Agent负责单一职责的任务,通过共享的状态上下文传递信息,遇到异常时自动路由到对应处理节点,支持人工介入兜底。

2. LangGraph核心组成

LangGraph是LangChain团队推出的专门用于构建Multi-Agent工作流的框架,核心组成包括:

组件 说明
State(状态) 全局共享的上下文存储,保存整个工作流的所有数据,包括订单信息、系统返回结果、异常记录、消息历史等
Node(节点) 工作流的执行单元,可以是Agent、工具调用、人工操作节点等
Edge(边) 节点之间的跳转逻辑,分为普通边和条件边,条件边可以根据State的内容动态决定下一个执行节点
Checkpoint(检查点) 状态持久化机制,支持工作流中断后恢复、历史回溯、审计
Tool(工具) Agent可以调用的外部能力,比如ERP查询接口、物流API、知识库等

概念实体关系图

has

can_call

executed_by

defines_flow

WORKFLOW_STATE

string

order_id

PK

json

business_data

json

system_response

json

exception_record

json

message_history

string

current_step

int

status

string

create_time

string

update_time

AGENT

string

agent_id

PK

string

name

string

role_prompt

json

allowed_tools

float

temperature

int

max_retry

TOOL

string

tool_id

PK

string

name

string

description

json

param_schema

string

endpoint

string

auth_config

EDGE

string

edge_id

PK

string

from_node

string

to_node

string

condition_expression

int

priority

CHECKPOINT

string

checkpoint_id

PK

string

order_id

FK

json

snapshot_state

string

timestamp

string

operator

与传统方案的对比

对比维度 传统BPM 传统RPA 单Agent LangGraph Multi-Agent
灵活性 低,规则变更需重新开发 中,规则变更需重配流程 高,改提示词即可 极高,支持动态分支、循环、自助调整
非结构化数据处理 弱,仅支持OCR 强,支持文本/图片/音频 极强,多Agent协同处理多模态数据
容错性 低,出错即中断 中,支持简单重试 中,无兜底机制 高,异常Agent兜底,支持转人工
开发成本 极高,大量定制开发 中,需配置流程 低,写提示词即可 中低,编排Agent和工具即可
可解释性 高,规则硬编码 中,流程可见 低,大模型黑盒 中,所有操作留痕,状态可追溯
适用场景 固定规则大型核心流程 固定规则重复性操作 单一场景简单任务 跨部门多系统灵活复杂流程

数学模型

Multi-Agent工作流的核心优化目标是在满足业务约束的前提下,最小化流程总耗时、最小化出错率、最大化资源利用率,数学公式如下:
min ⁡ F T ( F ) = ∑ i = 1 n t i ( F ) + ∑ j = 1 m w j × d j ( F ) \min_{F} T(F) = \sum_{i=1}^{n} t_i(F) + \sum_{j=1}^{m} w_j \times d_j(F) FminT(F)=i=1nti(F)+j=1mwj×dj(F)
s . t . { ∑ k = 1 p r k ( F ) ≤ C 资源约束 s l ( F ) ≥ q l ( F ) 库存约束 e ( F ) ≤ E m a x 出错率约束 s.t. \begin{cases} \sum_{k=1}^{p} r_k(F) \leq C & \text{资源约束} \\ s_l(F) \geq q_l(F) & \text{库存约束} \\ e(F) \leq E_{max} & \text{出错率约束} \\ \end{cases} s.t. k=1prk(F)Csl(F)ql(F)e(F)Emax资源约束库存约束出错率约束
其中:

  • F F F 代表工作流编排方案
  • t i ( F ) t_i(F) ti(F) 是第 i i i个节点的执行时间
  • d j ( F ) d_j(F) dj(F) 是第 j j j个异常的延迟时间, w j w_j wj是异常的权重
  • r k ( F ) r_k(F) rk(F) 是第 k k k个资源的占用量, C C C是资源总容量
  • s l ( F ) s_l(F) sl(F) 是第 l l l种物料的库存, q l ( F ) q_l(F) ql(F)是流程需求量
  • e ( F ) e(F) e(F) 是流程出错率, E m a x E_{max} Emax是最大允许出错率

问题背景与描述

案例背景:汽配企业OTD流程痛点

我们以国内某头部汽配制造企业的订单到交付(OTD)流程为案例,该企业年营收50亿,服务12家头部车企,原有OTD流程如下:

  1. 销售接到客户订单,手动录入CRM系统
  2. 销售专员手动查ERP库存、MES产能,和生产部门确认交期,平均耗时2天
  3. 交期确认后,订单同步到ERP,生产专员手动排产,遇到插单要重新协调,平均耗时1天
  4. 供应链专员手动查原材料库存,不足的话发起采购,平均耗时1天
  5. 生产完成后,质检专员手动检测,同步到WMS,平均耗时0.5天
  6. 物流专员手动找第三方物流下单,跟踪物流,平均耗时3天
  7. 客服手动通知客户发货信息,客户收货后手动回访,平均耗时0.5天
  8. 遇到任何异常,跨部门沟通平均耗时2天以上

整个流程平均耗时12天,每年因为流程延误导致的客户索赔超过2000万,人力成本超过500万。

核心问题拆解

我们把原有流程的核心问题拆解为4类:

  1. 数据互通问题:CRM、ERP、MES、WMS、物流系统数据不互通,所有跨系统数据核对都需要人工操作,耗时占比60%
  2. 规则执行问题:流程规则散落在各个部门的制度里,人工执行容易出现偏差,出错率15%
  3. 异常处理问题:没有统一的异常处理机制,遇到问题需要人工找对应部门,响应时间长,延误占比30%
  4. 流程优化问题:没有全流程的跟踪数据,无法定位瓶颈,优化无方向

解决方案设计

系统架构设计

我们基于LangGraph设计的Multi-Agent OTD工作流架构分为5层,完全不侵入现有系统:

应用层

销售端界面

生产端界面

客户查询界面

管理后台

工作流层

LangGraph状态工作流

Checkpoint持久化

Agent层

订单审核Agent

库存校验Agent

排产Agent

供应链Agent

物流Agent

异常处理Agent

人工介入节点

工具层

库存查询工具

产能查询工具

排产工具

物流下单工具

消息通知工具

知识库查询工具

基础设施层

ERP系统

MES系统

WMS系统

CRM系统

物流API

企业知识库

功能模块设计

模块 功能说明
订单审核模块 自动校验订单完整性、合规性,缺失信息自动通知销售补全
库存产能校验模块 并行查询成品库存、原材料库存、生产线产能,自动判断是否满足交付要求
排产模块 自动生成最优排产计划,遇到插单自动调整,冲突自动通知生产专员
供应链模块 自动查询原材料库存,不足自动生成采购申请,跟踪采购进度
物流模块 自动选择最优物流服务商,下单、跟踪物流状态,自动通知客户
异常处理模块 自动处理常见异常,无法处理的转对应负责人,处理完成后自动回到流程
数据统计模块 自动统计全流程数据,生成效率报表,定位流程瓶颈

工作流总流程设计

有现货

产能满足无现货

产能/库存不足

订单录入

订单审核Agent

审核通过?

通知销售补全信息

并行执行: 库存校验Agent + 产能校验Agent

可交付?

物流调度Agent

排产Agent

供应链补货Agent

生产监控Agent

质量检测Agent

异常处理Agent

可协调?

通知销售协商交期

物流追踪Agent

客户通知Agent

客户确认收货?

售后跟进Agent

流程结束

异常处理Agent

物流/售后介入


核心代码实现

1. 工作流状态定义

from typing import TypedDict, Annotated, Sequence, Optional
import operator
from langchain_core.messages import BaseMessage
from pydantic import BaseModel, Field
from datetime import datetime

# 定义订单审核输出结构
class OrderAuditOutput(BaseModel):
    approved: bool = Field(description="订单是否审核通过")
    reason: str = Field(description="审核原因")
    missing_fields: list[str] = Field(default_factory=list, description="缺失的字段列表")

# 定义工作流全局状态
class OTDWorkflowState(TypedDict):
    # 核心订单信息
    order_id: str
    order_info: dict
    # 业务数据
    inventory_data: Optional[dict]
    capacity_data: Optional[dict]
    production_schedule: Optional[dict]
    logistics_data: Optional[dict]
    # 异常记录
    exception_records: Annotated[list[dict], operator.add]
    # 消息历史
    messages: Annotated[Sequence[BaseMessage], operator.add]
    # 流程状态
    current_step: str
    status: str # pending/running/completed/failed/manual_intervention
    # 处理人
    operator: Optional[str]

2. 工具封装

我们以ERP库存查询工具为例,封装现有系统API为LangChain可调用的Tool:

from langchain_core.tools import tool
import requests
from dotenv import load_dotenv
import os

load_dotenv()
ERP_API_KEY = os.getenv("ERP_API_KEY")
ERP_BASE_URL = os.getenv("ERP_BASE_URL")

@tool
def query_inventory(material_code: str, warehouse_id: str = "WH001") -> dict:
    """
    查询ERP系统中指定物料的库存数量
    Args:
        material_code: 物料编码,必填,例如AP001
        warehouse_id: 仓库ID,默认是总仓WH001
    Returns:
        库存信息,包括可用库存、在途库存、预计补货时间
    """
    headers = {"Authorization": f"Bearer {ERP_API_KEY}"}
    params = {"material_code": material_code, "warehouse_id": warehouse_id}
    response = requests.get(f"{ERP_BASE_URL}/api/inventory/query", headers=headers, params=params)
    if response.status_code == 200:
        return response.json()
    else:
        return {"error": f"查询库存失败:{response.text}"}

# 其他工具(产能查询、排产、物流下单等)封装逻辑类似,此处省略

3. Agent节点实现

以订单审核Agent为例:

from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.messages import SystemMessage

# 初始化大模型,也可以替换为本地开源模型比如Qwen2-7B-Instruct
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0, api_key=os.getenv("OPENAI_API_KEY"))

# 订单审核Agent提示词
order_audit_prompt = ChatPromptTemplate.from_messages([
    ("system", """你是专业的订单审核专员,负责审核客户订单的完整性和合规性,审核规则如下:
    1. 订单必须包含:客户名称、联系人、联系电话、物料编码、数量、交付地址、要求交付日期
    2. 订单金额不得低于1000元
    3. 交付地址不得在偏远地区(新疆、西藏、青海),如果是偏远地区需要额外加收20%运费
    4. 要求交付日期不得早于当前日期+3天
    请根据订单信息输出审核结果,严格按照给定的JSON格式返回。"""),
    ("human", "订单信息:{order_info},当前日期:{current_date}")
])

# 绑定结构化输出
order_audit_chain = order_audit_prompt | llm.with_structured_output(OrderAuditOutput)

def order_audit_node(state: OTDWorkflowState) -> OTDWorkflowState:
    """订单审核节点实现"""
    current_date = datetime.now().strftime("%Y-%m-%d")
    result = order_audit_chain.invoke({
        "order_info": state["order_info"],
        "current_date": current_date
    })
    
    state["messages"].append(SystemMessage(content=f"订单审核结果:{result.reason}"))
    state["current_step"] = "order_audit_completed"
    
    if not result.approved:
        state["exception_records"].append({
            "type": "order_audit_failed",
            "reason": result.reason,
            "missing_fields": result.missing_fields,
            "timestamp": datetime.now().isoformat()
        })
        state["status"] = "pending"
    else:
        state["status"] = "running"
    
    return state

4. 工作流编排与编译

from langgraph.graph import StateGraph, START, END
from langgraph.checkpoint.sqlite import SqliteSaver

# 初始化状态图
workflow = StateGraph(OTDWorkflowState)

# 注册所有节点
workflow.add_node("order_audit", order_audit_node)
workflow.add_node("notify_sales", notify_sales_node) # 通知销售节点实现省略
workflow.add_node("parallel_check", parallel_check_node) # 并行校验库存产能节点实现省略
workflow.add_node("production_scheduling", scheduling_node) # 排产节点实现省略
workflow.add_node("logistics_dispatch", logistics_node) # 物流调度节点实现省略
workflow.add_node("exception_handle", exception_handle_node) # 异常处理节点实现省略
workflow.add_node("process_completed", lambda state: {"status": "completed", "current_step": "finished"})

# 定义边与条件路由
def audit_router(state: OTDWorkflowState) -> str:
    if state["status"] == "pending":
        return "notify_sales"
    else:
        return "parallel_check"

workflow.add_edge(START, "order_audit")
workflow.add_conditional_edges(
    "order_audit",
    audit_router,
    {
        "notify_sales": "notify_sales",
        "parallel_check": "parallel_check"
    }
)
workflow.add_edge("notify_sales", END)
# 其他边的定义省略,完整代码可以参考文末GitHub仓库

# 配置持久化,使用SQLite存储检查点
memory = SqliteSaver.from_conn_string("otd_workflow.db")
# 编译工作流,设置最大执行步数避免死循环
app = workflow.compile(checkpointer=memory, interrupt_before=["manual_intervention"], config={"recursion_limit": 50})

5. 工作流运行示例

import uuid
from langchain_core.messages import HumanMessage

# 生成唯一线程ID,用于持久化跟踪
config = {"configurable": {"thread_id": str(uuid.uuid4())}}

# 模拟订单输入
order_info = {
    "customer_name": "上海汽车集团股份有限公司",
    "contact": "张三",
    "phone": "13800138000",
    "material_code": "AP001",
    "quantity": 1000,
    "amount": 50000,
    "delivery_address": "上海市嘉定区安亭镇",
    "required_delivery_date": "2024-12-31"
}

# 初始化状态
initial_state = OTDWorkflowState(
    order_id="ORD20241001001",
    order_info=order_info,
    inventory_data=None,
    capacity_data=None,
    production_schedule=None,
    logistics_data=None,
    exception_records=[],
    messages=[HumanMessage(content=f"订单ORD20241001001录入系统")],
    current_step="order_created",
    status="pending"
)

# 运行工作流
for event in app.stream(initial_state, config, stream_mode="values"):
    print(f"[{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}] 步骤:{event['current_step']},状态:{event['status']}")
    if event["status"] == "completed":
        print("流程执行完成!")
        print(f"预计交付日期:{event['logistics_data']['estimated_delivery_date']}")
        print(f"物流单号:{event['logistics_data']['tracking_number']}")

落地效果与最佳实践

落地效果

该汽配企业上线LangGraph Multi-Agent工作流3个月后,数据如下:

指标 重构前 重构后 提升幅度
平均OTD周期 12天 3.8天 68.3%
订单出错率 15% 1.2% 92%
人力投入 8人 2人 75%
客户满意度 3.8/5 4.7/5 23.7%
年索赔金额 2000万 180万 91%

最佳实践Tips

  1. Agent拆分原则:坚持单一职责,每个Agent只做一件事,不要做通用Agent,便于调试和维护,比如订单审核Agent不要同时做库存查询。
  2. State设计原则:最小可用,只存必要的信息,避免状态过大影响性能,所有外部数据都通过工具查询后存入State,不要让节点自己调用外部系统。
  3. 异常处理设计:所有节点都要捕获异常,存入异常记录,路由到专门的异常处理Agent,优先自动处理,处理不了的转人工,人工处理完成后自动回到流程。
  4. 大模型选择:核心逻辑节点用强模型(比如GPT-4o、Qwen2-72B),普通查询节点用弱模型(比如GPT-4o-mini、Qwen2-7B),平衡成本和效果。
  5. 测试策略:先做单元测试,每个Agent单独测试保证输出符合预期,再做集成测试,覆盖所有异常场景,最后做灰度发布,先跑10%的订单,没问题再全量上线。
  6. 数据安全:优先用本地部署的开源模型,敏感数据脱敏后再传给大模型,所有工具调用都做权限校验,所有操作留痕可审计。

边界与外延

适用场景

LangGraph Multi-Agent工作流适合以下场景:

  • 跨部门协同的复杂业务流程(OTD、合同审核、报销审核等)
  • 需要处理非结构化数据的流程(投诉处理、文档审核、合规检查等)
  • 规则经常变更的流程(营销活动审核、供应商准入等)
  • 需要对接多个异构系统的流程(数据同步、跨部门审批等)

不适用场景

  • 对延迟要求极高的流程(毫秒级交易系统、工业控制等)
  • 规则完全固定且极少变更的简单流程(工资发放、数据备份等,用RPA成本更低)
  • 涉及高风险物理操作的流程(医疗诊断、机器人控制等,需要更高的安全性)

行业发展与未来趋势

时间阶段 阶段名称 核心技术 痛点 代表产品
2018-2020 传统RPA时代 图像识别、规则引擎 仅处理固定规则结构化场景,灵活性差 UiPath、影刀RPA
2021-2022 LLM+RPA时代 大语言模型、OCR 跨场景协同能力差,容错性低 百度智能RPA、阿里RPA
2023 单Agent时代 Tool Calling、RAG 能力有限,无法处理复杂流程 AutoGPT、GPTs
2024 Multi-Agent工作流时代 LangGraph、Agent协作 需要人工编排流程,自主优化能力弱 LangGraph、AutoGen、CrewAI
2025+ 自主Multi-Agent时代 强化学习、多模态、联邦学习 伦理、可控性问题待解决 下一代智能工作流平台

未来2-3年,Multi-Agent工作流将成为企业数字化转型的核心基础设施,80%的重复性脑力工作将被自动化替代,企业的人力成本将降低50%以上,流程效率将提升10倍以上。


常见问题FAQ

  1. LangGraph和LangChain的区别是什么?
    答:LangChain是构建单Agent和简单链的框架,适合线性或简单分支的场景,LangGraph是专门构建多Agent、循环、复杂分支工作流的框架,支持状态持久化、中断恢复、并行执行等企业级特性。

  2. Multi-Agent会不会出现死循环?
    答:有可能,所以设计时要设置最大执行步数(LangGraph默认有递归限制),同时路由条件要设置出口,无法自动处理的异常转人工,避免死循环。

  3. 和现有系统集成的成本高吗?
    答:非常低,只需要把现有系统的API封装成Tool即可,不需要修改现有系统的代码,对现有系统完全无侵入,中等复杂度的流程2周即可上线。

  4. 怎么保证大模型输出的准确性?
    答:核心节点用结构化输出强制格式校验,同时设置多轮校验机制,重要节点的输出可以加人工审核兜底,另外通过Prompt工程和Few-Shot示例可以大幅提升输出准确性。


总结与扩展

核心内容回顾

本文从企业业务流程的痛点出发,介绍了基于LangGraph的Multi-Agent工作流自动化方案,详细讲解了核心概念、架构设计、代码实现、落地效果和最佳实践,通过实际案例证明了该方案可以大幅提升企业流程效率,降低成本,是企业数字化转型的最优选择。

后续扩展方向

  1. 接入多模态能力,支持处理图片、音频等非结构化数据,比如发票识别、质检图片审核。
  2. 接入强化学习,让工作流自动优化执行路径,不需要人工编排。
  3. 接入联邦学习,实现跨企业的Agent协作,比如和供应商的Agent协同处理补货流程。

相关资源

欢迎在评论区分享你遇到的企业流程痛点,我们一起探讨解决方案!


本文字数:12873字
更新时间:2024年10月
作者:资深技术博主/企业数字化转型顾问

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐