多智能体协同的跨境物流异常件识别与处置落地

日期:2026-08-10

一、项目背景

客户是一家跨境电商卖家,主营家居小件,主要市场在欧美,日均发货三四万单,用的物流渠道很杂:专线小包、海外仓派送、还有一部分平台官方物流。渠道杂就意味着轨迹接口杂,十几家承运商,每家的轨迹节点命名、状态码、更新频率都不一样。

他们的售后团队有二十多人,每天工作的一大块是"翻轨迹"。客户来问包裹在哪,客服打开一堆后台一个一个查;系统里那些好几天没更新的单子,靠人抽查;清关被扣的、地址不详退回的、末端派送失败的,各种异常混在一起,等到发现时往往已经过了最佳处理窗口。

财务那边的数字更直观:上一年度物流异常导致的赔付和二次发货成本占到营收的百分之二点多,其中相当一部分是"如果早两天发现就不用赔"的类型。比如清关需要补资料,承运商发了通知但淹没在轨迹流水里,等发现时货已经被退运,来回运费加货值全损。

老板给的目标是:让异常自己冒出来,别等客户来问。

二、落地场景

我们做的是一套多智能体协同的方案,跑在新普的 AI 私有化底座上,跟他们的订单和仓配系统对接。四个 Agent 各管一段。

轨迹解析 Agent。负责把十几家承运商格式各异的轨迹文本统一成标准事件流。输入是原始轨迹(有中文有英文,有的还是当地语言),输出是结构化事件:事件类型、发生地、时间、原始描述。这一层用小模型加规则混合做,常见的走规则匹配,匹配不上的才交给模型。

异常分类 Agent。在标准事件流上判断这单是不是有问题、是什么问题。异常类型分了十几类:清关待补资料、清关查验扣留、地址不详、收件人拒收、末端派送失败、轨迹长时间停滞、疑似丢件、路由异常(去了不该去的中转站)。判断不只看最新一条事件,要看整条时间线的形态,比如同一个中转站扫描三次以上通常意味着分拣错误。

处置决策 Agent。给出建议动作并算账:补资料、联系收件人改地址、申请退回、放弃并赔付、二次发货。每个动作后面挂上预估成本和成功率,比如"申请退回"要算退运费和货值残值,跟"直接赔付"比哪个划算。低于一定金额的按策略自动执行,高的推人工。

客户沟通 Agent。生成给收件人的通知文案,多语言,语气按异常类型调整。地址不详这类需要客户配合的,文案里要给出明确的操作路径;派送延误这类只需要安抚的,说清楚预计时间就行。发出去之后如果客户回复,回复也进这个 Agent 做意图识别,简单的(比如提供新地址)自动闭环,复杂的转人工。

四个 Agent 之间通过一个共享的任务状态机协作,每单异常从识别到关闭是一条完整链路,中间任何一步失败都能重试或降级到人工。

三、关键技术挑战与解决思路

承运商轨迹语义不一致。 这个问题比想象中难。同样是"派送失败",有的承运商写 "Delivery attempted - no answer",有的写 "COURIER UNABLE TO ACCESS",有的干脆只给一个状态码。更麻烦的是同一个词在不同承运商那里含义不同,某家的 "In Transit" 包含了清关中,另一家的清关是单独状态。我们没法穷举,最后做成"规则打底 + 模型兜底 + 人工回流":高频表述做成规则库(覆盖了大概八成五的流水),剩下的交给模型分类,模型不确定的(置信度低于阈值)进人工队列,人工标注结果每周回流补充规则库。三个月后规则覆盖率涨到九成三,模型调用量降了一半多。

异常的早期识别。 最有价值的是在异常刚出苗头时抓到,而不是等到明确失败。我们做了一个"停滞检测":按渠道、按路由段分别统计正常情况下两个节点之间的耗时分布,某单超过该分段的 P90 就标记为疑似停滞,超过 P97 就升级为确认异常。这个分位数是滚动计算的,因为旺季和平季差别很大,固定阈值会在旺季误报到爆。上线第一周就是因为用了固定阈值,黑五期间一天报出来两万多条,客服直接说这系统没法用,我们连夜改成动态分位。

处置动作和成本的权衡。 这块的难点不是技术,是把业务的隐性规则挖出来。什么情况下该赔、什么情况下该退,售后老员工心里有本账,但从来没写下来过。我们的办法是先拿三个月的历史处置记录训了一个基础的决策模型,然后把模型的建议跟老员工的实际选择做对比,不一致的挑出来一条条问原因。问了大概两百多条,挖出十几条隐性规则,比如"目的国是某几个国家的,退运基本收不回来,直接放弃"、"客单价低于某个值时,任何需要人工介入的动作都不划算"。这些规则最后是硬编码进去的,不是模型学的,因为它们本质是商业决策不是模式识别。

跨时区沟通的时效。 客户在欧美,客服在国内,时差摆在那儿。以前的做法是客服白天集中处理,等于每次沟通至少延迟一个工作日。沟通 Agent 上线后,通知按收件人当地时间的合理时段自动发出,回复也是自动接收和初步处理,真正需要人工的才排进国内客服的队列。这一改,一轮沟通的平均耗时从二十多小时降到四小时出头。

案例片段(已脱敏):轨迹归一化与异常判定

``` 订单 ORD-8827413  渠道 CH-04(欧洲专线)  发货 D+0 原始轨迹(节选,承运商 C-07):  D+2  "Arrived at sorting hub LGG"  D+3  "Departed facility"  D+6  "Arrived at sorting hub LGG"        <- 同站二次到达  D+8  "Arrived at sorting hub LGG"        <- 同站三次到达

归一化事件流:  HUB_ARRIVE(LGG, D+2) -> HUB_DEPART(LGG, D+3)  -> HUB_ARRIVE(LGG, D+6) -> HUB_ARRIVE(LGG, D+8)

异常判定:  规则 R-LOOP:同一 HUB 到达 >=3 次 -> 路由异常(分拣错误)  停滞检测:CH-04 的 HUB->OUT 段 P90 = 2.4d,本单已 6d -> 确认停滞  分类结论:ROUTE_ERROR + STALLED   置信 0.94 ```

案例片段(已脱敏):处置决策的成本比对

订单 ORD-8827413  货值 $34.90  已产生头程成本 $6.20 候选动作:  A 联系承运商查件并催派   成本 $0    成功率 0.41  预期损失 $23.6  B 申请退回国内           成本 $18.7 成功率 0.78  预期损失 $22.1  C 直接赔付并二次发货     成本 $41.1 成功率 0.96  预期损失 $41.1  D 赔付不补发             成本 $34.9 成功率 1.00  预期损失 $34.9 硬规则命中:目的国 BE,退运回收率历史 <0.35 -> 排除 B 建议:A(先催 48h),失败自动转 C 自动执行阈值:预期损失 < $50 -> 自动执行,无需人工

四、效果数据

系统从试点到全量用了两个多月,全量运行到现在七个多月,跨过了一个旺季。

异常识别提前量是最直接的收益。跟历史基线比,异常从发生到被识别的平均时长从三点八天降到零点九天。其中清关类异常改善最明显,因为承运商的补资料通知以前完全被淹没,现在是直接触发任务。

自动处置率百分之六十四。这个数的含义是:识别出的异常里有六成四是系统自己走完了整个处置链路,人工没介入。剩下的三成六里,一半是金额超阈值必须人工确认,一半是客户回复内容复杂转了人工。

赔付金额降幅约百分之三十七。这里要说明,赔付降低不全是因为处理更快,有一部分是因为决策更理性了,以前客服图省事经常直接补发,现在系统会先算账。

客诉率从千分之六点二降到千分之三点一。降幅里贡献最大的是主动通知,以前是客户来问才知道有问题,现在多数情况是客户先收到我们的通知。有个反直觉的现象:主动告知延误之后,客诉不升反降,客户要的其实是知情。

售后团队规模没减,但工作内容变了,现在主要处理疑难和跟承运商谈判,翻轨迹这件事基本消失了。以上数据为项目复盘口径,已做脱敏处理。

五、可复用经验总结

多智能体这个架构在这个场景里是合适的,因为四个环节的输入输出、所需能力、失败方式都不一样,硬塞进一个 Agent 会让提示词膨胀到无法维护。但拆分的边界要按"职责"而不是按"步骤"来划,我们最初按处理步骤拆了六个,结果几个 Agent 之间要传大量上下文,后来合并成四个,每个对应一种能力,清爽了很多。

规则和模型的分工要现实一点。轨迹解析这种有大量高频固定表述的场景,规则的性价比远高于模型,模型只负责长尾。让人工标注结果定期回流补规则,是个很土但很有效的正循环,跑三个月能把模型调用量砍掉一半。

阈值一定要动态。黑五那次两万条误报的教训很深刻,固定阈值在业务有强周期性的场景里必然翻车。滚动分位数计算成本很低,早点上比事后补强。

隐性业务规则挖掘这件事,别指望模型自己学出来。有些规则背后是商业判断(比如某个国家退运不划算),历史数据里体现为"老员工总是选 D",模型能学到相关性但学不到原因,一旦市场条件变化就会失效。把它们显式写下来,还能让业务方随时调整。

主动沟通的价值被我们低估了。项目立项时沟通 Agent 是优先级最低的一个,做完发现它对客诉率的贡献最大。用户对出问题的容忍度,远高于对被蒙在鼓里的容忍度。

目前还有个没啃下来的硬骨头:承运商侧的接口不给力,有几家的轨迹更新延迟本身就有十几个小时,我们再快也快不过数据源。这块只能靠商务去谈,技术上无解。