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

2026-09-28 · 原文发布日

采购单校验机器人会记住历史错误模式

免费n8n模板:webhook收到采购行项目JSON后先做确定性校验(必填字段、数量单价、小计税额计算),再按字段生成模式签名查n8n数据表——若同一错误模式已多次出现且置信高,直接复用存档修正建议跳过AI;否则交Gemini识别品类、编码、单位等语义异常。合并结果后即时返回接受或拒绝的JSON,新错误模式会回写数据表供下次复用。

原文要点

原工作流经webhook接收采购行项目JSON,先做可配置的确定性校验:字段规范化(含单位别名)、必填字段、数量与单价有效性、小计与税额计算容差;再用关键字段生成模式签名查n8n Data Table,若同一错误模式出现次数够多且置信高,直接复用存档修正建议并跳过AI;否则把记录与确定性结果交给Google Gemini识别品类、编码、供应商-物料、单位等语义异常;合并三类结果后即时返回accept/reject的JSON,发现问题时把错误模式(次数、置信度、摘要)upsert回数据表。模板免费,Gemini调用可能另收费。

这次做成什么

在n8n搭一个会积累经验的采购单校验机器人:webhook收行项目JSON,先做确定性校验,再查错误模式库命中则复用历史建议,未命中交Gemini做语义检查,合并后返回接受/拒绝JSON并把新模式写回数据表。原模板无下载文件,以下为本站按原说明独立复刻,字段名沿用原文给出的列表。

准备什么

  • 含Data Table功能与Google Gemini Chat Model节点的n8n实例
  • Google Gemini(PaLM)API凭据,模型与额度以Google当前政策为准
  • 一份采购行项目练习JSON,字段含supplier、item_code、description、category、quantity、unit、unit_price、subtotal、tax_rate、tax_amount、currency
  • webhook生产URL的调用工具(curl或Postman),仅用合成数据测试

具体怎么做

  1. 建数据表与配置

    在n8n新建Data Table命名procurement_error_patterns,列按原文:pattern_key、supplier、item_code、error_type、incorrect_value、suggested_value、reason、occurrence_count、confidence、first_seen、last_seen、source、issue_summary。工作流放Set节点Config:requiredFields列表、defaultCurrency(练习用CNY)、defaultTaxRate(0.13)、subtotalTolerance(0.01)、taxTolerance(0.02)、patternMinOccurrences(3)、patternMinConfidence(0.8)、aiConfidenceThreshold(0.7),均为本站练习默认值,可按采购规则改。

  2. webhook接收与规范化

    Webhook节点设POST,路径如procurement-validate,响应模式选立即返回。接Code节点做规范化:trim字符串、单位别名归一(pcs/个/件→PCS,kg/千克→KG)、数值转Number、缺失currency填默认。输出规范化记录与原始记录两条线供后续签名与展示。

  3. 确定性校验

    同一或下一Code节点依次检查:必填字段非空;quantity>0且unit_price>=0;abs(quantity*unit_price-subtotal)≤0.01;abs(subtotal*tax_rate-tax_amount)≤0.02。每个失败项生成{error_type,field,incorrect_value,suggested_value,reason}加入errors数组,error_type取值如missing_field、bad_quantity、subtotal_mismatch、tax_mismatch。

  4. 模式签名与历史库查询

    Code节点对每个错误生成pattern_key,建议拼接supplier+item_code+error_type并做去空格小写化。用Data Table节点按pattern_key查询:命中且occurrence_count≥3且confidence≥0.8时,把stored的suggested_value与reason并入结果并标记skip_ai=true,走Switch分支跳过Gemini。

  5. Gemini语义检查

    skip_ai=false时进Google Gemini Chat Model节点,用下方材料提示词,传入规范化记录与确定性errors,要求只返回语义异常JSON数组(品类不符、编码格式、供应商-物料不匹配、单位不合理)。Code节点解析并过滤confidence≥0.7的条目并入issues。

  6. 合并决策与回写

    Code节点合并确定性错误、历史命中、Gemini发现:任何issue存在则accepted=false。webhook返回{accepted,issues,source_breakdown}。有issue时用Data Table upsert节点按pattern_key写入:occurrence_count加一、更新last_seen与issue_summary、confidence按练习规则设为min(0.5+0.1*occurrence_count,0.95)——该公式为本站设定,原文只说有置信度未给算法。

可直接复制的材料

Gemini语义异常识别提示词

本站独立编写,{{ }}为n8n表达式;四类语义异常对应原文举例的category、coding、supplier-item、unit。

你是采购数据审核员。下面是一条已规范化的采购行项目和确定性校验结果(数学错误已列出,不要重复报告)。请只识别语义层面的异常:1) category与description不符;2) item_code编码格式与该品类惯例不符;3) supplier与该物料明显不匹配;4) unit单位与物料属性不合理(如液体按件计)。
只输出JSON数组,无异常输出[]:[{"error_type":"semantic_category|semantic_code|semantic_supplier|semantic_unit","field":"字段名","incorrect_value":"原值","suggested_value":"建议值","reason":"40字内","confidence":0到1}]
行项目:{{ $json.recordJson }}
确定性错误:{{ $json.errorsJson }}

采购行项目测试数据(含错误)

本站虚构:小计55与100×0.5=50不符,将触发subtotal_mismatch;单位“个”用于演示别名归一。

{"supplier":"恒信五金","item_code":"HM-0021","description":"六角螺栓 M6x20","category":"fasteners","quantity":100,"unit":"个","unit_price":0.5,"subtotal":55.0,"tax_rate":0.13,"tax_amount":6.5,"currency":"CNY"}

procurement_error_patterns预置练习行

本站虚构合成行,演示高置信复用路径;occurrence_count≥3且confidence≥0.8时跳过AI。

pattern_key,supplier,item_code,error_type,incorrect_value,suggested_value,reason,occurrence_count,confidence,first_seen,last_seen,source,issue_summary
恒信五金|hm-0021|subtotal_mismatch,恒信五金,HM-0021,subtotal_mismatch,55.0,50.0,数量乘单价应等于小计,4,0.9,2026-08-20,2026-09-25,webhook,该供应商此物料小计屡次多报10%

输入与输出示例

本站虚构演示,未实际运行Gemini;按修正后小计复算税额是本站校验顺序设定,实际以你的规则为准。

输入

POST上方测试数据:数量100、单价0.5、小计55.0、税额6.5;库中已有pattern_key“恒信五金|hm-0021|subtotal_mismatch”出现4次、置信0.9。

对应输出

返回示意:{"accepted":false,"issues":[{"error_type":"subtotal_mismatch","field":"subtotal","incorrect_value":55.0,"suggested_value":50.0,"reason":"数量乘单价应等于小计","source":"history_pattern","confidence":0.9}],"source_breakdown":{"deterministic":1,"history":1,"gemini":0},"ai_skipped":true}。税额6.5=50×0.13按正确小计通过;upsert后occurrence_count变5。

做完检查这些

  • 单位“个”进入流程后被归一为PCS,日志中可见别名映射生效
  • 预置行命中时Gemini节点不执行,响应中ai_skipped为true且issue来源标history_pattern
  • 把subtotal改回50.0后重发,accepted应为true且不产生upsert
  • 删除预置行后重发含错数据,流程走Gemini分支,且数据表新增occurrence_count=1的行

容易卡住的地方

  • 原文未提供可下载工作流,本条为按说明复刻,容差与阈值是本站练习默认值
  • 置信度增长公式是本站设定,原文只提到confidence列,未给计算方式
  • pattern_key拼接口径一旦上线不要变更,否则同一错误会生成不同签名导致库失效
  • 确定性校验必须先算清正确小计再校验税额,否则会把连带税额差异重复报错
  • Gemini调用可能产生费用,高置信历史命中跳过AI正是为控制成本

原文与作者资料 ↗

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

原文标题
Validate procurement records and learn error patterns with Gemini and Data Tables
原作者
WeblineIndia
原始发布日期
2026-09-28T09:19:56.918Z
来源
https://n8n.io/workflows/20038