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

2026-10-05 · 原文发布日

投标决策助手:AI给每个招标打匹配分并解释风险

经常纠结要不要投标的团队可以试试这个n8n模板:招标信息经webhook提交后,先校验标题、截止日期和摘要是否齐全,缺字段直接邮件告知投标经理不进AI;通过的交给名为gpt-6-luna的模型打出0到100的匹配分,给出投、不投或需复核的建议,列出优势、风险、关键要求和截止风险。每个项目记入Google Sheets并邮件通知结果,不投标的也留档说明原因;每周一早上还会汇总14天内到期的在跟项目发提醒。

原文要点

来源给出完整字段:POST webhook路径tender-intake-0925接收tender_title,client_name,due_date,est_value,tender_summary,source_url,bid_manager_email;Normalize生成tender_id=TD+时间戳+四位随机,并trim字段。Validate只查tender_title,due_date,tender_summary,缺失不进AI且邮件列缺项。AI Assess用名为Tender Model的gpt-6-luna返回fit_score,recommendation,strengths,risks,key_requirements,deadline_risk和两句摘要;解析失败默认needs_review/medium,状态Tracking。bid/needs_review写Tracking并邮件,no_bid写No Bid并说明原因。周一cron 0 8 * * 1汇总14天内到期Tracking,错误触发器邮件前2000字符。

这次做成什么

复刻“先校验、再评分、双路留档、周一催办”的投标门禁:用合成招标POST到测试webhook,验证缺字段不进AI;AI只接受严格JSON并在解析失败降级needs_review;Sheets和邮件先用测试副本与草稿箱,gpt-6-luna可用性、邮件收件人和时区回到原模板核对。

准备什么

  • n8n测试环境,可开POST webhook、Schedule、Google Sheets与Gmail测试账号
  • 名为Tender Model的聊天模型凭据;来源称gpt-6-luna,若提供商无此名,换可稳定输出JSON的模型并记录差异
  • Tenders测试表,含tender_id等十三列,先用合成招标数据
  • 投标经理测试邮箱,错误告警独立收件人,均不用真实客户机密

具体怎么做

  1. 建Tenders台账

    Google Sheets测试文件建Tenders,列顺序设为tender_id,tender_title,client_name,est_value,due_date,fit_score,recommendation,status,strengths,risks,key_requirements,deadline_risk,received_at;追加节点只写这十三列。

  2. 配置接收入口

    Webhook设为POST、path用tender-intake-0925的测试副本;Normalize生成tender_id:TD-+yyyyMMddHHmmss+-+0000到9999随机四位,received_at用ISO,七个载荷字段全部trim。

  3. 硬性输入校验

    Validate只检查tender_title,due_date,tender_summary非空;任一缺失直接Email Invalid Tender Notice,正文列出requiredFields与missingFields,状态不落库、不调用模型,避免把垃圾招标计入统计。

  4. AI评分与降级

    通过校验后送评估提示词,要求只返回JSON。Parse节点JSON.parse失败、fit_score越出0-100、recommendation不在bid/no_bid/needs_review时,统一置needs_review、deadline_risk=medium、status=Tracking,并在risks加“模型输出不可解析”。

  5. 按决策分流留档

    Route把no_bid送到Log No Bid Tender,status=No Bid,并邮件说明fit_score、risks和通过原因;其余进Log Tracked Tender,status=Tracking,邮件给fit_score、recommendation、deadline_risk、strengths、risks、key_requirements。

  6. 周一14天催办

    Schedule用cron 0 8 * * 1,先按业务时区核对周一08:00;读Tenders后只留status=Tracking,再筛due_date在未来0到14天。无结果也发一封“本窗口无到期跟踪项目”,避免团队以为流程停跑。

  7. 错误告警

    Error Trigger接Email Error Alert,正文只放错误消息前2000字符和workflow名;测试时用一条故意缺due_date的载荷确认不会触发AI,再用一条坏JSON模型输出确认降级路径。

可直接复制的材料

招标评估提示词

本站独立编写;recommendation与字段名对齐来源描述。

你是投标资格预审助手。只输出一个JSON对象:{"fit_score":0到100整数,"recommendation":"bid|no_bid|needs_review","strengths":["<=3条"],"risks":["<=3条"],"key_requirements":["<=5条"],"deadline_risk":"low|medium|high","summary":"两句中文"}。不得虚构资质,不得因金额大自动bid;截止不足7天deadline_risk至少medium;信息不足用needs_review。招标:{{JSON.stringify($json.normalized)}}

投标合成POST载荷

本站虚构招标;金额为人民币示例,不对应真实项目。

{"tender_title":"园区能耗监测平台二期建设","client_name":"示例城投集团","due_date":"2026-10-23","est_value":860000,"tender_summary":"需做电水气数据采集、告警看板与三年运维,要求具备同类园区案例。","source_url":"https://example.test/tenders/TD-0925","bid_manager_email":"bid.manager@example.test"}

Tenders追加列映射

本站独立映射;三个Sheets节点都要用同一测试spreadsheetId。

{"spreadsheetId":"replace_with_test_sheet_id","tab":"Tenders","columns":["tender_id","tender_title","client_name","est_value","due_date","fit_score","recommendation","status","strengths","risks","key_requirements","deadline_risk","received_at"],"arrayJoinSeparator":"; ","noBidStatus":"No Bid","trackedStatus":"Tracking","weeklyCron":"0 8 * * 1"}

无效招标通知邮件模板

本站示例模板;收件人优先级为payload bid_manager_email,否则用节点备用地址。

主题:招标资料不完整,未进入AI评估。正文:本次提交缺少{{$json.missingFields.join('、')}}。必需字段为tender_title、due_date、tender_summary。请补齐后重新POST到tender-intake-0925测试副本;本条未写入Tenders,也未调用模型。提交内容:tender_title={{$json.tender_title || '空'}},client_name={{$json.client_name || '空'}}。

输入与输出示例

本站虚构演示,非gpt-6-luna结果;输出仅说明字段对应关系。

输入

POST合成载荷:园区能耗监测平台二期建设,截止2026-10-23,估算860000元,摘要要求采集、告警看板、三年运维和同类园区案例;received_at为2026-10-09T10:00:00+08:00。

对应输出

tender_id示例TD-20261009100000-4821;AI输出示意{"fit_score":72,"recommendation":"needs_review","strengths":["场景匹配","金额清晰"],"risks":["案例要求需举证","截止仅14天"],"key_requirements":["同类园区案例","三年运维方案"],"deadline_risk":"medium","summary":"方向匹配但证据要求强。需复核案例与交付排期。"};Tenders写入status=Tracking,周一Digest因距截止14天列入。

做完检查这些

  • 缺tender_summary的POST只收到缺项邮件,Tenders无新增行且模型调用计数为0
  • 合法载荷解析后fit_score在0到100,recommendation只取bid/no_bid/needs_review
  • strengths、risks、key_requirements写入Sheets时用分号连接,读回仍可对齐原数组
  • no_bid行status必须为No Bid,bid与needs_review为Tracking,二者邮件内容不同
  • 周一只列status=Tracking且due_date距运行日0到14天,空窗口也发明确说明

容易卡住的地方

  • gpt-6-luna是来源给出的模型名,不能默认你的提供商存在;无此模型要换并同步修改节点显示名
  • 数组字段直接写表会变逗号或[object],必须join成可读分号文本
  • digest时区错会把周一08:00挪到别的时点,激活前用测试运行看执行时间
  • est_value只用于参考,不应让金额大自动提高fit_score,提示词需明确禁止
  • 模板非付费,但Gmail/Sheets配额、模型调用和域名邮箱送达可能有成本或限制

原文与作者资料 ↗

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

原文标题
Triage tender bid decisions with GPT-6-Luna and Google Sheets
原作者
Khairul Muhtadin
原始发布日期
2026-10-05T10:57:19.287Z
来源
https://n8n.io/workflows/20440