我做了一个能模拟评标专家的 AI,让投标人在交标前预知中标分数
写在前面:本文涉及的所有"分数权重"、"评审规则"、"prompt 模板"都已开源在 Gitee,最后会给地址。文章长 3800 字,10 分钟读完。
一、投标圈的"盲盒期"心结
做过工程投标的人都熟悉这段折磨:
| 时间 | 你在干啥 |
|---|---|
| Day 0 | 招标公告发布,决定要不要投 |
| Day 1-7 | 抢办手续、查资质、协调关键人员证书 |
| Day 8-14 | 编技术标 100+ 页、商务标、报价 |
| Day 14-15 | 截标前 24 小时——彻夜复核、补漏、格式 |
| Day 16 | 截标 → 进盲盒期 |
| Day 17-25 | 开标记录公示,但评标分数和评委评语全部不公开 |
| Day 26-35 | 正式公示中标结果——你才知道排名 |
中间这 10-19 天的盲盒期最折磨人。
更折磨的是:就算公示结果出来,你也只知道排名第 X,不知道差在哪。各家分数细节、评委评语都不公开。下一个项目你接着踩同样的坑。
行业里很多投标人靠惯性投标——这周投了 5 个,估计能中 1 个?连"为什么这 1 个中了、那 4 个为什么没中"都搞不清楚。
二、市面"评分自检"为什么不靠谱
我体验了 5-6 个 AI 标书工具的"评分自检"功能。全部都是关键词覆盖率逻辑:
``javascript // 简化的伪代码 function 评分项自检(招标评分细则, 投标书全文) { for (const 评分项 of 招标评分细则) { const 关键词 = extractKeywords(评分项.描述); const 命中数 = 关键词.filter(k => 投标书全文.includes(k)).length; const 命中率 = 命中数 / 关键词.length; if (命中率 >= 0.8) return '✅ 命中'; if (命中率 >= 0.4) return '⚠️ 部分'; return '❌ 缺漏'; } } ``
这种逻辑的两个致命问题:
问题 1:可被"堆词凑分"骗高分
评分项:"要求承包人具有 BIM 应用能力,提供 BIM 实施方案(满分 5 分)"
提取关键词:['BIM', '应用', '能力', '实施', '方案']
投标书段落(堆词版):
"我方具有完善的 BIM 应用能力,BIM 团队配备齐全。BIM 实施能力满足要求,提供 BIM 实施方案。BIM 应用方案严格按招标要求 BIM 实施。我方 BIM 应用能力强、BIM 实施方案完善。"
5 个关键词每个出现 3-5 次,关键词覆盖率 100%。
但评标专家一看:空话连篇,没有 BIM 实施细节、没有团队成员、没有软件清单、没有项目案例,0 分。
问题 2:忽略"质量"维度
评标专家打分时,关心的不只是"提没提到关键词",更关心:
- 技术方案是否具体可操作(详尽 vs 空话)
- 商务条款是否合理(不夸大 vs 拍胸脯)
- 业绩是否真实贴近本项目(同类型 vs 不相关)
- 进度计划是否可信(按工期反推有依据 vs 拍脑袋)
这些质量维度,关键词覆盖率完全测不出来。
三、我做的"AI 类人评审"是怎么工作的
灵感来自 2025 年 7 月落地的"青天大模型"——合肥市公共资源交易监督管理局联合科大讯飞推出的全国首个公共资源交易 AI 监管系统。它把"评标专家的工作流"抽象成了可被 AI 模拟的逻辑。
我把这套逻辑反过来——同样的方法论给投标人自查用。
1. 三维度独立打分
模拟评标专家的思维过程,不是看关键词,是看综合质量:
``` LLM 系统提示词(简化): 你是一名有 20 年经验的评标专家。请像评审人类专家那样, 从技术响应度、商务合理性、业绩匹配度三个维度独立打分, 每个维度 0-100 分。
判分标准:
- 90-100:完全响应招标要求,方案具体、可操作、有创新
- 75-89:完整响应,方案具体、可操作
- 60-74:基本响应,但缺少细节或可操作性不强
- 40-59:响应不完整,关键点缺失
- 0-39:明显未响应或空话连篇
```
输出 JSON:
``json { "tech_score": 82, "business_score": 78, "perf_score": 75, "composite_score": 80, "overall_grade": "B+", "key_risks": [ "技术方案缺少 BIM 软件具体型号和版本", "组织架构未明确各角色 PM 经验" ], "improvement_priority": [ "补充 BIM 实施细则:软件列表 + 团队成员 + 类似项目案例", "组织架构增加各核心岗位简历摘要" ], "highlights": [ "施工流程图清晰、节点完整", "工期保证措施 + 应急预案具体" ] } ``
2. 权重设定
行业普遍权重:
| 维度 | 权重 | 评什么 |
|---|---|---|
| 技术响应度 | 55% | 方案完整、参数明确、工艺先进、贴合项目 |
| 商务合理性 | 25% | 投标函规范、报价合理、付款条件、工期承诺 |
| 业绩匹配度 | 20% | 公司业绩贴近项目、关键人员资质有效 |
不同行业可调:
- 装饰类:技术 50%、商务 30%、业绩 20%
- 市政公路:技术 60%、商务 20%、业绩 20%
- 政府采购:技术 40%、商务 40%、业绩 20%
3. A/B/C/D 等级判定
为了让用户一眼看懂,把综合分映射到等级:
| 综合分 | 等级 | 含义 |
|---|---|---|
| 90+ | A | 优秀,中标概率高 |
| 80-89 | B+ | 良好,有竞争力 |
| 70-79 | B | 中等,能进合规评审但易被压价 |
| 60-69 | C | 边缘,建议补强后再投 |
| <60 | D | 不合格,不建议直接交标 |
4. 关键的:交叉验证防作弊
光有 AI 类人评审还不够——AI 也可能被"漂亮辞藻"骗高分。
我加了一道关键词覆盖率交叉验证:
``` 关键词覆盖率:92% AI 类人评审综合分:68 两者差距:92 - 68 = 24(远超阈值 15)
→ 触发警告:"建议人工复核" → 原因:覆盖率高但综合分低 → 大概率"堆词凑分" → 系统取较低值定档:用 68 分判等级 = C ```
反过来也成立:
``` 关键词覆盖率:60% AI 类人评审综合分:88 两者差距:88 - 60 = 28(差距大)
→ 触发警告:行文质量好但缺关键术语 → 取较低值:60% → 仍按 C 判定(更稳健) ```
两个分都高才稳,单一指标骗不了。
四、实战:一份投标书的完整评审报告
来看一份真实评审输出(项目和公司名已脱敏):
``` 项目:城南新区滨河公园 1#-3# 住宅楼及配套工程 投标人:xxx 建设集团有限公司
============================================ AI 类人评审报告 ============================================
[综合判定] 综合分:78 等级:B+ 推断中标概率:60-75% 关键判定:基本完整、有改进空间
[三维独立分] 技术响应度:82 (权重 55%) 商务合理性:75 (权重 25%) 业绩匹配度:72 (权重 20%)
[关键词覆盖率] 87%(最高 100%) [评分项命中率] 12 命中 / 3 部分 / 2 缺漏
[交叉验证] 覆盖率 87% vs 综合分 78 → 差 9 → 一致性高 ✓
[关键风险 ×3]
- 工期承诺 720 天 = 招标要求,无承诺优化空间
- BIM 应用方案过于笼统,未列软件型号 + 团队成员
- 业绩列表 5 个项目中,3 个为厂房(非住宅),需在选项目时
优先突出 2 个住宅项目并补充质量奖
[优先改进 ×5(按 ROI 排序)]
- ⭐⭐⭐ 第六章"BIM 应用专项"补充:
- 软件清单(Revit 2024 + Navisworks 2023 + 鲁班) - 团队 6 人(含 BIM 负责人简历) - 1 个同类住宅项目 BIM 应用案例 预期提升:技术分 82 → 88 (+6)
- ⭐⭐⭐ 工期承诺改为 700 天 + 关键节点提前 30 天:
- "深基坑出土"提前 15 天 - "主体结构封顶"提前 20 天 预期提升:商务分 75 → 82 (+7)
- ⭐⭐ 第七章"业绩"重排,把 2 个住宅项目放最前面 +
补充本企业 "xx 杯" 质量奖证书复印件位置标注。 预期提升:业绩分 72 → 78 (+6)
- ⭐⭐ 安全文明施工方案加 "扬尘 PM2.5 < 80 µg/m³" 数字承诺
预期提升:技术分 +2
- ⭐ 应急预案的"突发停电"、"突发停水"加 5 分钟响应时间表
预期提升:技术分 +1
[亮点(保持) ×3]
- 施工流程图清晰、关键节点完整
- 质量保证措施有具体数据指标(合格率 100% / 优良率 ≥85%)
- 主要技术参数与图纸一致,无矛盾点
[预期改进后综合分] 78 → 86 (B+ → A-) [预期中标概率] 60-75% → 75-85%
============================================ 此报告为 AI 模拟评估,不构成中标承诺 实际评分以招标方评标专家组结果为准 ============================================ ```
整份报告 3-5 分钟生成。一份能改进一份——这是评审模式的核心价值。
五、什么场景下"AI 评审"最有价值
场景 1:截标前 24 小时
你写完了,但不确定够不够好。跑一次评审,AI 给你 5-10 条具体改进建议。改完再交标。
¥1-3 投入 → 多几个百分点中标概率——经济账完全划算。
场景 2:复盘失败投标
你刚落选了。把那次的投标 docx 喂进评审模式,看 AI 怎么判分、哪里弱、怎么改。下次投标避坑。
场景 3:教学新员工
公司新来的商务经理,没经验。让他写一遍投标,跑一次评审。AI 替资深评标专家给他"打补丁"——比公司老员工 1v1 教学便宜 100 倍。
场景 4:选择投不投标
接到一个新项目招标,时间紧、不确定能不能竞争得过。先写一个"骨架版本"(30% 完成度),跑评审看综合分。
- 综合分 70+ → 值得投
- 综合分 50-70 → 看资源够不够,可能要补强
- 综合分 < 50 → 直接放弃,去找下一个
六、关于"AI 评审会不会过度依赖 AI"
合理的担忧。我的回答:
1. AI 评审不替代造价工程师 / 法务 / 业务专家终审。 所有评审报告都明确标注"建议人工复核"。
2. AI 评审是"放大镜",不是"判官"。 它帮你看清楚自己标书的薄弱点,不替你"判定输赢"。
3. AI 评审的"分数"是参考值,不是承诺。 每份报告底部都写:"实际评分以招标方评标专家组结果为准"。
4. 长期看,AI 评审会推动整个行业写更好的标书。 当所有投标人都能用 AI 自查 → 大家平均水平提高 → 评标专家也得更严格 → 最终受益的是建设质量。
这是个正向循环。
七、技术细节(给开发者看的)
完整代码:https://gitee.com/smar/bidding-robot
核心 src/agents/expert-scoring.js 约 220 行:
``javascript export async function expertScore(req, bidText, scoreCoverage) { // 1. 构造 prompt const systemPrompt = 你是一名有 20 年经验的评标专家...`; const userPrompt = buildPrompt(req, bidText, scoreCoverage);
// 2. 调用 LLM(JSON 输出模式) const resp = await chat({ system: systemPrompt, messages: [{ role: 'user', content: userPrompt }], temperature: 0.3, // 偏稳定,避免随机性 response_format: { type: 'json_object' }, maxTokens: 4000, });
// 3. 解析 + 安全 fallback let parsed = safeJson(resp.text); if (!parsed) parsed = retryWithSimplifiedPrompt(...);
// 4. 字段校验 + 默认值兜底 return {
tech_score: Number(parsed.tech_score) || 70,
business_score: Number(parsed.business_score) || 70,
perf_score: Number(parsed.perf_score) || 70, composite_score: weighted(parsed), overall_grade: gradeOf(weighted(parsed)),
key_risks: parsed.key_risks || [],
improvement_priority: parsed.improvement_priority || [],
highlights: parsed.highlights || [], usage: resp.usage, }; }
export function crossValidate(scoreCoverage, expert) { const cov = scoreCoverage.summary.coverage_pct; const exp = expert.composite_score; const diff = Math.abs(cov - exp); if (diff <= 8) return { consistency: 'high', verdict: '两项一致,结果可信' }; if (diff <= 15) return { consistency: 'medium', verdict: '结果基本一致' }; return { consistency: 'low', verdict: diff > 15 ? (cov > exp ? '关键词覆盖高但综合分低,疑似堆词骗分,按综合分定档' : '综合分高但关键词覆盖低,疑似缺关键术语,按覆盖率定档') : '一致性中等', }; } ```
八、最后
回到开头那个"盲盒期"心结。
我们做的这个工具不能保证你中标,但能让你少蒙圈。
交标前 24 小时跑一次 ¥1-3 的评审,比中标公示前 2-4 周的焦虑值钱多了。