中标全景门户扩容 Skill
用途
用户给出时间段、企业名单和搜索模式,自动完成:调研 → 校验合并 → 全局校验 → 交付。支持任意行业主题。
输入格式
直接输入或文件输入均可,基本格式:
⚠️ 单次最多 10 家企业。超过 10 家时自动分批,提示用户确认。
主题 水利信息化企业
输出标签 山脉科技分析
202601-202606 AAAAA公司 地方龙头企业 ADD
202601-202606 BBBBB公司 信息化央企 ADD
202601-202606 CCCCC公司 地方小企业 ALL
字段说明
| 行类型 | 格式 | 必填 | 说明 |
|--------|------|------|------|
| 主题行 | 主题 XXX | 否 | 行业/领域名称,用于文件名和页面标题。缺失时从现有门户文件名推断 |
| 输出标签行 | 输出标签 XXX | 否 | 指定后输出该企业的专项分析标签页。缺失则不输出企业分析标签 |
| 数据行 | 时间段 企业名 分组 模式 | 是 | 每行一家企业,四列:时间段、企业全称、分组名、ADD|ALL。分组必须是 7 大分组之一,或新自定义分组 |
分组可选列表(如未指定则从企业名推断):水利部所属企事业单位、省市所属企事业单位、信息化央企、主板上市企业、水利行业区域性企业、地方龙头水利企业、地方小企业
搜索模式
| 模式 | 含义 | |------|------| | ADD | 增量搜索:在现有数据基础上补充新中标记录,保留旧数据 | | ALL | 全量搜索:清除该企业旧数据,用新搜索结果完全替换 |
时间段转标签
| 输入 | 输出 | |------|------| | YYYY01-YYYY06 | YYYY上半年 | | YYYY07-YYYY12 | YYYY下半年 | | YYYY01-YYYY12 | YYYY全年 | | 其他 | 保持原样 |
文件命名规则
- 门户文件:
{主题}{时间段标签}中标全景.html - 页面标题(Hero):
{主题}{时间段标签}中标全景 - Hero 副标题:
{时间段中文描述} · {主题}中标全景 - 搜索关键词:从主题提取核心词(如"水利信息化企业"→"水利信息化")
执行流程(5 阶段)
阶段一:解析输入
- 提取主题:有
主题 XXX行则用之;否则从工作区现有 HTML 文件名推断(正则匹配{主题}YYYY上半年/下半年中标全景.html);都没有则询问用户 - 提取时间段 → 转中文标签 + 搜索描述(如
202601-202606→2026上半年+2026年1月至2026年6月) - 提取企业分析标签:有
输出标签 XXX行则记录目标企业和标签名 - 解析企业名单 + 搜索模式:每行拆分为
(时间段, 企业名, ADD|ALL) - 为每家企业分配元数据:
id:拼音首字母缩写,确保全局唯一不与现有冲突name:短名 ≤6 字(从全称截取)short:单字简称loc:省/市(从企业名推断,如"北京恒润安"→北京)tag:≤12 字描述(根据企业类型推断)group:归属分组之一(见"分组体系")color+accent:从色板轮换,不与现有重复
- 确认目标 HTML 文件路径
阶段二:并行调研
搜索方法论根因分析(⚠️ 必读,2026-07-28 血泪复盘)
用户指出中水三立实际中标约 1.8 亿,但搜索仅找到 1.5 亿,遗漏约 3000 万。更严重的是,经多源交叉验证后发现:不仅中水三立有遗漏,其他三家企业的数据也未经充分验证。用户原话:"你能不能让人相信,敢不敢相信。"
之前的根因分析说"项目名称不含企业简称所以搜不到"——这是错误的、荒谬的分析。项目名称本来就不应该包含中标企业名称(那才是不正常的),这不是遗漏的原因。以下是系统性的五层根因分析:
根因 1:从未使用专业中标数据库作为参照基准
这是最根本的问题。 存在专业中标聚合数据库(如千里马招标网、标信通等),可以一页列出某企业的全部中标记录(日期+项目名+招标方+金额),是天然的完整性参照基准。但搜索过程中从头到尾没有查阅任何一个专业数据库。
正确做法:搜索前先通过搜索引擎 + 专业数据库(千里马招标网、标信通等)建立预期项目数和金额基准,搜索后用多源交叉验证,发现遗漏立即补搜。黑名单限制的是 link 字段(不使用聚合站 URL 作为来源链接),但可以、也必须使用聚合站数据做交叉参照。
根因 2:仅依赖通用搜索引擎(WebSearch)作为唯一数据源
WebSearch 是搜索引擎的封装,返回按 PageRank 排序的结果,不按中标日期或金额排序。搜索引擎对地方公共资源交易中心的公告页面索引覆盖率低、索引滞后。一条在省级公共资源交易中心发布的中标公告,可能要数周甚至数月后才被搜索引擎收录,且搜索排名靠后。
WebSearch 每次返回 10-20 条结果,即使翻 5 页也只有 50-100 条,其中大量是重复/无关内容。而一家半年中标 20-30 个项目的企业,其公告分散在十几个不同省份的采购平台,通用搜索引擎无法穷尽覆盖。
根因 3:无搜索后完整性验证机制
搜索完成后,结果没有与任何外部基准对比。"完整性检查"仅要求"≥3 条就认为正常"——这对半年应中标 20+ 个项目的企业来说标准太低。没有"找到的项目数/金额 vs 预期基准"的覆盖率计算,没有低于阈值自动触发补搜的机制。
根因 4:缺少反向搜索维度
只从企业名出发搜索("企业名+中标/成交/客户名/技术词"),缺少从招标方反向搜索的维度。应该同时搜索主要客户/招标方的采购公告页面,看该客户发布了哪些中标公告,其中是否有目标企业。
根因 5:Agent 搜索行为不可控且无法验证
Agent 声称"搜了 6 轮"、"看了 5 页",但实际可能只搜了 3 轮、看了 2 页就停止。Agent 的搜索行为无法从输出 JSON 验证——只看到最终结果,看不到中间过程。缺少 Agent 必须输出的搜索行为报告(执行了哪些搜索词、每个词看了几页、覆盖了哪些平台)。
搜索策略:参照基准 → 多维搜索 → 交叉验证
原则:搜索前建立参照基准 → 多维度穷尽搜索 → 搜索后用专业数据库交叉验证。三步缺一不可。
Phase 0:参照基准建立(搜索前必做)
在启动调研 Agent 之前,为每家企业建立预期基准:
- 多源查询:通过以下渠道搜索企业全称+简称,汇总该企业在目标时间段的中标记录作为参照基准:
- 搜索引擎(必应/百度):搜索
企业全称 中标,提取前三页的公开中标记录列表 - 专业中标数据库:如千里马招标网、标信通等
- 天眼查/企查查中标记录页(可部分预览)
- 搜索引擎(必应/百度):搜索
- 记录基准值:基准项目数 = 多源汇总去重后的项目数;基准总金额 = 去重后各项目金额之和
- 注意金额校准:聚合站有时将多包项目的总金额归到每个中标方名下,需交叉验证实际中标金额
- 如多源均无该企业数据:以"企业名+中标"的第一轮粗搜结果作为临时基准
⚠️ 参照基准的作用:不是用来替代搜索引擎搜索(因为聚合站金额可能不准、链接不是原始公告),而是用来验证搜索结果的完整性——如果搜索引擎找到了 12 个项目但基准有 22 个,说明覆盖率只有 55%,必须补搜。
A. 多维度关键词搜索(至少 10 轮)
每家企业必须覆盖以下搜索维度,合计至少 10 轮搜索:
| # | 维度 | 关键词模板 | 说明 | 示例 |
|---|------|-----------|------|------|
| 1 | 企业名+中标 | 企业全称 中标 / 企业简称 中标 | 最直接搜法 | "中水三立数据技术 中标" / "中水三立 中标" |
| 2 | 企业名+成交/采购 | 企业全称 成交公告 / 企业简称 采购 | 覆盖不同阶段公告表述 | "中水三立 成交公告" / "中水三立 采购" |
| 3 | 企业名单独搜索 | 企业全称(不加"中标") | 补漏不使用"中标"措辞的公告 | "中水三立数据技术股份有限公司" |
| 4 | 企业名+已知主要客户名 | 企业简称 + 客户名 | 反向搜索维度:从客户名查企业 | "中水三立 南水北调" / "中水三立 水利部" / "中水三立 淮河" |
| 5 | 企业名+技术/领域词 | 企业简称 + 技术关键词 | 技术性项目名可能很长 | "中水三立 信创" / "中水三立 PLC" / "中水三立 数字航道" |
| 6 | 企业名+省份名 | 企业简称 + 省份 | 覆盖跨省项目,31省全覆盖 | "中水三立 湖南" / "中水三立 河南" |
| 7 | 企业名+重点城市名 | 企业简称 + 城市名 | ⚠️ 新增:主动覆盖 20 座水利投资密集城市 | "中水三立 成都" / "中水三立 武汉" |
| 8 | ctbpsp 法定平台 | WebFetch bulletin.cebpubservice.com 搜企业全称 | ⚠️ P0 必搜:法定义务发布平台 | 直接 WebFetch 搜索页 |
| 9 | 行业/央企采购平台 | 按企业类型定向 | 水利行业平台 + 央企采购平台 | WebFetch cweun.org / ecp.sgcc.com.cn / b2b.10086.cn |
| 10 | ⭐ 多源交叉验证 | 对比 Phase 0 多源基准列表 | 最关键的完整性保障 | 见 Phase 0 |
B. 多平台覆盖(全国搜索,不限于企业所在地)
⚠️ 核心原则:企业在哪个省注册 ≠ 只在那个省中标。如中水三立(安徽)可能在全国 31 省都有中标项目。搜索绝不限于企业所在省份,必须全国覆盖。
不能只搜一个平台,至少搜索以下渠道:
| # | 渠道 | 覆盖范围 | 搜索方式 | 优先级 |
|---|------|---------|---------|--------|
| 1 | 中国招标投标公共服务平台 | ⚠️ 全国法定公告 | bulletin.cebpubservice.com / ctbpsp.com 搜索企业全称。法律地位最高——所有依法招标项目(≥400万工程/≥200万货物服务)必须在此公告。⚠️ 每条企业必搜渠道,不能遗漏 | P0 必搜 |
| 2 | 必应/百度 | 全国通用 | WebSearch,多关键词组合 | P0 必搜 |
| 3 | 全国公共资源交易平台 | 全国 31 省聚合 | ggzyjyw.gov.cn 搜索企业名 | P1 推荐 |
| 4 | 中国招标投标网 | 全国法定公告 | chinabidding.com 搜索企业名。与 ctbpsp 互补覆盖,不完全重叠 | P1 推荐 |
| 5 | 各省公共资源交易中心 | 31 省逐省覆盖 | ⚠️ 不限于企业所在省份。用 WebSearch 搜索 企业简称 + 省份名 + 中标,31 个省份逐一覆盖。重点关注水利投资大省:广东、江苏、浙江、山东、河南、湖北、湖南、四川、安徽、新疆 | P0 必搜 |
| 6 | 重点地市级公共资源交易中心 | 水利投资前 20 城市 | ⚠️ 从被动补搜升级为主动搜索。对每家企业,主动搜索 企业名 + 城市名 + 中标,覆盖以下 20 座水利投资密集城市:成都、武汉、郑州、长沙、广州、合肥、南宁、乌鲁木齐、兰州、西宁、昆明、贵阳、南昌、太原、石家庄、济南、哈尔滨、沈阳、呼和浩特、拉萨 | P0 必搜 |
| 7 | 水利行业专属平台 | 水利部/流域委 | 水利部电子招标投标交易平台(直属项目采购)、中国水利工程协会(cweun.org)(行业招投标)、各流域管理机构采购平台(长江委、黄河委、淮河委、海河委、珠江委、松辽委、太湖局) | P1 推荐 |
| 8 | 中国政府采购网 | 全国政府采购 | ccgp.gov.cn 搜索企业名 | P1 推荐 |
| 9 | 大型央企/国企采购平台 | 央企自采 | 信息化央企和大型企业的增量覆盖渠道。按企业类型定向搜索:中国电建采购平台、中国能建电子采购平台、国家电网电子商务平台(ECP)、中国移动采购与招标网(b2b.10086.cn)、南水北调集团采购平台(nsbd.cn)、中国联通采购平台、中国电信阳光采购网、中国铁塔采购平台 | P1 推荐 |
| 10 | ⭐ 专业中标聚合数据库(参照) | 全国聚合 | 千里马招标网、标信通等(参照基准,非来源链接) | P1 推荐 |
⚠️ 省份覆盖策略:维度 6(企业名+省份名)搜索时,必须覆盖全部 31 个省级行政区,不能只搜企业所在省份。可按以下优先级分批搜索:
- 第一批(水利投资大省,必搜):广东、江苏、浙江、山东、河南、湖北、湖南、四川、安徽、新疆
- 第二批(补充覆盖):河北、山西、内蒙古、辽宁、吉林、黑龙江、福建、江西、广西、海南、贵州、云南、陕西、甘肃、青海、宁夏、西藏、北京、上海、天津、重庆
搜索引擎技巧(提升搜索精度)
搜索引擎使用时有以下技巧,可大幅提高命中率和召回率:
| 技巧 | 语法 | 示例 | 场景 |
|------|------|------|------|
| 站内搜索 | site:域名 关键词 | site:gov.cn 中水三立 中标 | 限定只搜政府网站 |
| 标题限定 | intitle:关键词 | intitle:中标 中水三立 | 只搜标题含"中标"的页面 |
| 时间范围 | 搜索引擎时间筛选 | 限定时间范围与目标时间段一致 | 排除过期结果 |
| 精确匹配 | "企业全称" | "中水三立数据技术股份有限公司" | 避免搜索引擎分词误匹配 |
| 排除词 | -关键词 | 中水三立 -招聘 -天眼查 | 排除干扰结果 |
| 组合搜索 | 多种语法嵌套 | site:gov.cn intitle:中标 "中水三立" | 精准命中 |
⚠️ 百度和必应差异:百度对中国地方平台覆盖更好(尤其是省市交易中心的分站),必应对
.gov.cn索引更全。两者互补使用,不能只搜一个引擎。
关键平台 URL 速查
| 平台 | URL | 说明 |
|------|-----|------|
| 中国招标投标公共服务平台 | bulletin.cebpubservice.com / ctbpsp.com | ⚠️ 法定义务发布,P0 必搜 |
| 中国招标投标网 | chinabidding.com | 全国法定公告,与 ctbpsp 互补 |
| 全国公共资源交易平台 | ggzyjyw.gov.cn | 31省聚合入口 |
| 中国政府采购网 | ccgp.gov.cn | 全国政府采购 |
| 水利工程协会 | cweun.org | 水利行业招投标 |
| 国家电网 ECP | ecp.sgcc.com.cn | 电力水利信息化项目 |
| 中移动采购与招标 | b2b.10086.cn | 移动信息化项目 |
| 南水北调集团采购 | nsbd.cn | 南水北调信息化项目 |
客户清单推导方法(系统化"客户官网"搜索)
不再模糊说"搜企业主要客户官网"——改为从数据推导客户清单:
- Phase 0 基准提取:从多源参照基准中,汇总该企业常见的招标方(buyer)列表
- 行业特征推断:根据企业分组(如信息化央企→央企采购平台;水利施工→水利部/流域委)推断典型客户
- 客户采购平台定向搜索:针对 TOP5 客户,搜索
客户名 + 采购平台或客户名 + 招标公告,找到其发布采购公告的自有平台 URL,然后在该平台搜索企业名 - 典型客户清单(按企业类型):
- 信息化央企:南水北调集团、水利部、各流域委、各省水利厅、国家电网、中电建、中能建
- 水利施工企业:各市水利局、水务集团、各省水利投资公司
- 监测预警企业:各省水文水资源中心、各流域管理机构、各地市应急管理局
C. 并行调度策略
输入限制:单次最多 10 家企业。超过 10 家时提示用户分批输入。
并行规则:
- 1-2 家企业:主 Agent 直接搜索,不需要子 Agent
- ≥3 家企业:必须启动多个子 Agent 并行工作,每家企业分配一个独立子 Agent
- 子 Agent 类型:使用
Agent工具,subagent_type: "general-purpose",run_in_background: true - 每个子 Agent 负责一家企业的完整调研流程(Phase 0 参照基准 → 7 维度搜索 → 完整性验证)
- 所有子 Agent 并行执行,主 Agent 等待全部返回后汇总
调度示例(5 家企业):
主 Agent 解析输入 → 为 5 家企业分别建立 Phase 0 参照基准
→ 同时启动 5 个子 Agent(每个负责 1 家)
→ 5 个子 Agent 并行搜索(各跑 7 维度)
→ 全部返回后逐个验证覆盖率
→ 不达标的触发补搜
→ 汇总合并
D. 地市级公共资源交易中心(⚠️ 主动搜索,非被动补搜)
全国有 334 个地级市,逐个搜索不现实。但大量市县项目只在地市级平台发布,不上传省级平台,搜索引擎也未必及时收录。仅靠"线索驱动补搜"会遗漏大量项目。
策略升级:从"线索驱动被动补搜"升级为主动覆盖重点城市:
-
重点城市主动搜索(必做):对每家企业,用 WebSearch 搜索
企业简称 + 城市名 + 中标,主动覆盖以下 20 座水利投资密集城市:- 成都、武汉、郑州、长沙、广州、合肥、南宁、乌鲁木齐、兰州、西宁
- 昆明、贵阳、南昌、太原、石家庄、济南、哈尔滨、沈阳、呼和浩特、拉萨
-
线索驱动补充:以下情况追加搜索:
- 多源基准中发现某市项目线索(如"XX市水利局")但找不到原始公告链接
- 项目名中出现非重点城市名 → 定向搜索该市公共资源交易中心
-
操作方式:
- WebSearch:
企业简称 + 城市名 + 中标公告(每城市一轮) - 或直接 WebFetch 该城市公共资源交易中心网站搜索(URL 格式通常为
{城市拼音}ggzy.gov.cn或ggzy.{城市缩写}.gov.cn)
- WebSearch:
E. 搜索结果穷尽
每个 Agent 必须看完至少前 5 页搜索结果(50+ 条),不要只看第一页就停止。大客户/技术词维度的搜索结果可能出现在第 3-5 页。
F. ⚠️ 回归校验(ALL 模式必做)
当 ALL 模式重搜某企业时,必须执行以下回归校验:
- 读取旧数据:在启动调研 Agent 前,读取该企业上一版的 JSON 数据文件(如
zssl_data.json),提取项目列表和总金额作为基准 - 对比新 vs 旧:Agent 返回新数据后,逐条比对:
- 旧数据中的项目是否都在新数据中?(按项目名模糊匹配)
- 新数据项目数 ≥ 旧数据项目数?(允许因去重/日期过滤略减,但减幅 ≤ 20%)
- 新数据总金额 ≥ 旧数据总金额 × 0.9?(允许小幅波动,但不应大幅缩水)
- 补搜触发条件(任一满足即补搜):
- 旧数据中有项目在新数据中找不到匹配(按项目名关键词 ≥ 60% 相似度匹配)
- 新数据项目数 < 旧数据项目数 × 0.8
- 新数据总金额 < 旧数据总金额 × 0.9
- 补搜策略:针对丢失的项目,用"企业名+该项目关键词"定向搜索,确保找回
G. 大单专项交叉验证
调研完成后,额外执行一轮大单专项搜索:
- 搜索
企业简称 + 千万 / 大标 / 大额中标 - 检查是否存在 ≥ 500 万但未在结果中的项目
- 如发现遗漏,立即补录
Phase 2.5:搜索后完整性验证(必做,Agent 返回数据后)
Agent 返回 JSON 数据后、合并到门户之前,必须执行完整性验证:
- 对比 Phase 0 基准:将 Agent 返回的项目列表与 Phase 0 建立的多源基准列表逐条比对
- 计算覆盖率:
- 项目覆盖率 = 已找到的项目数 / 基准项目数
- 金额覆盖率 = 已找到的总金额 / 基准总金额
- 补搜触发条件(任一满足即必须补搜):
- 项目覆盖率 < 80%
- 金额覆盖率 < 80%
- 基准列表中有 ≥ 500 万的项目未在搜索结果中找到
- 补搜策略:
- 从基准列表中提取遗漏项目的关键信息(项目名、招标方、金额)
- 用"企业名+遗漏项目关键词"定向搜索,找到原始公告链接
- 通过搜索引擎用"企业名+遗漏项目关键词"定向搜索,找到原始公告链接
- 验证报告:补搜完成后,输出覆盖率报告:
企业:中水三立数据技术股份有限公司 基准项目数:22 / 基准总金额:约18000万(多源汇总) 搜索找到:18个 / 15200万 覆盖率:项目 82% / 金额 84% 补搜后:22个 / 18000万 覆盖率:项目 100% / 金额 100%
Agent prompt 关键约束
发给每个调研 Agent 的 prompt 必须包含以下完整内容:
你正在调研企业【企业全称】在【搜索描述】期间的中标记录。
## 参照基准(已知信息)
根据多源查询汇总,该企业在该时间段内预计有约【X】个中标项目,总金额约【Y】万元。你的搜索结果必须覆盖至少 80% 的项目和金额。如果你找到的项目数或金额远低于基准,必须继续搜索。
【此处列出多源基准列表中的项目名+金额,供 Agent 参照对比】
## 搜索要求(必须穷尽搜索)
### 搜索平台(10 大渠道,缺一不可)
⚠️ 以下渠道按优先级排列,P0 标注的渠道每条企业必搜,不可跳过:
| 优先级 | 渠道 | 搜索方式 |
|--------|------|---------|
| **P0** | ctbpsp.com | WebFetch `bulletin.cebpubservice.com` 搜索企业全称 |
| **P0** | 必应/百度 | WebSearch `"企业全称" 中标`、`intitle:中标 企业简称`、`site:gov.cn 企业简称 中标` |
| **P0** | 31 省公共资源交易中心 | WebSearch `企业简称 + 省份名 + 中标`,各省逐一覆盖,不限于企业所在省 |
| **P0** | 重点 20 城市 | WebSearch `企业简称 + 城市名 + 中标`,覆盖成都/武汉/郑州/长沙/广州/合肥/南宁/乌鲁木齐/兰州/西宁/昆明/贵阳/南昌/太原/石家庄/济南/哈尔滨/沈阳/呼和浩特/拉萨 |
| P1 | chinabidding.com | WebFetch `chinabidding.com` 搜索企业全称 |
| P1 | 水利行业平台 | 水利部电子招标投标交易平台、cweun.org、各流域委采购平台 |
| P1 | 央企采购平台 | 按企业类型定向:中电建/中能建/国网ECP/中移动b2b/南水北调nsbd |
| P1 | ccgp.gov.cn | WebFetch `ccgp.gov.cn` 搜索企业名 |
| P1 | 千里马/剑鱼等数据库 | WebSearch `site:qianlima.com 企业名` 等 |
| P1 | 客户采购平台 | 从 Phase 0 客户清单推导,定向搜索 TOP5 客户的自有采购平台 |
### 搜索引擎技巧(必须使用)
- `site:gov.cn "企业全称" 中标` — 只搜政府网站,排除商业聚合站
- `intitle:中标 企业简称` — 只搜标题含"中标"的结果
- `"企业全称"` — 精确匹配,避免搜索引擎分词误匹配
- `企业简称 -招聘 -天眼查 -企查查` — 排除干扰结果
- ⚠️ 百度对中国地方平台覆盖更好,必应对 .gov.cn 索引更全。两者互补使用
### 搜索维度(10 个维度,缺一不可)
维度1 - 企业名+中标:
"企业全称 中标" / "企业简称 中标" / "企业简称 中标公告"
维度2 - 企业名+成交/采购:
"企业全称 成交公告" / "企业简称 采购" / "企业全称 招标"
维度3 - 企业名单独搜索(不加"中标"):
"企业全称"(补漏不使用"中标"措辞的公告)
维度4 - 企业名+已知主要客户名:
搜索 "企业简称 + 客户名" 组合。已知主要客户包括:
【此处列出该企业已知的主要客户/招标方,如南水北调集团、水利部、各省水利厅等】
示例:"中水三立 南水北调" / "中水三立 水利部" / "中水三立 淮河"
维度5 - 企业名+技术/领域词:
搜索 "企业简称 + 技术关键词" 组合。技术关键词包括:
信创 / PLC / 数字孪生 / 数字航道 / 智慧水利 / 自动化 / 闸站监控 /
监测预警 / 数据治理 / 劳务外包 / 运维 / 四预 / 水利信息化
示例:"中水三立 信创" / "中水三立 PLC" / "中水三立 数字航道"
维度6 - 企业名+省份名(⚠️ 全国31省覆盖,不限于企业所在省):
搜索 "企业简称 + 省份" 组合。企业可能在全国任何省份中标,不限于注册地。
必须覆盖全部 31 个省级行政区,分两批搜索:
第一批(水利投资大省,必搜):广东、江苏、浙江、山东、河南、湖北、湖南、四川、安徽、新疆
第二批(补充覆盖):其余 21 个省级行政区
示例:"中水三立 湖南" / "中水三立 河南" / "中水三立 新疆" / "中水三立 广东"
维度7 - 企业名+重点城市名(⚠️ P0 必搜,20 座城市):
搜索 "企业简称 + 城市名 + 中标",主动覆盖 20 座水利投资密集城市:
成都、武汉、郑州、长沙、广州、合肥、南宁、乌鲁木齐、兰州、西宁、
昆明、贵阳、南昌、太原、石家庄、济南、哈尔滨、沈阳、呼和浩特、拉萨
示例:"中水三立 成都 中标" / "中水三立 武汉 中标"
维度8 - ctbpsp 法定平台(⚠️ P0 必搜):
直接 WebFetch `bulletin.cebpubservice.com` 搜索企业全称。
这是国家发改委主管的法定招标公告发布平台,地位高于任何省级平台。
所有依法必须招标的项目(≥400万工程/≥200万货物服务)必须在此公告。
维度9 - 行业/央企采购平台(按企业类型定向):
水利行业平台:水利部电子招标投标交易平台、cweun.org、长江委/黄河委/淮河委采购平台
央企采购平台(如适用):国家电网ECP(ecp.sgcc.com.cn)、中移动采购(b2b.10086.cn)、
中电建采购平台、中能建电子采购平台、南水北调集团(nsbd.cn)
搜索方式:WebFetch 平台搜索页搜企业全称
维度10 - 参照基准对比(必做):
将搜索结果与上面的参照基准列表逐条对比。
基准列表中有但你没搜到的项目,用"企业名+该项目关键词"定向补搜。
确保覆盖率 ≥ 80%,否则继续搜索。
### 搜索深度
- 每轮搜索必须看完前 5 页结果(50+ 条),不能只看第一页
- 每条搜索结果都点进公告详情页核对,不能只看摘要
- P0 渠道(ctbpsp/必应百度/31省/20城)每条企业必搜,不可跳过
- 搜索引擎使用语法技巧:`site:gov.cn`、`intitle:中标`、`"企业全称"` 精确匹配、`-招聘 -天眼查` 排除干扰
- 百度对中国地方平台覆盖更好,必应对 .gov.cn 索引更全,两者互补使用
### 链接精确
每条记录 link 必须是具体公告页 URL(含公告 ID),不能是:
- 搜索引擎结果页 / 列表页 / 聚合页
- 公司主页(天眼查/企查查/爱企查公司页)
- 电梯中标网 / 水利招标网 列表页 / 其他中标聚合页
### 类型鉴别
中标候选人公示 ≠ 中标结果公告。非第一候选人 → 不录入
### 数据完整
每条记录必须有:项目全名(name)、省份(prov)、金额(amt)、日期(date)、来源链接(link)
### 金额格式
万元为单位,非数值写作"未披露"。注意:聚合站可能将多包项目总金额归到每个中标方名下,必须交叉验证实际中标金额(点开原始公告页核对)。
### 去重
同名同金额记录只保留信息最完整的一条
### 输出格式
严格 JSON 数组,每条记录包含所有字段,可被 json.loads() 解析
### ascii 直引号
项目名中所有 " → 替换为「」
### 完整性报告(必须在 JSON 中包含)
在 JSON 输出中增加 "coverage_report" 字段:
```json
{
"company_info": {...},
"项目列表": [...],
"coverage_report": {
"baseline_count": 22,
"found_count": 18,
"missing_projects": ["项目名1", "项目名2"],
"project_coverage": "82%",
"amount_coverage": "84%",
"search_rounds_executed": 10,
"p0_channels_searched": ["ctbpsp", "bing+baidu", "31provinces", "20cities"],
"p1_channels_searched": ["chinabidding", "cweun", "ecp.sgcc.com.cn", "ccgp.gov.cn"],
"platforms_searched": ["ctbpsp", "bing", "baidu", "ccgp.gov.cn", "ggzyjyw.cn", "cweun.org", ...]
}
}
#### 数据输出格式
每条记录:
```json
{
"name": "完整项目名称",
"prov": "省/直辖市简称(河北/北京/上海...)",
"buyer": "招标单位全称",
"winner": "中标单位全称",
"amt": 123.45,
"date": "2026-06-15",
"type": "tag-xx",
"typeText": "中文类型",
"status": "status-done",
"statusText": "中标结果",
"link": "https://具体公告页URL",
"linkText": "来源平台简称(如'全国公共资源交易平台')"
}
搜索质量自检
Agent 完成搜索后,必须自问:
基础质量:
- [ ] 搜索结果是否覆盖了该时间段内该企业的所有中标项目?
- [ ] 是否搜了全部 10 个维度?
- [ ] P0 渠道检查:ctbpsp 是否搜索?必应和百度是否都用了?31 省是否全覆盖?20 重点城市是否全部搜过?
- [ ] 是否看了至少前 5 页搜索结果(共 50+ 条)?
- [ ] 是否每条记录都点进了公告详情页验证?
- [ ] 是否使用了搜索引擎语法技巧(site:/intitle:/精确匹配/排除词)?
- [ ] 是否排除了所有黑名单链接?
- [ ] 是否识别并排除了非第一候选人公示?
- [ ] 输出的 JSON 能否被 json.loads() 直接解析?
- [ ] prov 无"未知"、name 无空串?
⚠️ 全国省份+城市覆盖验证(必做):
- [ ] 维度 6 是否覆盖了全部 31 个省级行政区(不限于企业所在省)?
- [ ] 水利投资大省(广东/江苏/浙江/山东/河南/湖北/湖南/四川/安徽/新疆)是否全部搜索?
- [ ] 维度 7 是否主动覆盖了 20 座水利投资密集城市(不限于企业所在地市)?
- [ ] 如发现某省/某市有项目但未搜到原始公告,是否定向补搜了该省/地市级公共资源交易中心?
⭐ 参照基准验证(必做,Phase 0 + Phase 2.5):
- [ ] 搜索前是否通过多源查询(搜索引擎+专业数据库)建立参照基准?
- [ ] 是否记录了基准项目数和基准总金额?
- [ ] 搜索后是否将结果与基准逐条对比?
- [ ] 项目覆盖率是否 ≥ 80%?金额覆盖率是否 ≥ 80%?
- [ ] 基准中 ≥ 500 万的项目是否全部找到?(未找到的必须补搜)
- [ ] 是否输出了覆盖率报告(found_count / baseline_count / coverage%)?
⚠️ 回归校验(ALL 模式必做):
- [ ] 是否读取了该企业上一版 JSON 数据作为基准?
- [ ] 旧数据中的每个项目是否都能在新数据中找到匹配(按项目名关键词 ≥60% 相似度)?
- [ ] 新数据项目数 ≥ 旧数据项目数 × 0.8?
- [ ] 新数据总金额 ≥ 旧数据总金额 × 0.9?
- [ ] 如有项目丢失,是否已用"企业名+该项目关键词"定向补搜找回?
⚠️ 大单交叉验证:
- [ ] 是否额外执行了"企业简称 + 千万/大额"大单专项搜索?
- [ ] 所有 ≥ 500 万的项目是否都已收录?
- [ ] 如发现遗漏的大单,是否已补录?
如任一答案为"否",补搜直到全部满足。
阶段三:数据校验 + 合并
3.1 数据质量校验(合并前)
逐条检查新数据,不合格的修正或丢弃:
- prov 不为空:从项目名或链接域名推断省份(如
cq.gov.cn→重庆,hlj.gov.cn→黑龙江)。prov 不能为"未知" - name 不为空:项目名称不能为空字符串
- link 有效性验证:
- 排除聚合平台:天眼查公司页、企查查岗位页、水利招标网列表页、爱企查、电梯中标网
- 逐条点开验证:随机抽查至少 20% 的链接,确保能正常打开且内容匹配
- 链接不能是 404/空白页/重定向错误页
- 金额合理:数字或
"未披露",不能是奇怪字符串。金额数值不能为 0(除非真实披露为 0) - 去重:按
(项目名, 金额)元组去重,同名同金额保留信息更完整的一条 - ⭐ 完整性验证(Phase 2.5,必做):将搜索结果与 Phase 0 多源参照基准逐条比对。计算项目覆盖率和金额覆盖率。覆盖率 < 80% 或基准中 ≥ 500 万的项目缺失 → 必须补搜。补搜后仍无法找到的项目,必须显式告知用户并说明原因
- ⚠️ 回归校验(ALL 模式必做):读取该企业上一版 JSON 数据,逐条比对旧数据中的项目是否都在新数据中。如有项目丢失(按项目名关键词 ≥60% 相似度匹配),用"企业名+丢失项目关键词"定向补搜找回。补搜后仍未找回的项目,必须显式告知用户并说明原因
- ⚠️ 大单交叉验证:额外搜索"企业简称 + 千万/大额",确保所有 ≥500 万的大项目均已收录
3.2 合并
⚠️ 禁止手动编辑 HTML。必须运行
scripts/rebuild_portal.py脚本完成合并,不能自己用 Edit 工具或正则表达式修改 HTML——手动编辑极易引入 JS 语法错误,导致首页 Hero 以下空白。
执行步骤:
-
准备配置:编辑
scripts/rebuild_portal.py的配置区,填入:THEME、PERIOD、WORKSPACE、PORTAL_LABEL、SEARCH_DESCNEW_DATA_FILES:调研 Agent 输出的 JSON 文件路径SEARCH_MODE:每家企业 ADD 或 ALLNEW_COMPANIES_ORDER:新企业全名列表NEW_COMPANY_CONFIG:新企业元数据(id/name/short/loc/tag/group/color/accent)ANALYSIS_TAB:如有企业分析标签,填入 {"cid": "标签名"}
-
运行脚本:
cd "{WORKSPACE}" && python scripts/rebuild_portal.py -
检查脚本输出:确认输出中的
[INFO]行没有[ERROR]或[WARN]。关键输出行:[INFO] 现有企业数: X, 项目数: Y[INFO] 合并后: N家企业, M个项目, Z万元[INFO] 已生成: {路径}
-
⚠️ 重建后 HTML 完整性验证(必须在阶段四之前执行):
- 检查
<script>标签是否完整(不会被</script>中途截断) - 检查
const ALL_DATA是否存在且有数据 - 检查
const COMPANY_META是否存在且条目数 = 企业总数 - 检查
renderFilterBar()是否在初始化代码中被调用 - 检查
.maindiv 和.filter-bar-wrap是否完整保留 - 用
python -c "import json; html=open('{HTML_FILE}','r',encoding='utf-8').read(); ..."验证 JS 数据段可解析
- 检查
⚠️ 如果重建后验证失败(脚本报错、HTML 截断、JS 语法错误),不允许直接交付。必须回滚到备份文件,定位根因后重新执行。
阶段四:全局一致性校验
合并后必须全部通过,任一不通过则定位修复后重新校验全部:
| # | 校验项 | 检查方式 |
|---|--------|---------|
| 1 | ALL_DATA 条目数 = COMPANY_META 条目数 | grep -c "ALL_DATA\[" 对比 COMPANY_META.length |
| 2 | "prov":"未知" = 0 | grep -c '"prov":"未知"' |
| 3 | "name":"" = 0 | grep -c '"name":""' |
| 4 | 无同名+同金额重复 | Python 脚本遍历检查 |
| 5 | Hero 三数 = 实际计算值 | Python 脚本求和验证 |
| 6 | GLOBAL_TOTAL_AMT/PROJ = 实际计算值 | Python 脚本求和验证 |
| 7 | MAX_COUNT = COMPANY_META.length | grep 检查 |
| 8 | 页面标题 = {主题}{时间段标签}中标全景 | grep 检查 <title> 和 Hero h1 |
| 9 | 企业分析标签(如有)企业数 = COMPANY_META.length | grep 检查,确保动态取值 |
| 10 | ⭐ JS 代码完整性 | 验证 <script> 标签未被截断;const ALL_DATA/COMPANY_META 语法正确;renderFilterBar() 和 renderCards() 在初始化中正常调用 |
| 11 | ⭐ HTML 结构完整性 | 验证 .main、.filter-bar-wrap、#cardsGrid、.detail-section 等核心 DOM 元素完整存在 |
阶段五:视图验证 + 交付
确认所有视图正常工作:
| 视图 | 关键验证点 | |------|-----------| | 企业卡片 (全部) | 卡片数 = 企业数,按金额降序 | | N 个分组标签 | badge 统计正确,组内过滤正确 | | 企业搜索框 | 输入企业名/省份可正确过滤 | | 企业详情页 | 项目列表按金额降序,排序/筛选正常 | | 千万大单 | 阈值 ≥1000 万,统计卡片+表格正确 | | 五百万大单 | 阈值 ≥500 万,统计卡片+表格正确 | | 省份排名 | 31 省排名正确,"未知"不参与 | | 省份企业排名 | 各省 TOP10 企业+份额进度条正确 | | 企业专项分析 | 仅当指定"输出标签"时存在,全部动态计算。必须包含:核心指标(7卡片)、区域分布、业务类型分布、月度趋势、项目规模分布、核心客户分析、SWOT战略分析、TOP10项目、战略营销发展建议(6条)、综合评估 | | 市场行情分析 | 必须包含:核心指标(6卡片)、市场集中度分析(CR1/CR2/CR4/HHI/市场结构判定)、竞争梯队(头部/腰部/尾部)、区域市场分析(含蓝海/红海标注)、业务赛道分析、月度趋势、战略洞察与建议(6条)、市场综合研判 |
完成后:追加工作日志 → present_files 展示 HTML → 汇总报告
可配置项
分组体系(默认 7 组,可自定义)
默认适用于水利信息化行业。其他行业可根据实际情况自定义分组名和图标:
| 默认 group | 含义 | 图标 | |-------------|------|------| | 水利部所属企事业单位 | 水利部直属科研院所/企业 | 🏛️ | | 省市所属企事业单位 | 省市级水利设计院/企业 | 🏢 | | 信息化央企 | 信息化类央企/国企 | 💻 | | 主板上市企业 | A 股上市的水利信息化企业 | 📈 | | 水利行业区域性企业 | 流域委/区域性水利机构 | 🏞️ | | 地方龙头水利企业 | 区域性水利信息化龙头企业 | 🐉 | | 地方小企业 | 规模较小的水利信息化企业 | 🏪 |
自定义时:在输入中增加 分组 分组A,分组B,分组C 行即可覆盖默认。
类型标签(默认 12 类,可自定义)
| 标签 | 含义 | |------|------| | tag-jk | 监测预警平台 | | tag-yw | 系统运维/实施方案 | | tag-sw | 数字孪生/模型构建 | | tag-sj | 数据治理与集成应用 | | tag-sb | 设备采购安装 | | tag-ny | 农业信息化 | | tag-sy | 小流域四预能力建设 | | tag-kz | 自动化控制 | | tag-zh | 智慧水务/综合 | | tag-kf | 软件开发 | | tag-qt | 其他服务 | | tag-wl | 网络/管线探测 |
自定义时:在输入中增加 类型 标签A=含义A,标签B=含义B 行即可覆盖默认。
颜色色板(10 色轮换,避免与现有企业重复)
| # | color | accent | |---|-------|--------| | 1 | #2563eb | #3b82f6 | | 2 | #0891b2 | #06b6d4 | | 3 | #d97706 | #f59e0b | | 4 | #dc2626 | #ef4444 | | 5 | #7c3aed | #8b5cf6 | | 6 | #059669 | #10b981 | | 7 | #db2777 | #ec4899 | | 8 | #ea580c | #f97316 | | 9 | #4f46e5 | #6366f1 | | 10 | #0d9488 | #14b8a6 |
数据格式
公司元数据
{"id":"拼音缩写","name":"短名≤6字","short":"单字","full":"企业全称","loc":"省市","tag":"≤12字描述","group":"分组名","color":"#hex","accent":"#hex"}
中标记录
{"name":"项目名称","prov":"省份简称","buyer":"招标方","winner":"中标方","amt":金额或"未披露","date":"YYYY-MM-DD","type":"tag-xx","typeText":"中文类型","status":"status-done","statusText":"中标结果","link":"具体公告URL","linkText":"来源简称"}
无效链接黑名单(用于 link 字段,不作为来源链接输出)
以下网站 URL 不能作为 link 字段输出到门户 HTML(因为它们不是原始公告页)。但其中部分可用作参照数据库(见下方):
tianyancha.com/company/— 天眼查公司主页qcc.com/cjoblist/— 企查查岗位页slzb.net/winner/— 水利招标网中标列表aiqicha.com/— 爱企查dtzbw.com/— 电梯中标网聚合页- 任何不带具体公告 ID 的列表/搜索/主页 URL
⭐ 参照数据库(用于完整性验证,非来源链接)
以下数据库 可以且必须 用于搜索前建立基准和搜索后完整性验证,但其 URL 不能 作为 link 字段输出:
| 数据库 | 用途 | 搜索方式 | 特点 |
|--------|------|----------|------|
| 千里马招标网 | 招标/中标信息聚合 | 搜索引擎 site:qianlima.com 企业名 | 覆盖面广 |
| 剑鱼标讯 | 中标信息聚合 | jianyu360.com 搜索企业名 | 水利行业覆盖好 |
| 乙方宝 | 中标信息聚合 | yfb360.com 搜索企业名 | 移动端友好 |
| 标信通 | 中标信息聚合 | 搜索引擎 site:biaoxintong.com 企业名 | 更新快 |
| 中国采购与招标网 | 中标信息聚合 | chinabidding.com.cn 搜索企业名 | 老牌平台 |
| 采招网 | 中标信息聚合 | bidcenter.com.cn 搜索企业名 | 聚合覆盖广 |
| 天眼查(中标记录页) | 企业中标记录 | 需登录,可部分预览 | 最完整但需付费 |
⚠️ 关键区分:黑名单限制的是 link 字段(门户中点击跳转的链接必须是原始公告页),但参照数据库的数据(项目名、金额、日期)可以用于交叉验证。两者不矛盾。
去重策略
- 全局按
(项目名, 金额)元组去重 - 同名同金额 → 重复,保留信息更完整的一条
CSS 布局约定
宽度对齐(关键)
页面从上到下三层结构:.hero(渐变标题区,全屏宽度)→ .filter-bar(白色 sticky 标签栏)→ #mainContent(内容区)。
关键规则:
.hero:width: 100%(全屏宽度,深蓝渐变背景撑满),内部.hero-content设max-width: 1080px; padding: 0 24px; margin: 0 auto约束内容宽度.filter-bar:max-width: 1080px; margin: 0 auto+sticky(白色标签栏约束宽度,与 hero-content 和下方 main 对齐)#mainContent:max-width: 1080px; margin: 0 auto; padding: 24px(卡片内容区宽度与标签栏一致)
⚠️ 三个可感知内容区域的 max-width 必须一致(均 1080px):
.hero-content、.filter-bar、#mainContent。修改其中一个时,必须同步修改其余两个。
首页标签栏结构
由 renderFilterBar() 动态生成:
行1: [全部] [搜索框]
行2: [分组1 图标] [分组2 图标] ... [分组N](按总金额降序,自适应换行)
行3: [📋 五百万大单] [💰 千万大单] [🏆 省份排名] [📍 省份企业排名] [企业专项分析(可选)] [📈 市场行情分析]
- 行3中"企业专项分析"标签仅当用户指定
输出标签时才出现,否则不渲染 - 所有 badge 统计均为动态计算
- ⚠️ 分组标签 badge 格式:必须同时显示家数和金额,格式为
X家 · ¥X.X亿(或X家 · ¥XXX万)。groupSums已计算amt/count/companies三个字段,badge 中用s.companies + '家 · ' + fmtAmt(s.amt)拼接。不能只显示家数——用户需要直观看到每个分组的中标总额 - ⚠️ 企业分析标签按钮注入方式:必须用 JS 条件判断
if (ANALYSIS_CID) { html += '<button ...>📊 ' + ANALYSIS_TAB_NAME + '</button>'; },不能用 Python f-string 直接插值裸 HTML。裸 HTML 在 JS 代码中不是合法语句,会导致按钮不渲染。详见references/js_snippets.md
⚠️ 分析深度要求(必须遵循)
用户要求企业分析和市场行情分析必须从数据市场分析的角度,指标全面,有指导性,图文并茂。不能只是简单统计+文字描述,必须有战略洞察和可执行的建议。
一、企业专项分析(renderCompanyAnalysis)深度要求
当用户指定 输出标签 时,renderCompanyAnalysis() 必须输出以下完整模块(顺序即为渲染顺序):
模块 1:核心指标卡片(≥7 个)
中标总额、中标项目数、市场份额、市场排名、覆盖省份、平均单笔、大单占比(≥500万)
模块 2:区域分布 + 业务类型分布(双栏并列)
保留现有柱状图,按金额降序排列
模块 3:月度趋势
保留现有柱状图
模块 4:项目规模分布(⭐ 新增)
- 按金额分 4 档:千万级(≥1000万)、五百万级(500-1000万)、百万级(100-500万)、百万以下(<100万)
- 柱状图展示每档金额和项目数
- 显示大单占比和大单金额贡献率
模块 5:核心客户分析(⭐ 新增)
- 按 buyer 字段聚合,取 TOP8 客户
- 显示客户名称、金额柱状图、占比
- 计算前 3 大客户集中度(top3BuyerPct),>60% 标注"集中度较高"
模块 6:SWOT 战略分析(⭐ 新增,核心要求)
2×2 网格布局,四个象限颜色区分(绿/红/蓝/橙),每象限至少 3-5 条要点,全部从数据动态推导:
| 象限 | 数据来源 | 推导逻辑 | |------|---------|---------| | 💪 优势(S) | 排名、份额、大单比、均值对比 | 排名靠前、份额高、大单多、均值高于市场 | | ⚠️ 劣势(W) | 区域集中度、客户集中度、类型集中度、均值对比 | topProv>50%、top3Buyer>50%、topType>60%、均值低于市场 | | 🌟 机会(O) | 市场总量、未覆盖省份/类型、增长趋势 | 市场大但份额低、有未进入省份/类型、月度环比增长 | | 🔴 威胁(T) | 竞争对手、集中度、政策风险 | 头部企业份额高、CR2>60%、区域/客户集中风险 |
⚠️ SWOT 内容必须从实际数据推导,不能是泛泛而谈的模板文字。例如"区域集中度高:安徽占比72%"比"需要加强区域拓展"有说服力得多。
模块 7:重点项目 TOP10
保留现有表格
模块 8:战略营销发展建议(⭐ 新增,核心要求)
6 条建议,每条包含:编号、标题、优先级标签(优先级/重要/常规)、详细描述。建议必须从数据推导:
| # | 建议主题 | 触发条件 | 数据依据 | |---|---------|---------|---------| | 1 | 区域拓展策略 | topProvPct>50% → 优先级 | 区域集中度数据 | | 2 | 客户多元化策略 | top3BuyerPct>50% → 优先级 | 客户集中度数据 | | 3 | 大项目突破策略 | companyAvg<marketAvg → 重要 | 均值对比数据 | | 4 | 业务结构优化策略 | topTypePct>60% → 重要 | 类型集中度数据 | | 5 | 竞争定位与差异化 | 始终输出 → 重要 | 排名和份额数据 | | 6 | 风险防范策略 | 始终输出 → 常规 | 各项集中度数据 |
模块 9:综合评估(⭐ 新增)
蓝色渐变背景的深度洞察框,6 条结构化评估:企业概况、市场地位、区域特征、业务重点、客户结构、项目规模
二、市场行情分析(renderMarketAnalysis)深度要求
renderMarketAnalysis() 必须输出以下完整模块:
模块 1:核心指标卡片(≥6 个)
市场总额、项目总数、企业总数、覆盖省份、平均单笔、大单占比(≥500万)
模块 2:市场集中度分析(⭐ 增强)
- CR1/CR2/CR4 三级集中度
- HHI 赫芬达尔指数(所有企业份额平方和)
- 市场结构判定:HHI≥2500→高集中度(寡头)、1500-2500→中等集中度、<1500→低集中度(分散竞争)
- 企业份额柱状图
模块 3:竞争梯队(⭐ 新增)
按市场份额分三层,每层一张卡片:
- 🥇 头部企业(≥15%)
- 🥈 腰部企业(5%-15%)
- 🥉 尾部企业(<5%)
- 如果只有 1 家头部,则第 1 家归头部,其余归腰部
模块 4:区域市场分析(⭐ 增强)
- 保留省份排名柱状图
- 新增蓝海/红海标注:每省显示参与企业数
- 仅 1-2 家企业覆盖 → 蓝海(绿色标注)
- ≥3 家企业覆盖 → 红海(红色标注)
- 统计蓝海省份数量和红海省份数量
模块 5:业务赛道分析(⭐ 增强)
- 保留类型排名柱状图
- 每行增加市场份额占比
- 说明大单主要分布领域
模块 6:月度趋势
保留现有柱状图
模块 7:战略洞察与建议(⭐ 新增,核心要求)
6 条建议,每条包含:编号、标题、优先级标签、详细描述:
| # | 建议主题 | 内容要求 | |---|---------|---------| | 1 | 市场结构研判 | HHI 指数解读、集中度分析、大单效应 | | 2 | 区域市场策略 | 蓝海/红海分析、重点省份建议 | | 3 | 业务赛道选择 | 核心赛道分析、高增长方向建议 | | 4 | 竞争策略建议 | 梯队分析、各梯队策略 | | 5 | 大项目战略 | 大单数量/金额贡献率、大项目追踪建议 | | 6 | 趋势研判与风险提示 | 月度趋势、政策红利、风险预警 |
模块 8:市场综合研判(⭐ 新增)
蓝色渐变背景的深度洞察框,5 条结构化研判:市场总量、竞争格局、区域特征、业务结构、大单效应
三、技术实现约定
findCidByWinner(winner)辅助函数:通过 winner 字段匹配企业 id(搜索 name/full/short),用于市场分析中省份企业覆盖统计buyerData聚合:在 renderCompanyAnalysis 中按p.buyer字段聚合客户数据sizeBuckets分档:千万级/五百万级/百万级/百万以下 4 档hhi计算:所有企业份额平方和(份额用百分比数值,如 45.2 → 45.2²)- SWOT/建议内容全部从数据动态推导,使用条件判断(如
if (parseFloat(topProvPct) > 50))生成不同内容 - 新增 CSS 类:
.swot-grid/.swot-quadrant/.strategic-card/.customer-row/.size-chart/.tier-grid/.insight-deep/.section-divider - ⚠️ generate_portal.py 中花括号必须双写(
{{/}}),使用脚本自动转换可避免手动错误
JS 架构约定
- 所有 JS 用 IIFE 包裹:
(function() { ... })(); - 关键函数暴露到
window:renderFilterBar,switchView,switchCompany,applyFilters,sortTable ALL_DATA和COMPANY_META在 IIFE 内const声明- 所有分析函数在 IIFE 内定义
- 详情页筛选控件用
addEventListener绑定,不用内联oninput/onchange normalizeProvince()函数负责省份归一化(见 references/js_snippets.md)- 省份只使用 31 个省级行政区简称 + "兵团"
- ⚠️ 企业分析标签按钮注入:
ANALYSIS_CID和ANALYSIS_TAB_NAME是 Python 脚本注入的 JS 常量。在renderFilterBar()中用if (ANALYSIS_CID) { html += '...' + ANALYSIS_TAB_NAME + '...'; }动态渲染按钮。绝对不能用 Python f-string{analysis_btn_html}直接插值裸 HTML 标签到 JS 代码中——那会生成无效 JS 语句,导致按钮不渲染
数据变更后必检清单
每次增/删/改企业或中标记录后,逐项确认:
- [ ] ALL_DATA 条目数 = COMPANY_META 条目数 = 企业总数
- [ ]
"prov":"未知"= 0 - [ ]
"name":""= 0 - [ ] 无同名+同金额重复记录
- [ ] Hero 三数正确(监控企业/中标总额/中标项目)
- [ ] GLOBAL_TOTAL_AMT / GLOBAL_TOTAL_PROJ 正确
- [ ] MAX_COUNT = COMPANY_META.length
- [ ] 页面标题 =
{主题}{时间段标签}中标全景 - [ ] 企业分析标签(如有)企业数动态取自 COMPANY_META.length
- [ ] 全部分析视图可正常切换、数据正确
- [ ] 无残留引用已删除企业的 id/数据
- [ ] ⚠️ 全国省份+城市覆盖:搜索是否覆盖全部 31 省 + 20 重点城市(不限于企业所在省/市)?跨省/跨市项目是否遗漏?
- [ ] ⚠️ P0 渠道检查:ctbpsp 是否搜索?必应+百度是否互补使用?搜索引擎语法技巧是否使用?
- [ ] ⚠️ ALL 重搜回归校验:旧数据项目是否全部保留(或已显式说明丢失原因)
- [ ] ⚠️ 大单交叉验证:所有 ≥500 万大项目是否均已收录
- [ ] ⭐ 参照基准覆盖率验证:每家企业的搜索结果是否与多源基准对比?覆盖率是否 ≥ 80%?遗漏项目是否已补搜或已显式告知用户?
- [ ] ⭐ 企业专项分析深度:SWOT四象限是否全部从数据推导?战略建议是否有6条且带优先级标签?项目规模分布和核心客户分析是否渲染?
- [ ] ⭐ 市场行情分析深度:HHI指数和CR4是否计算?竞争梯队(头部/腰部/尾部)是否分卡?区域是否有蓝海/红海标注?战略洞察是否有6条?
- [ ] 🔧 重建脚本完整性:
rebuild_portal.py输出是否有 ERROR/WARN?数据段替换是否成功?卡片CSS/动画/标题替换是否成功? - [ ] 🔧 JS 代码完整性:
<script>标签是否成对闭合?const ALL_DATA和COMPANY_META声明是否存在?renderFilterBar()和renderCards()是否正常调用? - [ ] 🔧 HTML 结构完整性:
.main、.filter-bar-wrap、#cardsGrid、.detail-section等核心 DOM 是否完整?
诚实的局限性声明
Web 搜索(WebSearch/WebFetch)无法保证 100% 覆盖率。即使执行了所有 7 个搜索维度 + 专业数据库交叉验证,仍可能存在遗漏。原因:
- 专业数据库(千里马招标网、剑鱼标讯等)本身也可能不全——它们依赖爬虫抓取各平台公告,部分地方平台可能未被覆盖
- 某些中标公告可能在非公开渠道发布(如内部采购、邀请招标),搜索引擎和数据库都无法获取。此类项目只能通过企业自主披露获取
- 联合体中标(如"A&B公司联合体")中的企业名可能被搜索引擎误判,难以通过企业名搜索匹配
- 地市级平台众多(334 个),当前策略覆盖了水利投资最密集的 20 个城市,其余 314 个城市的中标项目可能遗漏
正确态度:
- 不声称"已找到全部项目",而是报告覆盖率(如"基准 22 个项目,已找到 20 个,覆盖率 91%")
- 对于无法找到的项目,显式告知用户"该项目在多源基准中存在但未找到原始公告链接"
- 鼓励用户提供已知遗漏项目,作为补充数据源
- 对于重要商业决策,建议用户通过天眼查/企查查等付费服务做最终验证
微信扫一扫