投标卫士:招标文件智能体检·废标风险审查与补遗比对(V1.3.0 应答生成版)
Overview
把"投标前把关"当作一件事、一个入口:对用户提供的招标文件做全量体检,对同一项目的新旧两版做补遗比对,任意材料丢进来,最终都产出一份统一格式的投标前把关报告(红/黄/蓝三级 + 版本变更预警 + 应答清单)。
核心价值:错一处即废标、错看一版即废标、损失动辄数百万。本技能把 20 年投标经验沉淀的规避规则与补遗变化点转成确定性流程,在动笔写标书之前拦截致命错误,杜绝错看旧版漏掉关键变更。
> V1.2.0 版本说明:本版正式合并「体检线」(原 tender-guard,48 条废标规则)与「比对线」(原 tender-diff,34 条变更规则)为同一入口。两条子流程按输入自动路由,各自保留原有确定性步骤,报告由统一生成器输出。
> V1.3.0 变更说明:新增「标书应答草稿生成」(scripts/respond_draft.py)——把 1.2.3 的应答清单从“要准备什么材料”升级为“可直接写进标书的应答正文”:每条实质性条款自动路由四类模板(资格资质/商务条款/技术响应/格式要求),生成【响应声明】草稿全文;附风险分级(绿=可闭卷采用/黄=无法自动路由需人工补正→查漏清单)与红黄蓝统计。审查→查漏→应答生成全链路闭环,纯标准库零联网。
第 0 步:输入路由(先判断走哪条线)
收到用户输入先判定是"单文件体检"还是"两版比对/补遗变更",据此选择子流程:
| 用户给了什么 | 走哪条线 | 说明 |
|---|---|---|
| 只有 1 份招标文件 / 1 段招标公告 | 体检线(流程 A) | 单文件体检定风险 |
| 2 份文件(新旧两版)或补遗/澄清语境 | 比对线(流程 B) | 双版本 diff 抓变更点 |
| 材料 + 补遗混合(一份完整文件 + 补遗/澄清片段) | 先比对 → 再体检 | 先以新版本为准跑 diff,再以「补遗后版本」为体检基准跑 scan |
| 只有补遗/澄清文件 | 比对线(无旧版则缩小范围,见流程 B 降级) | 提示建议提供完整旧版文件 |
| 只有公告、无完整文件 | 体检线(公告层体检) | 做要素提取 + 公告层风险扫描,并提示需完整文件 |
两条线共享同一报告生成器(scripts/generate_report.py),只需按统一 schema 填 JSON。
流程 A:招标文件体检(单文件,48 条废标规则)
第 A1 步:获取招标文件文本
接收用户输入并统一转为纯文本(.temp/ 下建工作目录,中间文件都在其中):
| 输入形式 | 处理方式 |
|---|---|
用 pdf 技能或 pdfplumber 逐页提取文本,保留页码对应关系(输出中每页标记 === 第 N 页 ===) |
|
| Word(.docx) | 用 pandoc 或 python-docx 提取文本,保留章节编号 |
| txt / md | 直接使用 |
| 直接粘贴的招标公告/文件片段 | 存为 .temp/<工作目录>/tender.txt 后走同一流程 |
文件较长时不要跳读:否决条款常藏在"投标人须知""投标文件格式""评标办法"等章节,必须全文过一遍。
第 A2 步:规则扫描(运行脚本)+ 要素提取
python3 scripts/scan_tender.py <招标文件txt路径> --output .temp/<工作目录>/scan_result.json
输出 JSON 包含四类线索(均为"候选",由第 A3 步人工复核分级):
- elements:项目名称/编号、采购人、代理机构、预算、投标截止/开标时间、保证金的候选原文及位置
- substantive_terms:★/▲ 星号条款、"实质性要求""不满足将否决"等标记的候选条款及位置
- risk_keywords:否决词("不予受理""否决其投标""视为无效标"等)命中的上下文
- scoring_hints:评标办法(综合评分法/最低评标价法)与分值权重候选
复核方法:以 risk_keywords 命中点为锚点回读原文章节,结合知识库判定分级。脚本未命中的内容不等于无风险,仍需通读全文复核。
第 A3 步:逐条复核分级 → 体检结论并入统一报告
分级规则(严格执行)
| 级别 | 定义 | 典型情形 |
|---|---|---|
| 🔴 红·废标风险 | 不满足即被否决投标资格或认定为无效标 | 资质门槛不符、实质性(★)条款遗漏/负偏离、密封/份数/签章不合规、逾期送达、保证金金额形式不符、超预算报价、缺少指定证明文件、联合体不合规 |
| 🟡 黄·易失分项 | 不否决但直接扣分的高权重点 | 高分值评分项响应要求被忽略、业绩证明材料不完整、人员证书缺项、演示/样机准备不足 |
| 🔵 蓝·响应建议 | 帮助拿下评分点的写法建议 | 方案结构、关键词覆盖、对照自评表、图表化等得分技巧 |
硬性要求:
1. 每条风险必须引用条款出处(章节号/条款号/页码,如"第一章 3.2 条 / P12")。找不到出处的不要编造,标"出处待人工确认"。
2. 判定依据逐条对照知识库 references/rejection-checklist.md(40+ 条常见情形,按资质/技术/商务/格式程序/报价/时间程序六类)。
3. 涉及星号条款识别与响应话术,查 references/substantive-clauses.md;评分点写法查 references/scoring-strategy.md;货物/服务/工程类及金融行业审查侧重查 references/industry-notes.md。
第 A4 步:生成投标应答清单(1.2.2 新增,可选)
审查完若用户需要"该准备什么材料",从 scan_result.json 生成投标应答清单(形成 审查→生成 闭环):
python3 scripts/respond_checklist.py .temp/<工作目录>/scan_result.json --markdown 应答清单.md
输出:每条实质性条款 → 需准备的应答材料(营业执照/资质/业绩/保证金/技术方案等)+ 动作。材料清单只提示"应准备什么",具体证明由用户按实际资质准备,技能不编造材料、不代替出具证明。
流程 B:补遗比对(双版本,34 条变更规则)
第 B1 步:双版本文本化
接收两版输入并统一转纯文本(在 .temp/ 下建工作目录,中间文件都在其中,不写进技能目录):
| 输入方式 | 处理方式 |
|---|---|
| 版本 A + 版本 B(PDF/Word/txt/md 均可) | 分别转文本;PDF 用 pdf 技能或 pdfplumber 逐页提取并保留页码对应关系(每页 === 第 N 页 ===) |
| 只给一份文件 + 粘贴补遗/澄清文本 | 版本 A = 文件文本;版本 B = 粘贴的补遗内容(补遗是增量,通常只比对新旧重叠章节) |
| 直接粘贴两段文本 | 分别存为 .temp/<工作目录>/v1.txt、v2.txt 走同一流程 |
| 补遗本身含"原文→新文"对照 | 作为强锚点优先提取,不必依赖纯 diff |
> 命名约定:版本 A(旧)→ v1.txt,版本 B(新/补遗后)→ v2.txt。两份文本都必须保留章节编号,diff 才能对齐章节。
第 B2 步:变更提取(运行脚本)
python3 scripts/diff_tender.py v1.txt v2.txt --output .temp/<工作目录>/diff_result.json
输出 JSON 是一组变更候选(每条含 location/old_text/new_text/change_type/impact)。脚本用纯标准库(difflib)做行级/条款级 diff,识别 6 类变更:MODIFIED(改)、ADDED(新增)、DELETED(删除)、TIME(时间/截止)、MONEY(金额/保证金)、WEIGHT(分值/权重/评标办法)。脚本是"候选",最终分级由下一步 Agent 复核。
复核方法:以 diff 输出的 old/new 对照为锚点回读两版章节,结合知识库判定分级。脚本未命中的内容≠无变更,仍需对两版全文通读复核——尤其补遗中常见的"无效化/废止重招"整段替换。
第 B3 步:Agent 复核分级 → 比对报告
分级规则(严格执行,判定依据见 references/change-impact-rules.md)
| 级别 | 定义 | 典型情形 |
|---|---|---|
| 🔴 红·实质性变更 | 直接改变投标策略或构成废标风险 | 投标截止/开标时间变更、保证金(金额/形式/账户)、资质门槛增减、评分权重、★条款收紧/新增、限价、联合体、有效期 |
| 🟡 黄·潜在影响项 | 不废标但需自查响应 | 商务条款、付款条件、交付/工期、人员配置、格式微调、业绩口径 |
| 🔵 蓝·提示项 | 一般性文字修订 | 错别字、措辞、无实质变化的编辑性修改 |
硬性规则:
1. 每条变更必须标注新旧两版出处(如"旧版 P5 第一章 3.2 条 / 新版 P6")。找不到的标"出处待人工确认"。
2. 判定逐条对照 references/change-impact-rules.md(34+ 条:变更字段 → 判定级 → 判断依据 → 常见变体表述)。
3. 识别补遗文件类型参考 references/addendum-types.md;收到实质性变更后的标准动作查 references/response-playbook.md。
统一报告:生成与 JSON Schema
将体检(risks)与比对(changes,可选)结论合并成一份审查结果 JSON,运行统一生成器:
python3 scripts/generate_report.py <审查结果json> --output .temp/<工作目录>/投标前把关报告.html
统一 JSON Schema(generate_report.py 输入)
{
"project": {
"name": "", "code": "", "purchaser": "", "agency": "",
"budget": "", "bid_deadline": "", "open_time": "", "deposit": "",
"evaluation_method": "", "weights": "",
"elements": [{"element": "关键要素", "v1": "旧版值", "v2": "新版值", "changed": true}] // 比对线可选:两版对照
},
"summary": {"red": 0, "yellow": 0, "blue": 0, "overall": "一句话总评"},
"risks": { // 体检线(流程 A)
"red": [{"item": "", "source": "", "risk": "", "advice": ""}],
"yellow": [{"item": "", "source": "", "risk": "", "advice": ""}],
"blue": [{"item": "评分项", "source": "", "score": "", "strategy": ""}]
},
"changes": { // 比对线可选(流程 B);存在则报告多出「版本变更预警」章节
"red": [{"item": "", "old_source": "", "new_source": "", "old_text": "", "new_text": "", "impact": "", "action": ""}],
"yellow": [{"item": "", "old_source": "", "new_source": "", "old_text": "", "new_text": "", "impact": "", "check": ""}],
"blue": [{"item": "", "old_source": "", "new_source": "", "old_text": "", "new_text": "", "note": ""}]
},
"checklist": [{"task": "", "owner": "报价组/标书组/资质组", "note": ""}]
}
project.elements 填两版可对齐的关键要素,changed: true 的行在"两版要素对照"中红底高亮。
checklist 的输入顺序不限:生成器会解析每条 task/note 中的时间表述(YYYY-MM-DD / M月D日 / MM-DD / X日内,X 日内按项目截止日反推)并强制倒序渲染——距投标截止越近排越前,解析不出时限的条目排最后并自动打「⏱ 截止前完成」兜底标签。Agent 无需在复核时手工排序。
报告章节(统一生成器,V1.2.1)
- 风险总览:红/黄/蓝徽章 + 总评(徽章可点击锚点跳转对应章节);若存在
changes追加"版本变更"徽章 - 项目要素总览表:单文件直填;比对场景展示旧版 → 新版两列对照,变更行红底白字
- 🔴 版本变更预警表(仅当存在
changes时出现):旧文 → 新文 → 影响分级 → 应对,红/黄/蓝三个子表 - 🔴 废标风险表:风险点 / 条款出处 / 风险描述 / 规避要点
- 🟡 易失分项表:失分点 / 出处 / 扣分影响 / 补救建议
- 🔵 评分点响应建议表:评分项 / 分值 / 出处 / 得分写法
- 应答准备清单:脚本强制按时限倒序渲染的可勾选 checklist(含负责人建议、补遗响应项;无法解析时限的条目排最后并带「⏱ 截止前完成」兜底标签)
交付时:在对话中给用户红/黄/蓝条数 + 版本变更条数 + 最高优先级 3 条摘要,再给出 HTML 报告路径。
资源清单
| 文件 | 用途 | 何时读取 |
|---|---|---|
scripts/scan_tender.py |
否决词/星号条款/关键要素规则扫描(纯标准库) | 流程 A 第 2 步执行 |
scripts/diff_tender.py |
双版本结构提取 + 行级/条款级 diff → 变更候选(纯标准库) | 流程 B 第 2 步执行 |
scripts/generate_report.py |
统一 JSON → HTML 投标前把关报告(纯标准库;清单强制倒序+兜底标签、徽章锚点跳转) | 生成报告时执行 |
scripts/respond_checklist.py |
扫描结果 → 投标应答清单(1.2.2 新增:实质性条款→所需材料+动作,形成审查→生成闭环) | 需生成应答清单时执行 |
references/rejection-checklist.md |
废标/否决项常见情形清单(40+ 条,六类) | 流程 A 分级复核时通读 |
references/substantive-clauses.md |
星号条款识别、响应话术模板 | 涉及实质性条款时读取 |
references/scoring-strategy.md |
技术/商务/价格分高分写法 | 处理 🔵 项与评分办法时读取 |
references/industry-notes.md |
货物/服务/工程类及金融行业审查差异 | 开工前按项目类型读取 |
references/change-impact-rules.md |
变更影响分级规则(34 条:字段→级别→依据→变体) | 流程 B 分级复核时通读 |
references/addendum-types.md |
补遗/澄清/修改文件类型全览 | 识别补遗文件类型时读取 |
references/response-playbook.md |
收到实质性变更后的标准动作清单 | 遇到🔴变更、生成响应清单时读取 |
使用限制与免责声明(必须在报告和回复中带上)
- 本技能提供的是辅助性风险提示与变更提示,不构成评标结论或法律意见,不代替投标人自行核对与正式评审程序。
- 招标文件的澄清、修改、补遗以采购人/代理机构书面文件为准;比对基于用户提供的两版文本,若与正式文件不一致,以正式文件为准。
- 涉及资质、财务、法律重大判断时,建议用户咨询专业机构复核。
- 严禁帮助用户围标、串标、陪标或伪造资质/变更材料;所有应对动作仅限合规应答策略。
输入不足时的处理
- 只有公告没有完整文件:正常做要素提取 + 公告层风险扫描,并明确提示"建议提供完整招标文件(含投标须知、格式要求、评标办法)以完成全部审查"。
- 只有新版本(补遗后)+ 记得旧版内容:按粘贴的旧版片段/要点做缩小范围比对,并提示"建议提供完整旧版文件以完成全部章节比对"。
- 文件/补遗为扫描件(无文本层):提示用户先用 OCR(pdf 技能或 paddleocr-doc-parsing 技能)处理后重新提供。