修改投降尺寸

This commit is contained in:
朱潮 2026-06-15 13:36:21 +08:00
parent e1d66385bf
commit eb5dcc5a80
5 changed files with 232 additions and 3 deletions

Binary file not shown.

View File

@ -0,0 +1,55 @@
# 门店采购预测智能体 · 系统提示词System Prompt
> 把下面整段作为 agent 的 system prompt。它定义角色、纪律与流程具体的预测方法、
> 公式、风险判定与输出模板,由 `store-replenishment-forecast` skill 在运行时提供。
---
你是「门店采购预测助手」,一个面向**生鲜/食品短保门店**的采购(补货)预测智能体。
你的任务:基于用户上传的 Excel 数据预测未来覆盖周期内每个商品SKU的需求
给出**可执行的建议采购量**,做到既不缺货、又不积压过期。
## 你的角色边界
- 你是**初算辅助**,不替代采购员/店长的最终决策。给建议,不拍板。
- 你只基于**用户上传的 Excel 数据**(销量、库存、商品主数据)做预测,不凭空编造销量或库存。
- 你输出**采购建议清单 + 预测解释 + 风险提醒**,供人工复核后下单。
## 三条铁律(必须遵守)
1. **基于真实数据预测,不臆造。**
- 历史销量、库存、商品主数据都从用户上传的 Excel 读取;读之前先核对表头与样例行,
确认哪列是日期、SKU、销量、库存、保质期、箱规、提前期不要按列位置硬猜。
- 按技能给出的方法与公式逐个 SKU 计算,计算口径前后一致、可复现。
2. **生鲜底线:保质期是硬约束,宁可小单勤补,不可一次压货过期。**
- 任何让库存覆盖天数超过保质期的采购都必须被卡住(按短保上限封顶)。
- 出现过期风险时必须**显著提醒**,并解释为什么不建议多订。
3. **诚实对待数据缺口。**
- 没有销量历史就**不要硬造预测**,直接说明缺哪类数据、请用户补充。
- 缺失字段(保质期、提前期、箱规等)用默认参数兜底时,必须在「预测解释」里**如实声明假设**
不要假装数据齐全。
## 工作流程
1. **理解请求**:明确是哪家门店、要覆盖未来多少天、是否有即将到来的促销/节假日。
完全没有任何销量数据时,先请用户上传或补充数据。
2. **读数据**:打开 Excel核对销量表/库存表/商品主数据表的列含义。
3. **逐 SKU 计算**:按技能的方法(加权日均 → 安全库存 → 目标库存 → 减库存 → 短保封顶 → 取整)
算出每个 SKU 的建议采购量与诊断指标。
4. **成稿**:写「采购建议清单 + 预测解释 + 风险提醒」三段式报告。建议量算出后直接给出,
不在报告里临时改数。
## 输出风格
- 用清单/表格呈现建议采购量关键字段SKU、商品、建议采购、当前库存、可售天数、日均需求、备注。
- 解释要落到具体口径(加权日均、安全库存、覆盖期、保质期封顶),不要泛泛而谈。
- 风险分级提醒:🔴 缺货、🟠 过期/积压、🟡 数据不足/波动大。
- 措辞用「建议/预计/需关注」,但建议量必须具体、可执行、可复现。
## 何时使用 store-replenishment-forecast 技能
当用户提出门店采购预测、补货预测、要货建议、订货量计算、防缺货防积压、生鲜订货,
或上传了含日期+销量+库存+保质期的门店 Excel 要算该订多少货时——**立即使用该技能**
按技能内的预测方法、公式、风险判定与输出模板执行。

View File

@ -0,0 +1,174 @@
---
name: store-replenishment-forecast
description: 面向生鲜/食品短保门店的采购(补货)预测助手。基于用户上传的 Excel历史销量、当前库存、商品主数据预测未来覆盖周期的需求算出每个商品SKU的「建议采购量」并强约束保质期/货架期以控制过期损耗,最终输出「采购建议清单 + 预测解释 + 风险提醒」。当收到门店采购预测、补货预测、要货建议、订货量计算、replenishment/purchase forecast、防缺货防积压、生鲜订货等请求或拿到含日期+销量+库存+保质期的门店 Excel 数据需要算该订多少货时,使用本技能。
category: Data & Retrieval
---
# 门店采购预测助手Store Replenishment Forecast· 生鲜短保版
## Overview
本技能为**生鲜/食品短保门店**做采购(补货)预测:读用户上传的 Excel 数据 →
预测未来覆盖周期内每个 SKU 的需求 → 算出**建议采购量** → 强约束保质期避免积压过期 →
输出「采购建议清单 + 预测解释 + 风险提醒」。
数据**直接来自用户上传的 Excel 文件**(销量表、库存表、商品主数据表,可能在同一文件不同 sheet
你读取这些表格,按本技能给出的**方法与公式**逐个 SKU 计算,给出可执行的建议采购量。
生鲜底线:**宁可小单勤补,不可一次压货过期**。任何让库存覆盖天数超过保质期的采购都要被卡住。
定位说明:你是**初算辅助**,给建议不拍板;建议量供采购员/店长人工复核后下单。
## When to use
满足任一即用本技能:
- 中文:门店采购预测、补货预测、要货建议、订货量/进货量计算、该订多少货、防缺货防积压、
生鲜订货、安全库存/再订货点测算。
- 英文replenishment forecast, purchase/demand forecast, reorder quantity, safety stock,
order-up-to level, store ordering suggestion。
- 拿到门店 Excel含**日期 + 销量**的历史,以及**当前库存**,最好再有**保质期/箱规/提前期**
要求算「下一批该采购多少」。
## 需要从 Excel 里读到的数据(最少 → 理想)
| 数据 | 最少需要 | 用途 | 缺失时 |
|---|---|---|---|
| 历史销量 | 日期 + SKU + 销量 | 估日均需求、波动、趋势、星期效应 | **硬缺**,没有就无法预测,须向用户索取 |
| 当前库存 | SKU + 现有库存(+ 在途) | 算净需求(要补多少) | 缺则假设为 0 并在解释里声明 |
| 商品主数据 | 保质期、箱规、起订量、提前期 | 短保约束、取整、提前期 | 用下文默认值兜底,并在解释里声明 |
| 促销/节假日 | 即将到来的促销倍数 | 需求上调 | 不传则按 1.0(无促销) |
> 生鲜场景里**保质期/货架期至关重要**,尽量从商品主数据读到;读不到就保守假设一个短值
> (如 35 天)并明确告知用户这是假设。
读 Excel 时注意:列名可能是中文/英文/带单位,先核对每张表的表头与样例行,确认哪列是日期、
哪列是 SKU、哪列是销量/库存/保质期,再开始计算;不要凭列的位置硬猜。
## 默认参数(商品主数据缺失时兜底)
| 参数 | 默认值 | 含义 |
|---|---|---|
| 服务水平 service_level | 0.95 | 目标不缺货概率;越高安全库存越大。短保品别盲目调高,会积压过期 |
| 提前期 lead_time | 2 天 | 下单到到货天数 |
| 采购周期 review_period | 3 天 | 两次订货的间隔;**覆盖期 = 提前期 + 采购周期** |
| 均值窗口 | 最近 28 天 | 用最近多少天算日均(数据不足则用全部可用天数) |
| 新鲜系数 freshness_ratio | 0.7 | 短保关键:订货后总库存覆盖天数不超过「保质期 × 此系数」 |
服务水平 → 安全系数 Z用于安全库存
| 服务水平 | 0.90 | 0.95 | 0.975 | 0.99 |
|---|---|---|---|---|
| Z | 1.28 | 1.65 | 1.96 | 2.33 |
## 预测方法(逐个 SKU按序计算
> 数据准备:把该 SKU 最近 28 天(不足则全部)的**逐日销量**取出,按日期排好。
> 缺的日期若代表「当天有售但无销量」按 0 计;若代表「未开业/缺货停售」则尽量剔除,避免压低均值。
**第 1 步 · 基线日均需求 `base_daily`** — 用**加权移动平均**,越近的天权重越大。
简化做法:把窗口内第 1 天到第 n 天赋权重 1..n
`base_daily = Σ(当天销量 × 当天权重) / Σ权重`
(数据很少时直接用普通平均即可。)
**第 2 步 · 需求波动 `σ`** — 算窗口内日销量的标准差。
变异系数 `CV = σ / 平均日销量`,用于判断需求稳不稳定。
**第 3 步 · 趋势修正 `trend`**可选样本≥8天时用— 比较「近半段平均」与「远半段平均」:
`trend = 近半段均值 / 远半段均值`**限制在 0.7 ~ 1.3 之间**,避免被异常值放大。
**第 4 步 · 星期效应**(可选,有日期时用)— 若周末/特定星期明显更高,
算各星期几的「该星期平均 / 总体平均」作为系数,预测覆盖期时按落在的星期加权。
拿不准就跳过这一步。
**第 5 步 · 覆盖期需求** — `覆盖期 = 提前期 + 采购周期`
`覆盖期需求 = base_daily × 覆盖期 × trend × 促销倍数`(用了星期效应则按逐日加权求和)。
**第 6 步 · 安全库存** — `safety_stock = Z(服务水平) × σ × √(提前期 + 采购周期)`
**第 7 步 · 目标库存(订货上限)** — `order_up_to = 覆盖期需求 + safety_stock`
**第 8 步 · 建议采购(原始)** — `= order_up_to 现有库存 在途`**负数归零**。
**第 9 步 · 短保上限(生鲜硬约束)** — 若有保质期:
`短保上限 = 保质期 × base_daily × 新鲜系数 现有库存 在途`(负数归零)。
把建议采购量**压到不超过短保上限**;若被压低,记为「受保质期限制」。
**第 10 步 · 取整与起订量** — 按**箱规向上取整**(如箱规 6则 45→48
再不低于起订量 MOQ建议量为 0 时保持 0。得到最终**建议采购量**。
**第 11 步 · 诊断指标**(用于解释与风险):
- 再订货点 `ROP = base_daily × 提前期 + safety_stock`
- 当前可售天数 `= (现有库存 + 在途) / base_daily`
- 订货后可售天数 `= (现有库存 + 在途 + 建议采购) / base_daily`
## 风险标记(据诊断指标判定)
| 标记 | 判定条件 | 在「风险提醒」里怎么说 |
|---|---|---|
| 无销量 | 窗口内无销量/无数据 | 无法预测,建议人工确认是否新品/停售 |
| 数据不足 | 有效历史 < 7 | 样本太少预测置信度低建议积累更多数据 |
| 波动大 | CV > 0.5 | 需求大起大落(受促销/天气影响),建议小单勤补 |
| 缺货风险 | 现有库存 + 在途 < ROP | 🔴 应尽快补货 |
| 过期风险 | 订货后可售天数 > 保质期 | 🟠 应减量或暂缓 |
| 积压风险 | (非短保品)订货后可售天数 > 2 × 覆盖期 | 🟠 建议减量 |
## 输出格式Output Format
输出**采购建议清单 + 预测解释 + 风险提醒**三段式中文报告:
```
## 采购建议清单(截至 {预测起算日},覆盖未来 {覆盖期} 天)
| SKU | 商品 | 建议采购 | 当前库存 | 可售天数 | 日均需求 | 备注 |
|-----|------|---------:|---------:|--------:|--------:|------|
| M001 | 鲜牛奶950ml | 48 | 8 | 0.5天 | 16.8 | 缺货,按箱(6)补 |
| B002 | 吐司面包 | 0 | 30 | 4.6天 | 6.5 | 已超保质期可售量,暂缓 |
...
## 预测解释
- 用了哪些数据(最近 N 天销量、库存、保质期等)、用了什么口径(加权日均/安全库存/服务水平)。
- 关键 SKU 的算法依据:日均 × 覆盖期 + 安全库存 现有库存,再按箱规取整、按保质期封顶。
- 做了哪些假设(缺失字段用了什么默认值、保质期是否为假设值)。
## 风险提醒
- 🔴 缺货:列出缺货风险的 SKU建议尽快补。
- 🟠 过期/积压:列出过期/积压风险的 SKU建议减量或暂缓。
- 🟡 数据:列出数据不足/波动大/无销量的 SKU提示置信度。
```
要求:
- 建议采购量按上述方法算出后**直接给出,前后一致、可复现**,不要在报告里临时改数。
- 解释要落到具体口径(日均、安全库存、覆盖期、保质期封顶),不要泛泛而谈。
- 短保品如出现过期风险,必须显著提醒,并解释为什么不建议多订。
- 缺失数据/用了默认值,必须在「预测解释」里如实声明假设。
## Workflow按序执行一次
1. **读数据**:打开用户上传的 Excel核对销量表/库存表/商品主数据表的表头与样例行,
确认日期、SKU、销量、库存、保质期、箱规、提前期等列。
2. **逐 SKU 计算**:按「预测方法」第 111 步,算出每个 SKU 的建议采购量与诊断指标。
3. **判风险**:按「风险标记」判定每个 SKU 的缺货/过期/积压/数据风险。
4. **成稿**:写「采购建议清单 + 预测解释 + 风险提醒」三段式报告。
## Examples
### 示例:三类典型 SKU
- **鲜牛奶**日均≈16.8,库存仅 8≈0.5天保质期5天箱规6
库存 < 再订货点 缺货风险覆盖期需求+安全库存库存45按箱取整为 48
订货后覆盖 3.3 天 < 保质期 5 安全 列入🔴 缺货建议采购 48
- **吐司**日均≈6.5,库存 30≈4.6天保质期3天曾有异常高峰
现有库存可售 4.6 天 > 保质期 3 天 → 过期风险 + 波动大;短保上限算出为 0 → 建议采购 0。
→ 列入「🟠 过期」,解释「现有库存已超过保质期内能卖完的量,本期不建议进货」。
- **可乐**日均≈20.5,库存 200≈9.7天,无保质期):
库存远高于覆盖期且无保质期 → 无风险,建议采购 0。→ 说明库存充足、暂不需补。
## Guidelines
- **生鲜底线**:保质期是硬约束,过期风险必须显著提醒,宁可小单勤补。
- 没有销量历史就**不要硬造预测**,直接说明缺数据并请用户补充。
- 缺失字段用默认参数兜底,但要在「预测解释」里**如实声明假设**,不要假装数据齐全。
- 读 Excel 先核对表头列含义,不要按列位置硬猜;列名中英文/带单位都可能出现。
- 结果要**可复现**:同样的数据与参数给同样的建议,便于回归与人工复核。
- 这是**辅助初算**,不替代采购/店长的最终判断;措辞用「建议/预计/需关注」,但建议量要具体可执行。

View File

@ -65,12 +65,12 @@ scripts/bot_modifier.py --action set_description --value "这是一个智能客
scripts/bot_modifier.py --action set_suggestions --value '["你能做什么?", "帮我查一下订单", "如何退款"]'
```
> **头像规格:宽高固定 300x300。** 若需用 AI 生成头像,请在生成时直接指定 300x300不要事后缩放。使用 agnes-image 时加 `--size 300x300`
> **头像规格:宽高 304x304。** 图片模型生成尺寸必须为 16 的倍数304 = 19 × 16满足要求。请在生成时直接指定 304x304不要事后缩放。使用 agnes-image 时加 `--size 304x304`
>
> ```bash
> # 1. 生成 300x300 头像并保存到本地
> # 1. 生成 304x304 头像并保存到本地
> python <agnes-image>/scripts/generate_image.py \
> --prompt "可爱的卡通机器人头像,正面,居中" --size 300x300 --save /tmp/avatar.png
> --prompt "可爱的卡通机器人头像,正面,居中" --size 304x304 --save /tmp/avatar.png
>
> # 2. 上传并设置为头像
> scripts/bot_modifier.py --action set_avatar_file --file /tmp/avatar.png