求解器负责算,
大模型负责听和说。
销售说一句“一汽要十万件转向节、给了 8% 折扣”,智能体按固定的工具链走完:库存核减 → 产能盘点 → OR-Tools 混合整数规划 → 人/料/机差额 → 利润底线 → 各部门派单。大模型只做两件事:把一句话变成结构化订单,把结果讲成管理层能读的结论;页面上每一个数字都来自程序。
部署架构
单容器、单进程、标准库 HTTP 服务;第三方依赖只有 OR-Tools。演示数据与自有数据分开存储,共用同一套解析、校验与求解代码。
任务采用“提交 + 轮询步骤”而不是流式输出:页面每 350 ms 取一次进度,计划算完立刻展示,大模型结论随后替换模板结论,不受代理缓冲与超时影响。
智能体工具链
每一步标明由谁负责:程序计算与校验,AI理解与表达,人确认与下发。工具顺序固定,可审计、可复现。
- AI程序
parse_order理解指令DeepSeek 输出结构化订单 / 调整 / 追问;不可用时规则解析(中文数字、“九五折”“让利 5 个点”“C 厂第 3 个月停产”) - 程序
validate_order校验订单零件、客户须在主数据中;数量、折扣、交期范围检查 - 程序
check_inventory库存核减订单 − 成品库存 − 在制品 + 安全库存 = 净需求;按交付节奏拆成逐月累计需求 - 程序
load_capacity盘点空闲产能扣除其他在产订单占用后,每厂每月还能挤出多少件、卡在哪种资源 - 程序
solve_mipOR-Tools 排产见下一节;约 140 个变量,几十毫秒内求得最优 - 程序
gap_analysis人 · 料 · 机差额扩招人数与到岗月份、物料请购量与最晚下单日、设备台数与要求到厂月份、委外量 - 程序
profit_check利润与折扣底线完全成本口径毛利;盈亏平衡折扣;守住 12% 毛利的最大折扣 - 程序
compare_strategies策略对比同一订单在“冻结招聘 / 冻结设备投资 / 不委外不加班”下重解,给出代价 - 程序
search_lead_time可承诺交期有缺口时逐月放宽交期重解,找到最短可全部交付的周期 - 程序人
build_dispatch生成派单模板直接引用求解结果,给销售、仓储、各厂、人力、采购、设备供应商、委外厂商;人确认后下发 - AI
write_summary汇总结论DeepSeek 只拿到格式化好的数字(“393.0 万元”“17.4%”),要求照抄、不换算
求解模型(OR-Tools · SCIP 混合整数规划)
一次只排一个零件的新订单;其他在产订单以“占用率”的形式进入模型。
决策变量
x[f,m] | 工厂 f 第 m 月产量 | 连续,事后取整(误差 < 1 件) |
ot[f,m] | 加班工时 | ≤ 在岗人数 × 标准工时 × 20% |
hire[f,m] | 第 m 月到岗新人 | 整数,≤ 月招聘上限,招聘周期 1 个月 |
buy[f,e] | 新增设备台数 | 整数,交期之后才计入产能 |
lots[k,m] | 物料到货批次 | 受提前期约束,按累计量向上取整到最小批量 |
out[m] | 委外数量 | ≤ 委外月上限,第 2 个月起 |
back[m] / hold[m] | 累计欠交 / 提前备货 | 欠交计违约金,备货计仓储费 |
约束
- 人工 单件工时 × x ≤ 空闲工时 + 新人工时 + 加班
- 设备 每类设备:单件机时 × x ≤ 空闲机时 + 新设备机时(到货后)
- 物料 逐月:上月结存 + 到货 − 单耗 × 产量 = 本月结存 ≥ 0
- 交付 累计(自制 + 委外)+ 欠交 − 备货 = 累计净需求
- 场景 冻结招聘 / 冻结设备 / 不委外 / 不加班 / 某厂某月停产 → 对应变量上界置 0
目标:边际成本最小
加工费 + 物流 + 加班 1.5 倍工资 + 新人(招聘培训 + 在职月工资)+ 新设备(安装 + 计划期折旧)+ 物料采购 + 委外 + 违约金 + 仓储。现有人员和闲置设备视为沉没成本。
利润:完全成本口径
报给销售的毛利把现有人工也按标准工时计价,库存出货按标准成本,安全库存转回。决策用边际、报利润用完全成本,两种口径分开,避免“用沉没成本做决策”或“少算成本报利润”。
主数据模型
12 张表,长表格式(一行一个事实),与 ERP / MES / WMS / SRM 的常见导出一致。演示场景与上传模板是同一格式。
| 表 | 主键 | 关键字段 | 来源系统 | |
|---|---|---|---|---|
| 工厂 | 工厂编码 | 在岗人数、月招聘上限、人员 / 设备占用率 | HR · MES | 必需 |
| 零件 | 零件编码 | 目录价、成品库存、在制品、安全库存、委外单价 / 上限 | ERP · WMS | 必需 |
| 工艺路线 | 零件 × 工厂 | 单件工时、单件加工费(不在表里 = 该厂无资质) | MES · 工程 | 必需 |
| 设备类型 | 设备编码 | 月有效机时、单价、交期、安装费率、供应商 | 设备台账 · SRM | 可选 |
| 工厂设备台账 | 工厂 × 设备 | 现有台数 | 设备台账 | 可选 |
| 设备机时 | 零件 × 工厂 × 设备 | 单件机时 | MES | 可选 |
| 物料 | 物料编码 | 单价、可用库存、最小批量、提前期、供应商 | ERP · WMS · SRM | 可选 |
| BOM | 零件 × 物料 | 单件用量 | ERP · PLM | 可选 |
| 客户 / 运费 | 客户;客户 × 工厂 | 名称、别名;单件运费(就近生产) | CRM · TMS | 可选 |
| 月度负荷 | 工厂 × 月 | 逐月人员 / 设备占用率(覆盖工厂表) | APS · MES | 可选 |
| 参数 | 参数名 | 人工费率、加班上限、招聘培训费、违约金…… | 财务 | 可选 |
缺可选表时系统按明确的默认处理并在体检里提示:没有设备表 → 只按人工约束;没有 BOM → 不算采购;没有运费 → 不考虑就近。
自有数据流程
上传 → 识别 → 确认 → 体检 → 运行。识别可以借助 AI,但只有人确认、程序校验通过的数据才进入求解。
- 程序读取.xlsx(一个文件多张表)或 CSV;UTF-8 / GBK、分隔符自动识别;CSV 浏览器先 gzip;只保存解析后的表格
- 程序AI识别工作表名 + 表头同义词(“Plant”“Headcount”“MOQ”“采购周期”……)规则优先;规则认不出的表,把表头和前 3 行交给 DeepSeek 建议
- 人确认每张表识别成什么、每个字段对应哪一列,逐项可改;标注来源(规则 / AI / 人工)
- 程序体检必填、数字(支持 26,000、92%、3.5万)、占用率范围、编码引用、重复;错误精确到“工作表 · 第几行”
- 程序运行体检通过后数据源切到“我的数据”,与演示场景走同一条工具链
职责边界与失败降级
能算就给数,算不出就说清楚卡在哪;不让大模型补数字。
- 所有数量、金额、日期的计算
- 排产、差额、利润、策略对比
- 数据校验与行号定位
- 派单内容(模板直填)
- 把一句话变成订单 / 调整
- 认不出的表头给出映射建议
- 用业务语言写结论与回答追问
- 产生或修改任何数字
- 补齐缺失的主数据
- 直接下发派单
评估与路线图
改动求解器或数据层后,演示场景的结论必须保持可解释:标准场景要能讲出“扩招 + 补设备 + 采购”的故事,冻结设备投资要能看到延期。