AI PLAY玩法更新持续收录
← 回到更新流

2026-10-07 · 原文发布日

n8n 模板:AI 读库存 Excel 自动算补货量

这个免费 n8n 工作流监听 Google Drive 指定文件夹,一有新的 XLSX 库存报表就下载并逐行读出,分批把每个 SKU 近 45/90/180 天的销量、进货和库存数据发给 GPT-4.1 mini,让它给出每个商品的补货数量和一句土耳其语理由(可改写语言),结果写回表格新增的 AB、AC 两列,保持原行序重新生成 XLSX,更新云端原文件后移入输出文件夹。表格列名需与模板引用的字段一致,系统提示里的品牌名占位符也要换成自己的。

原文要点

该 n8n 模板页标注免费,由 Google Drive Trigger 监听指定输入文件夹中的新 XLSX。流程下载文件、提取行并分批,把每个 SKU 的 45、90、180 天销量和进货量及仓库、门店库存组成紧凑 JSON,交给 OpenAI gpt-4.1-mini。模型为每行返回补货数量和一句土耳其语理由,再写回 AB、AC 两列,按原行序重建 XLSX,先更新 Drive 原文件再移入输出目录。表头需含 KOD、Satis、Giris、DEPO、MKL、SRN、BZK、HTY 等字段,系统提示中的 MARKA ADI 要替换。

这次做成什么

做一个三行 XLSX 练习流:新表进入 Drive 后,按原行号让模型返回 need 和 reason,合并到 AB、AC,更新原文件并移到输出文件夹。示例提示词、数据和合并函数为本站独立设计,不是模板导出的工作流。

准备什么

  • 拥有 Google Drive OAuth2 测试凭据及独立输入、输出文件夹的 n8n 环境
  • OpenAI 账户中可使用 gpt-4.1-mini,调用权限和费用由该账户决定
  • 一份列名与示例完全一致的 XLSX 测试表,AB、AC 两列暂留空
  • 能够接受重建 XLSX 时原工作簿公式、样式或宏可能无法完整保留

具体怎么做

  1. 准备测试工作簿

    新建库存.xlsx,表头依次使用 KOD、Son 45 Satis Miktar、Son 90 Satis Miktar、Son 180 Satis Miktar、Son 45 Giris Miktar、Son 90 Giris Miktar、Son 180 Giris Miktar、DEPO、MKL、SRN、BZK、HTY、AB、AC;填入下方三行虚构数据并上传输入文件夹。

  2. 配置监听和凭据

    Google Drive Trigger 选择输入文件夹和新文件事件,筛选扩展名 xlsx;Download、Update、Move 使用同一 Drive OAuth2。OpenAI 的消息模型步骤选择 gpt-4.1-mini。输入、输出文件夹 ID 和品牌名放入配置。

  3. 抽取并保留行序

    下载触发文件后提取 XLSX 行,为每行添加内部字段 __rowIndex,第一行数据为 0。按较小批次拆分,批次 JSON 同时包含 rowIndex、KOD、销量、进货和各库存字段,不能只按 KOD 对账。

  4. 发送补货提示词

    把下方提示词中的 BRAND_NAME 和 BATCH_JSON 替换后发送。要求模型输出与输入 rowIndex 一一对应的 JSON 数组,need 为非负整数,reason 为一句土耳其语;不得返回额外 SKU 或 Markdown。

  5. 设置失败分支

    解析失败、rowIndex 重复、返回行数不一致或 need 不是非负整数时进入错误分支,保留原文件不更新并记录批次号;校验全部通过才进入合并。重试次数是本练习策略,不是原模板公开参数。

  6. 合并并更新文件

    用下方函数按 __rowIndex 合并,need 写 AB、reason 写 AC,并删除内部行号。确认行数和 KOD 顺序与原表一致后重建 XLSX,先用 Update 写回触发文件,再用 Move 把同一文件放入输出文件夹。

可直接复制的材料

补货计算提示词

本站按原模板行为独立编写;品牌名和批次 JSON 是运行时占位符,土耳其语要求来自原模板说明。

[SYSTEM]
你是 MARKA ADI 的库存补货分析助手;使用前把 MARKA ADI 替换为实际品牌名。只能依据本批次 JSON 中的销量、进货和库存字段估算,不得编造交期、供应商或促销。
[USER]
品牌:{{BRAND_NAME}}
批次数据:{{BATCH_JSON}}
逐行判断未来补货需求。need 必须是非负整数;无需补货时填 0。reason 必须是一句完整土耳其语,不超过35个词,并引用该行的关键销量或库存依据。只输出 JSON 数组,格式为:[{"rowIndex":0,"need":8,"reason":"土耳其语一句话"}]。不得遗漏、增加或重排行。

行序合并函数

通用 JavaScript 合并逻辑,供迁移到所用 n8n Code 节点;不是原模板代码,未声称在本站运行。

function mergeReplenishmentResults(rows, aiResults) {
  const byIndex = new Map();
  for (const item of aiResults) {
    if (!Number.isInteger(item.rowIndex)) throw new Error('rowIndex必须是整数');
    if (byIndex.has(item.rowIndex)) throw new Error('rowIndex重复');
    if (!Number.isInteger(item.need) || item.need < 0) throw new Error('need必须是非负整数');
    if (typeof item.reason !== 'string' || item.reason.trim().length === 0) throw new Error('reason不能为空');
    byIndex.set(item.rowIndex, item);
  }
  return rows.map((row, index) => {
    const rowIndex = Number.isInteger(row.__rowIndex) ? row.__rowIndex : index;
    const result = byIndex.get(rowIndex);
    if (!result) throw new Error('缺少rowIndex=' + rowIndex + '的模型结果');
    const cleanRow = { ...row };
    delete cleanRow.__rowIndex;
    return { ...cleanRow, AB: result.need, AC: result.reason.trim() };
  });
}

练习配置和字段映射

BATCH_SIZE=20 是本站练习值,原说明未给固定值;凭据和文件夹 ID 必须替换,不生成可导入工作流 JSON。

GOOGLE_DRIVE_CREDENTIAL=Google Drive OAuth2测试凭据
INPUT_FOLDER_ID=替换为输入文件夹ID
OUTPUT_FOLDER_ID=替换为输出文件夹ID
OPENAI_CREDENTIAL=OpenAI测试凭据
MODEL=gpt-4.1-mini
BRAND_NAME=ACME HOME
BATCH_SIZE=20
ROW_INDEX_FIELD=__rowIndex
NEED_COLUMN=AB
REASON_COLUMN=AC
REQUIRED_HEADERS=KOD|Son 45 Satis Miktar|Son 90 Satis Miktar|Son 180 Satis Miktar|Son 45 Giris Miktar|Son 90 Giris Miktar|Son 180 Giris Miktar|DEPO|MKL|SRN|BZK|HTY
FIELD_MAPPING=KOD→sku;三个Satis列→sales_45_90_180;三个Giris列→purchases_45_90_180;DEPO,MKL,SRN,BZK,HTY→stock;模型need→AB;模型reason→AC

输入与输出示例

本站虚构演示,未调用 GPT;三个输出的 rowIndex、KOD、AB 和 AC 分别对应三行输入。

输入

KOD,Son 45 Satis Miktar,Son 90 Satis Miktar,Son 180 Satis Miktar,Son 45 Giris Miktar,Son 90 Giris Miktar,Son 180 Giris Miktar,DEPO,MKL,SRN,BZK,HTY\nSKU-001,30,70,150,40,80,160,12,3,4,2,1\nSKU-002,0,2,8,5,5,10,3,1,1,0,0\nSKU-003,90,170,360,80,180,350,8,2,4,3,1

对应输出

[{"rowIndex":0,"KOD":"SKU-001","AB":8,"AC":"Son 45 günde 30 adet satıldı ve toplam 22 adet stok kaldığı için 8 adet yeniden sipariş önerilir."},{"rowIndex":1,"KOD":"SKU-002","AB":0,"AC":"Son 45 günde satış olmadığı için yeniden sipariş gerekmez."},{"rowIndex":2,"KOD":"SKU-003","AB":72,"AC":"Son 45 günde 90 adet satıldı ve toplam 18 adet stok kaldığı için 72 adet yeniden sipariş önerilir."}]

做完检查这些

  • 只有扩展名为 xlsx 的新文件会进入下载和提取步骤
  • 输出表的行数与输入一致,SKU-001、SKU-002、SKU-003 仍按原顺序排列
  • AB 全部为非负整数,AC 全部为一句土耳其语且没有混入 JSON 标记
  • 重复 KOD 存在时仍按 __rowIndex 合并,不会把后一行理由写到前一行
  • 模型 JSON 校验失败时原 Drive 文件不更新,也不会提前移入输出文件夹
  • 成功分支先完成 Update,再执行 Move,输出文件夹中仍能看到 AB、AC 值

容易卡住的地方

  • Satis、Giris、DEPO 等土耳其语表头必须与节点引用一致,不能只翻译列名
  • AB、AC 会被结果覆盖,原表如已有业务数据应先复制到测试文件
  • 批次响应少一行或 rowIndex 从 1 开始时,必须阻止合并而不是猜位置
  • 重建 XLSX 可能丢失宏、复杂公式、筛选器和部分单元格样式
  • 模板页免费不等于模型调用免费,gpt-4.1-mini 权限和费用看 OpenAI 账户
  • Drive 服务账号或 OAuth 用户必须同时有读取输入、更新原文件和移动文件权限
  • 系统提示中的 MARKA ADI 未替换时,输出理由可能出现占位品牌名

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Calculate stock replenishment from Excel reports with Google Drive and GPT-4.1 mini
原作者
Kuzey Aras Sakınç
原始发布日期
2026-10-06T23:41:59.949Z
来源
https://n8n.io/workflows/20577