Skip to content
🌊海洋蓝
🌸樱花粉
🍃森林绿
🔮幻夜紫
🌙暗夜黑

连锁餐饮采购智能编排:食材依赖自动排序 + 多门店协调 + 每日补货

一家连锁餐饮有几十上百家门店,每天都要补货。痛点很具体:望京店牛腱肉告急、浦东店三文鱼断档,但牛腱肉和牛肉能否互相替代、三文鱼冷链在 32℃ 高温下能不能接、四家店能不能合到同一张单……过去这些决策要么靠店长经验,要么靠一套写死在 ERP 里的补货规则。本文看 JiuwenSwarm 如何用蜂群协作把这些变成一个每天自动跑、自动学的采购 Team:食材依赖自动排序、多门店合并协调、每日补货无人值守。

目录


连锁餐饮补货的三道老难题

把"每天给几十家门店补货"这件事做好,传统方案几乎都卡在三个环节:

难题典型表现传统解法的痛点
① 食材依赖编排牛腱肉缺了,能不能用牛肉替代?三文鱼要冷链,高温天能不能接?各 SKU 之间有替代关系和先后约束写死在 ERP 的补货规则里,BOM 一改就要 IT 改代码
② 多门店协调望京、国贸、浦东三店都要牛腱肉,能不能合成一张单凑够起订量、摊薄运费?各店各下各的单,起订量凑不齐、运费翻倍
③ 每日补货每天早上要有人盯着库存跑一圈,遇上周末、节假日、天气变化还得手动调整纯人工,漏一单就断货;经验也留不下来

JiuwenSwarm 的解法是:把采购变成一支会自己跑的 Agent 团队——一个采购调度官(Leader)带几个专业 Teammate(需求预测、供应商比价、依赖校验、补货下单),每天早上 7 点自动唤醒,跑完一轮还把"哪家供应商爱迟到"这种经验沉淀下来,越跑越准。


JiuwenSwarm 凭什么能“编排采购”

JiuwenSwarm 是一款让多智能体真正协作起来的 Agent 系统,帮助用户通过自然语言驱动多 Agent 协作、Skill 自演进和工具调用,实现从意图到结果的端到端交付。

落到餐饮采购场景,本文会用到这几项能力:

  • Swarmflow(蜂群流):把"每天补货"这个目标自动拆成取数 → 预测 → 依赖排序 → 比价 → 下单的可执行工作流,支持并行取多店数据、条件分支(超预算走人工审批)。
  • Agent Team + TeamSkill:声明式定义采购团队的四个角色,Leader 组队、分任务、收结果。
  • cron 定时任务:每天 7:00 自动唤醒采购 Team,跑完结果推送到飞书,全程无需人工触发。
  • 双层团队记忆:每轮结束自动沉淀 [lesson](供应商迟到)、[member](比价 Agent 擅长生鲜)等经验,次日自动复用。
  • 工具权限与安全防护allow/ask/deny 三级动作,超预算、改供应商主数据等敏感操作必须人工审批。

一句话理解:JiuwenSwarm 不是"再写一个补货脚本",而是把采购协作从 "靠人盯 + 写死规则" 变成 "自动跑 + 越用越懂你的供应链"


一个会自己跑的采购团队

先看全貌。下图把连锁餐饮采购映射成了三层:

连锁餐饮采购协作总体架构

  • 顶层 · 蜂群协作层(采购 Team):一个 Leader(采购调度官)+ 四个专业 Teammate(需求预测 / 供应商比价 / 依赖校验 / 补货下单),由 Swarmflow 编排,每轮沉淀团队记忆。
  • 中层 · 团队记忆 TEAM_MEMORY.md:跨轮累积的供应链经验,所有成员只读。
  • 底层 · 多门店 + 供应商数据源:各门店的库存 ERP / POS 销售数据,以及供应商系统(通过 A2A 或报价接口接入)。

注意图里的协作流向:Leader 把"今日补货"这个目标拆给各 Teammate;需求预测 Agent 从门店 POS 拿销量数据,比价 Agent 向供应商拉报价,依赖校验 Agent 做食材替代/冷链判断,最后由补货下单 Agent 生成采购单。整个过程由 cron 每日触发。


让食材依赖自动排序

"每天补货"这句话,背后藏着一个有依赖关系的工作流:

cron 唤醒 →(四门店并行取库存/销量)→ 需求预测 → 缺口计算 + 食材依赖排序 → 供应商比价 →(超预算?人工审批)→ 生成采购单

JiuwenSwarm 的 Swarmflow 做的事,就是把这套流程写成一段可执行的 Python,各阶段自动衔接、并行/串行/条件分支全覆盖:

每日补货 Swarmflow DAG

几个关键点:

  1. 并行取数(map_parallel):T1 阶段四家门店的库存和销量数据同时拉取,互不阻塞——这比逐店串行快得多,正是 map_parallel 原语的用武之地。
  2. 依赖排序:T3 不是简单按缺口大小排序,而是结合 BOM 替代关系(牛肉可替牛腱)和冷链约束(三文鱼高温天要全程 ≤4℃),排出真正的补货优先级。
  3. 条件分支 + 人工审批:T4 比价后,若某笔采购超过预算阈值(如单笔>5 万),自动进入 H1 人工审批节点——人作为"有状态算子"参与,批准才下单,驳回则 Leader 重派需求预测。

每日补货的工作流长什么样

Swarmflow 的工作流是一段真实的 Python 代码,基于仓库里 SwarmSkill 工作流模板 的结构。改成餐饮补货后:

python
from swarmflow import agent, compact, log, map_parallel, parallel, phase

META = {
    "name": "daily-replenishment",
    "description": "连锁餐饮每日补货:多门店取数→需求预测→依赖排序→比价→下单",
    "whenToUse": "每天早晨自动补货,或用户要求生成补货计划时复用",
    "phases": [
        {"title": "取数", "detail": "并行拉取各门店库存与销量"},
        {"title": "预测", "detail": "结合POS+天气预测各SKU需求,算缺口"},
        {"title": "排序", "detail": "按BOM替代关系与冷链约束排补货优先级"},
        {"title": "比价下单", "detail": "比价→超预算审批→生成采购单"},
    ],
}

async def run(args):
    # —— 阶段1 取数:四门店并行 ——
    phase("取数")
    stores = ["望京", "国贸", "中关村", "浦东"]
    stock_data = await map_parallel(
        stores,
        lambda s: agent(build_prompt("取门店库存销量", {"store": s, **args}),
                        label=f"取数-{s}", phase="取数", schema=STOCK_SCHEMA),
    )
    stock_data = compact(stock_data)   # 某店接口超时不阻断其他店

    # —— 阶段2 预测:算缺口 ——
    phase("预测")
    forecast = await agent(
        build_prompt("需求预测", {"stock": stock_data, **args}),
        label="预测", phase="预测", schema=GAP_SCHEMA,
    )

    # —— 阶段3 排序:依赖/冷链校验 ——
    phase("排序")
    ranked = await agent(
        build_prompt("依赖排序", {"gaps": forecast, **args}),
        label="排序", phase="排序", schema=RANK_SCHEMA,
    )

    # —— 阶段4 比价 + 条件审批 + 下单 ——
    phase("比价下单")
    quotes = await agent(build_prompt("供应商比价", ranked), label="比价", phase="比价下单", schema=QUOTE_SCHEMA)
    if total_amount(quotes) > args.get("budget_threshold", 50000):
        log(f"总金额 {total_amount(quotes)} 超阈值 → 进入人工审批")
        review = await agent(build_prompt("超预算审批", quotes), label="审批", phase="比价下单", schema=REVIEW_SCHEMA)
        if extract_json(review).get("verdict") != "通过":
            return {"status": "degraded", "reason": "审批未通过,重派预测"}
    await agent(build_prompt("生成采购单", quotes), label="下单", phase="比价下单", schema=PO_SCHEMA)
    return {"status": "complete", "date": args.get("date")}

这段代码里用到的核心原语都来自 swarmflow 模块:

原语在补货场景的含义
phase("...")阶段标记:取数 / 预测 / 排序 / 比价下单
map_parallel(stores, fn)同构扇出:四家门店同时取数,适合"每家店都做同一件事"
parallel([...])异构并行:比如同时跑预测和供应商资质核查
agent(prompt, label, phase, schema)派一个 Teammate 执行,输出结构化 JSON
compact([...]) / extract_json(...)容错:某门店接口挂了不阻断整轮

工作流跑起来后持续吐出进度事件(workflow_started → phase → agent_started → agent_completed → …),前端协作台上看到的"T3 排序进行中"进度条就是这条事件流驱动的(事件派发表见 workflow_state.py)。

过去要改 ERP 补货规则、等 IT 排期才能调整的逻辑,现在改这段 Python(或改一句自然语言让 Leader 重新生成)就行,补货策略的"柔性"第一次落到可执行代码层


四个角色搞定多门店协调

多门店协调的关键是专业分工:预测、比价、依赖校验、下单各是独立的专业能力,不该揉在一个大程序里。JiuwenSwarm 的 TeamSkill(团队技能) 标准正是为此设计——它用一个固定的五文件结构声明一支多角色团队:

采购 Team Skill 结构与四角色

一个 Team Skill 必须包含五个文件,缺一不可(/teamskills validate 会硬校验):

procurement-team/
├── SKILL.md              # 入口:frontmatter + roles[] 角色清单
├── roles/                # 每个角色一个 <id>.md
│   ├── demand-forecaster.md
│   ├── supplier-scorer.md
│   ├── dependency-checker.md
│   └── order-placer.md
├── workflow.md           # 协作流程(含 mermaid 图 + 质量门控)
├── bind.md               # 并发/预算/失败兜底约束
└── dependencies.yaml     # 依赖的 skills + tools 声明

SKILL.md 的 frontmatter 用 kind: team-skill 声明角色清单(基于仓库文档里的 medical-consultation-team 范例结构,改成采购团队):

markdown
---
name: procurement-team
version: 1.0.0
description: |
  连锁餐饮采购协同团队,调度官组织需求预测、比价、依赖校验并行评估并整合下单。
  Use when 需要为多门店生成每日补货采购计划。
  Do NOT use for 单门店单品的即时零采。
kind: team-skill
roles:
  - id: coordinator
    purpose: 汇总多门店需求、依赖排序、拆单合并、超预算人工审批
    skills: []
    tools: [send_message, create_task]
  - id: demand-forecaster
    purpose: 结合POS销量+天气/节假日预测各SKU需求
    skills: [advanced-daily-report]
    tools: []
  - id: supplier-scorer
    purpose: 比价/评分/交期,从供应商系统拉报价
    skills: []
    tools: [mcp_paid_search]
  - id: dependency-checker
    purpose: BOM替代关系校验 + 冷链约束,排补货优先级
    skills: []
    tools: []
  - id: order-placer
    purpose: 生成采购单并下发ERP/A2A
    skills: []
    tools: [write_file, mcp_exec_command]
---

这里有几个强约束(不满足会被校验器拒):

  • kind 必须是 team-skill(不能写成 type);
  • roles 至少 2 个角色,每个必须有 idpurpose(≤150 字)、skillstools 四个字段;
  • name 用 kebab-case,且要和目录名一致,通常以 -team 结尾。

每个 roles/<id>.md 文件还有 5 个必填段落,这是防止角色"职责重叠"或"偷懒"的关键机制:

  1. ## Identity — 第一行必须是一句座右铭(反趋同机制),比如依赖校验 Agent:> *"我只信冷链温控数据,温度不达标一律拒收。"*
  2. ## Success Criteria — 这个角色达成什么算成功;
  3. ## Boundary — 必须含 **Forbidden**(禁止越界,防止和别的角色抢活)和 **Mandatory**(必须做,防止偷懒);
  4. ## Output Schema — 结构化输出格式;
  5. ## Inline Persona for Teammate — 一段可直接注入的完整 prompt。

这个设计的精妙之处在于:座右铭 + Forbidden/Mandatory 让每个角色都有自己的"性格"和边界,不会所有 Agent 都往一个方向收敛。比如比价 Agent 被 Forbidden 碰下单决策,下单 Agent 被 Forbidden 改报价——各司其职,互不越界。

采购团队的真实配置文件

"组建团队"除了 Team Skill,还有运行时的声明式配置。下面是从仓库 config.team.distributed.leader.yaml 摘出的核心结构,改成采购场景:

yaml
modes:
  team:
    procurement_team:
      team_name: procurement_team
      lifecycle: persistent # 持久团队:记忆跨轮累积(每日补货的关键)
      enable_swarmflow: true # 跑前面的补货工作流
      leader:
        member_name: team_leader
        display_name: 采购调度官
        persona: "资深供应链调度专家,擅长多门店需求合并、食材依赖编排与异常协调"
      memory:
        enabled: true
        auto_extract: true # 每轮结束自动提取团队记忆
        shared_memory: true # 写入 TEAM_MEMORY.md
        member_memory_prompt_mode: "proactive"
  • lifecycle: persistent 是每日补货能"越跑越准"的前提——团队记忆跨轮累积;临时团队(temporary)跑完即散,不留经验。
  • enable_swarmflow: true 让这个团队跑前面那段可执行工作流。

真正让团队跑起来的入口是 SDK 流式执行器(team_helpers.py),Leader 收到目标后用 build_team / create_task / spawn_teammate / send_message 这套团队工具(系统提示约束,见 code_rails.py)去分工推进。


每天补货不用人盯

前面两个能力解决了"怎么补"和"谁来补",但还差一个"谁来触发"。餐饮补货是高频重复的事,不该每天靠人喊一嗓子。JiuwenSwarm 的 cron 定时任务 + 团队记忆 把它变成了真正的无人值守:

cron 定时 + 团队记忆闭环

用 cron 每天 7 点自动唤醒采购团队

仓库的 cron 工具(cron_tools.py,提供 cron_create_job 等 8 个工具)支持以 mode=team 定时拉起一个团队。最自然的方式是直接对话:

/cron add name=每日补货计划 cron_expr="0 7 * * 1-5" \
  description="读取昨日各门店库存与销售,对比安全库存水位,生成今日补货建议清单(含供应商、SKU、数量、预计到货时间)" \
  mode=team targets=feishu

对应到代码里,cron_create_job 的真实参数(节选):

python
input_params = {
    "name": "每日补货计划",
    "cron_expr": "0 7 * * 1-5",        # 工作日早7点
    "timezone": "Asia/Shanghai",
    "mode": "team",                    # 以团队模式运行
    "targets": "feishu",               # 结果推送到飞书
    "wake_offset_seconds": 30,         # 提前30秒唤醒Agent
    "enabled": True,
}

到点后系统在独立 session(cron_{时间戳}_{job_id})里跑一轮采购 Team,结果(采购单 + 异常预警)推送到飞书群。targets 还支持 web/dingtalk/wecom/wechat 等渠道。

每跑一轮,沉淀一次供应链经验

更关键的是右半边的记忆闭环。在 lifecycle: persistent 的团队里,Leader 会在每轮结束时派一个提取 Agent,读本轮的任务记录和团队消息,蒸馏出值得保留的经验,写入 TEAM_MEMORY.mdmemory_tools.py + 团队记忆机制)。记忆分四类标签:

标签含义采购场景举例
[lesson]经验教训:什么有效、什么导致返工"永辉冷链冻品常迟到 2 天,需备安全库存"
[decision]团队决策:为何选 A 不选 B"单笔超 5 万走人工审批"
[member]成员特长:谁擅长什么"比价 Agent 擅长生鲜议价"
[context]业务上下文:约束、截止日"本周三中粮食用油走周合同价,不重新议价"

这些条目跨轮累积、所有成员只读,文件自动保持在 200 行以内(提取 Agent 会合并/更新/淘汰旧条目)。次日 7 点再跑时,比价 Agent 就能读到"永辉爱迟到"的教训,自动给更稳的供应商加权。

这就是"越跑越准"的本质:不是模型变聪明了,而是供应链经验以结构化记忆的形式持续沉淀、自动复用


发票和报价单怎么进来

采购场景还有大量"非结构化输入":供应商发来的报价单 PDF、发票图片、进货单 Excel。JiuwenSwarm 仓库里内置的 financial-document-parser 技能正好能干这事——它用 pdfplumber 解析文本 PDF、用 pytesseract + pdf2image 对扫描件做 OCR 兜底,输出结构化的 Markdown/JSON/CSV:

| 类型 | 格式 | 提取内容 |
| 发票 | PDF | 发票号、日期、供应商、明细、税额、总额 |
| 收据 | PDF/图片 | 商户、日期、商品、金额 |
| 银行对账单 | PDF/CSV | 交易明细、余额、费用 |

在采购 Team 里,可以让供应商比价 Agent 调这个技能解析供应商报价单(allowed_tools: [bash]financial_parser.py),把"牛腱肉 ¥38/kg、起订 200kg"这种信息从 PDF 里抠出来喂给比价流程。它还支持批量处理:

bash
for f in 报价单/*.pdf; do
  python financial_parser.py "$f" --format json
done

这样新供应商发来的报价单不用人工录入,技能自动解析进结构化数据。


每日补货协作台长什么样

每日补货协作台

协作台分三栏,对应本文的三大主题:

  • 左栏 · 多门店库存水位 + 需求预测:四家门店的安全库存水位条(望京店缺口 8 SKU 标红),下方是 T2 需求预测结果(牛腱肉因降温+周末预测+32%、三文鱼因高温预警-12%)。
  • 中栏 · 补货金额走势 + Swarmflow 进度:近 7 天实际补货 vs 预算上限曲线(今日触及预警线),下方是工作流实时进度 T1取数✓ → T2预测✓ → T3排序(进行中)
  • 右栏 · 今日采购单 + 依赖/冷链校验:按依赖排序的采购单 TOP(三文鱼 ¥5.1 万 标 ⚠ 触发超预算审批 H1),下方是 T3 的 BOM/冷链校验日志(牛肉可替牛腱 ✓、三文鱼冷链高温告警 ⚠)。

这张台背后没有"每天手动跑一遍"的操作——所有取数、预测、排序、比价、审批触发,都由 cron 唤醒的采购 Team 自动完成,本轮经验自动写进团队记忆。


落地建议与总结

如果你也想在自家连锁餐饮上落地,建议按这个节奏来:

  1. 先单店跑通一轮补货:1 个 Leader + 2~3 个 Teammate(需求预测 + 比价 + 下单),手动触发验证 Swarmflow DAG 和依赖排序逻辑。
  2. 扩到多门店 + 上 cron:用 map_parallel 并行取数,配 cron_create_job 每日 7 点自动唤醒,结果推飞书。
  3. 开启团队记忆:团队设 lifecycle: persistent,让供应商迟到、替代关系等经验自动沉淀,跑一周后对比补货准确率。
  4. 配好安全策略:超预算、改供应商主数据、首次合作下单等用 ask/deny 卡住人工审批(权限配置见 工具权限与安全防护)。

三句话总结

  • 食材依赖自动排序:Swarmflow 把补货流程变成可执行 DAG,BOM 替代关系 + 冷链约束 + 优先级全自动判断,不再写死在 ERP 里。
  • 多门店协调:采购 Team Skill 声明式定义四角色,座右铭+Forbidden/Mandatory 机制保证各司其职,四店需求自动合并凑起订量。
  • 每日补货无人值守:cron 每天 7 点唤醒 + 团队记忆每轮沉淀,供应链经验越跑越准,真正实现"自动跑、自动学"。

随着 Agent 协同在更多供应链场景落地,"经验驱动 + 自动编排"的采购模式将成为连锁餐饮控本提效的关键——而 JiuwenSwarm 让这条路触手可及。


相关引用

  1. JiuwenSwarm 官网:https://openjiuwen.com
  2. JiuwenSwarm 仓库(GitCode):https://gitcode.com/openJiuwen/jiuwenswarm
  3. 官方文档:
  4. 相关技能:advanced-daily-reportfinancial-document-parserswarmskill-creator

Released under the MIT License.