
现场服务 Agent:让模型理解工单,让优化器安排人、车、备件和时间窗
电力、设备维保、物业和售后服务常年面对同一个难题:客户描述不完整,调度员要判断技能、位置、备件、优先级和时间窗。Microsoft 2026 年 9 月发布的 Dynamics 365 Scheduling Operations Agent,就是将多资源优化与人工审核结合;Google 10 月案例中,Hitachi 一线人员已经构建 200 多个 Agent 场景,生产率最高提升 30%。
现场服务不是“问谁有空”这么简单。错误派单会造成二次上门、SLA 违约和车辆空驶,必须将语义理解与组合优化分开。
模型把非结构化诉求变成约束,优化器求可行解,人类处理取舍与突发事件。
先把工单编译成约束
class DispatchRequest(BaseModel):
job_id: str
location: tuple[float, float]
required_skills: set[str]
required_parts: dict[str, int]
duration_minutes: int
earliest: datetime
latest: datetime
sla_penalty_per_minute: float
safety_level: Literal["normal", "licensed", "two_person"]
Agent 从电话记录、设备型号和历史工单中抽取这些字段;缺少设备序列号或安全等级时进入补充信息,而不是给出低置信排班。
调度由求解器完成
from ortools.sat.python import cp_model
model = cp_model.CpModel()
assign = {(j, t): model.NewBoolVar(f"a_{j}_{t}") for j in jobs for t in techs}
for j in jobs:
model.Add(sum(assign[j, t] for t in techs if qualified(t, j)) == 1)
for t in techs:
add_no_overlap(model, t, jobs, assign, travel_minutes)
enforce_shift_and_parts(model, t, jobs, assign)
model.Minimize(travel_cost(assign) + sla_penalty(assign) + overtime_cost(assign))
LLM 可以解释为什么把 A 工单分给张师傅,但不能自行忽略资质或备件约束。求解器若无解,要返回冲突集合,让 Agent 建议外包、改约或跨仓调拨。
变更必须带版本与影响面
调度表是持续变化的共享状态。Agent 每次提交变更时携带 schedule_version,写入前做乐观锁;若调度员刚刚手动改派,就重新求解。高优先级插单不应只移动一个工单,还要展示受影响客户和加班成本。
{
"base_version": 418,
"changes": [{"job": "J-82", "from": "T-07", "to": "T-12"}],
"impact": {"late_jobs": 0, "extra_km": 18, "overtime_minutes": 25},
"requires_approval": true
}
现场端必须允许离线和人工接管
移动端缓存当天工单、操作规程和必要模型;网络恢复后按事件序列同步照片、签字、用料和设备状态。Agent 生成的步骤不能覆盖安全作业票,技术员必须能暂停、标记不适用并直接呼叫专家。
核心指标包括首次修复率、每单里程、技术员利用率、准时到达率、二次上门率、备件缺失率和调度员人工调整次数。最先落地的往往不是全自动排班,而是工单结构化、缺失信息补齐和候选排程,这已经能显著减少调度时间。