产品健康度七维度测评 Skill v2.0
> 定位: 一站式产品全生命周期健康诊断评估工具 — 从评分到报告全自动生成
> 版本: 2.0.0 | 评估框架: 七维度 × 27项二级指标 | 输出: 独立HTML可视化报告
五秒速查卡
| 你想做什么 | 去哪里 | 关键信息 |
|---|---|---|
| 快速上手 | Step 1-5 工作流 | 五步完成测评 |
| 查评分标准 | references/seven-dimensions.md |
27项指标体系+评分区间+反模式 |
| 查HTML模板 | assets/report-template.html |
数据注入模板,/* DATA_PLACEHOLDER */ |
| 验证数据 | scripts/validate_data.py --demo |
JSON数据完整性校验 |
| 处理异常 | 错误处理与降级 | 输入缺失/格式错误应对 |
| 确保安全 | 安全准则 | XSS防御/数据校验/CSP |
| 验收质量 | 输出验证清单 | 自检11项必须通过 |
一、能力边界与适用场景
适用场景
本 Skill 擅长以下任务:
- 单产品深度诊断:用户描述一个产品 → 七维度全面评估 → 生成含雷达图+改善建议的HTML报告
- 多产品批量测评:用户提供产品清单(文本/Excel) → 批量评估 → 聚合报告含排名与对比
- 双产品对比分析:用户指定两个产品 → 并排雷达图 + 维度差距表 + 对比结论
- 产品组合健康度总览:全产品线评估 → KPI仪表盘 + 产品分档 + 战略建议
不适用场景(明确拒绝)
- 实时BI数据监控/仪表盘(请使用
data-visualization或interactive-dashboard-builder) - 财务报表级损益分析(请使用
finance-workflows) - 竞品功能级细节对比(请使用
competitive-analysis) - 需要数据库/后端支持的管理系统
- 产品仅为一个技术组件、无独立商业价值的场景
二、七维度评估框架
维度总览
| 序号 | 维度 | 权重 | 二级指标数 | 核心评估逻辑 |
|---|---|---|---|---|
| 1 | BCG战略定位 | 18% | 3 | 明星/现金牛/问号/瘦狗,判断资源投入优先级 |
| 2 | 客户交叉销售价值 | 15% | 4 | 客户数量、覆盖率、单客户多产品覆盖潜力 |
| 3 | 技术能力雷达 | 15% | 4 | AI能力储备、平台成熟度、创新指数、架构可扩展性 |
| 4 | 竞争生态位 | 14% | 4 | 市场位置、差异化优势、进入壁垒、市场份额 |
| 5 | 商业模式演进 | 13% | 4 | L1按资源量→L2按SLA→L3按效果→L4订阅制 |
| 6 | 组织能力适配 | 12% | 4 | 团队准备度、流程成熟度、销售能力、资源分配 |
| 7 | 数据资产价值 | 13% | 4 | 数据积累、AI训练价值、IP资产、数据壁垒 |
> 共 27项 二级指标。详细评分标准、分数区间、反模式请见 references/seven-dimensions.md。
评级体系
| 等级 | 综合得分 | 含义 | 资源策略建议 |
|---|---|---|---|
| S | >= 90 | 卓越,战略级明星 | 全力投入,快速扩大领先优势 |
| A | 80-89 | 良好,健康度较高 | 维持优势并补齐短板 |
| B | 70-79 | 合格,存在明显短板 | 针对性改善,补齐弱项 |
| C | 60-69 | 预警,多项低于阈值 | 系统性整改,防滑向危险区 |
| D | < 60 | 高危,全面预警 | 战略审视,评估关停/整合/转型 |
三、测评工作流
前置要求
在开始测评前,必须加载 references/seven-dimensions.md 以获取精确评分标准。该文档包含评分区间、反模式清单和跨维度一致性校验规则。
Step 1: 收集与解析产品信息
从用户输入中提取产品属性。如果信息不完整,按优先级处理:
必填属性(缺失时必须向用户确认)
| 属性 | 字段 | 说明 |
|---|---|---|
| 产品名称 | name |
中文名称 |
| 所属部门 | department |
可接受事业部/部门/团队 |
| 所处阶段 | stage |
引入期/成长期/推广期/成熟期/衰退期 |
| 客户数量 | customers |
数值,付费客户数 |
| AI能力水平 | aiLevel |
高/中/低 |
| 产品形态 | form |
SaaS/PaaS/服务/硬件+软件/工具 |
可推断属性(基于必填属性+行业经验推断,需声明假设)
| 属性 | 字段 | 推断逻辑 |
|---|---|---|
| BCG象限 | bcg |
根据 stage + customers + aiLevel 按判定规则推断 |
| 商业模式等级 | bizModel |
form=SaaS→L4, form=PaaS→L3, form=服务→L1, form=工具→L2 |
| 科创能力 | scitech |
aiLevel=高→高, 中→中, 低→低(默认与AI能力对齐) |
| 产品结构 | structure |
form=SaaS/PaaS→平台, form=服务→服务, form=工具→平台+服务 |
推断声明格式: "基于您提供的信息,我推断该产品的BCG象限为明星,商业模式为L4订阅制。如有偏差请纠正。"
批量输入处理
如果用户提供 Excel 文件:
1. 使用 markitdown 或 Python openpyxl 解析
2. 提取每行产品信息
3. 缺失的必填属性标记并列出,询问用户补充
4. 不要跳过缺失属性的产品,明确告知哪些产品信息不足
Step 2: 七维度评分
对每个产品,按照 references/seven-dimensions.md 中的精确评分标准打分:
评分流程
对于每个产品:
1. 根据 BCG 判定规则确定象限 → 查表得基准分
2. 根据客户数查表 → 客户维度得分
3. 根据 AI能力+科创能力查表 → 技术能力得分
4. 根据产品阶段查表 → 竞争生态位得分
5. 根据商业模式等级查表 → 商业模式得分
6. 根据产品阶段+BCG查表 → 组织能力得分
7. 根据 AI能力+客户数查表 → 数据资产得分
8. 检查调整因子(仅在有明确证据时调整)
9. 计算综合得分 = Σ(维度得分 × 权重/100)
10. 执行跨维度一致性校验
关键约束
- 综合得分保留整数(四舍五入)
- 维度得分范围 0-100,严禁超范围
- 权重总和必须为 100%
- 每个维度的多次级指标平均分应与维度分匹配(偏差不超过10分)
Step 3: 生成改善建议与诊断
改善建议生成
- 识别低分维度(<70分的维度)
- 按 P0(<60) → P1(60-70) → P2(70-80) 三级分级
- 使用
references/seven-dimensions.md中的建议模板为每个低分维度生成具体改善行动 - 每条建议必须包含:优先级、关联维度、具体行动、责任部门、整改周期、量化验收指标(KPI)
AI诊断小结生成
使用 references/seven-dimensions.md 第四章的标准化模板,生成100-200字的诊断总结。
Step 4: 构建JSON数据
将测评结果组装为以下JSON结构。注意: 所有数值必须是数字类型,字符串不可包含未转义的HTML特殊字符。
{
"company": "企业名称",
"reportDate": "2026-07-02",
"dimNames": [
"BCG战略定位","客户交叉销售价值","技术能力雷达",
"竞争生态位","商业模式演进","组织能力适配","数据资产价值"
],
"dimWeights": [18, 15, 15, 14, 13, 12, 13],
"products": [
{
"name": "产品名称",
"department": "所属部门",
"stage": "推广期",
"aiLevel": "高",
"customers": 85,
"form": "SaaS",
"bcg": "star",
"bcgLabel": "明星",
"bizModel": 4,
"bizModelLabel": "L4 订阅制",
"scitech": "高",
"scores": [88, 82, 85, 78, 90, 72, 80],
"total": 83,
"level": "A",
"subDims": [
{"name": "BCG象限", "val": 90, "note": "明星产品,战略优先级最高"},
{"name": "市场增长率", "val": 85, "note": "推广期增长势头强劲"}
],
"risks": ["组织能力适配"],
"improvements": [
{
"priority": "P1",
"dim": "组织能力适配",
"action": "建立产品专属运营团队,明确跨部门协同机制与考核标准",
"dept": "HR+事业部管理层",
"period": "1个季度",
"kpi": "组织适配度提升至75分以上"
}
],
"aiSummary": "诊断总结文本(100-200字)"
}
]
}
JSON质量要求:
- scores 必须恰好7个数字
- subDims 必须恰好27个对象(3+4+4+4+4+4+4)
- total 必须是综合得分的整数(由7个维度分加权计算)
- level 必须与 total 对应的等级一致
- risks 中的名称必须来自七维度名称之一
Step 5: 生成HTML报告
模板注入流程
1. 读取 assets/report-template.html 文件内容
2. 将上述JSON序列化为紧凑格式的字符串(ensure_ascii=False, 保留中文)
3. 定位模板中的 /* DATA_PLACEHOLDER */ 标记
4. 替换为 var __DATA__ = <json_string>;
5. 将生成的HTML写入用户当前工作目录
6. 使用 present_files 工具展示给用户
注入安全验证(必须执行)
在交付HTML前:
1. 检查 JSON 序列化是否成功(无异常)
2. 检查生成的 HTML 中包含 var __DATA__ 声明
3. 检查 HTML 中包含 <canvas 标签(雷达图渲染容器)
4. 快速目视检查 JSON 中无未闭合的引号或括号
> 如果验证脚本可用,强烈建议运行: python scripts/validate_data.py <data.json>
四、多产品处理模式
单产品模式(默认)
- 生成一个标准产品报告
- 雷达图 + 维度明细 + 二级指标 + 改善建议 + 诊断小结
双产品对比模式
触发条件:用户明确要求对比两个产品,或提供了恰好两个产品
输出:
- 并排雷达图(不同颜色区分)
- 七维度差距对比表(标注领先方和差距大小)
- 各产品独立详细报告
批量产品模式(>2个产品)
- 生成聚合报告头(KPI仪表盘:平均分、S/A级产品数、待整改数等)
- 每个产品独立展示(按总分降序排列)
- 所有产品雷达图叠加"群体平均"参考线
五、错误处理与降级策略
输入信息不足
| 情况 | 处理策略 |
|---|---|
| 产品名称缺失 | 使用占位名"产品N",但需在报告中标注"信息待补充" |
| 客户数未知 | 要求用户提供估算值,标注"估算" |
| 阶段未知 | 根据其他属性推断(如客户数>50且有AI能力→推断为推广期),声明假设 |
| AI能力未知 | 默认为"中",标注"未提供AI能力信息,暂按中等评估" |
| 关键属性大量缺失(>3项) | 暂停测评,列出缺失项,请用户补充后再继续 |
模板生成失败
| 情况 | 处理策略 |
|---|---|
| 模板文件读取失败 | 检查路径 assets/report-template.html 是否存在,不存在则告知用户Skill环境异常 |
| JSON序列化失败 | 检查数据中是否有不可序列化对象(如NaN、Infinity),替换为null |
| HTML写入权限不足 | 尝试写入用户桌面或临时目录 |
| Chart.js CDN不可用 | 报告仍会生成,但雷达图区域显示降级提示:"图表库加载失败,请检查网络连接" |
数据质量异常
| 情况 | 处理策略 |
|---|---|
| 权重和不等于100 | 自动归一化调整,并在报告底部注明 |
| 维度分超出0-100 | 截断到边界值并标注 |
| 总分与等级不匹配 | 重新计算,以计算值为准 |
六、安全准则
XSS防御
- 所有用户输入的文本字段在注入HTML前必须经过转义(模板内置
esc()函数处理) - 禁止在HTML中直接拼接用户输入而不转义
- 特别关注产品名称中可能包含的
< > " &字符
代码注入防护
- JSON数据通过
__DATA__变量注入,不使用eval() - 模板不使用
innerHTML拼接用户输入(已通过esc()过滤) - Chart.js 通过 SRI(Subresource Integrity)校验的CDN加载
数据校验
- JSON数据在注入模板前必须通过格式校验
- 分数范围检查(0-100)
- 权重和检查(必须=100)
文件安全
- 生成的HTML文件仅写入用户指定的工作目录
- 不读取或修改用户工作目录以外的文件
- 不执行任何用户提供的可执行代码
七、输出验证清单
在向用户交付每个测评报告前,必须逐项自检:
| # | 检查项 | 通过标准 |
|---|---|---|
| 1 | JSON数据完整性 | 所有产品包含必填字段,无 null/undefined |
| 2 | 分数范围 | 所有 dimension score 在 [0, 100],total 在 [0, 100] |
| 3 | 权重和 | dimWeights 数组求和 = 100 |
| 4 | subDims 数量 | 每个产品的 subDims 恰好 27 项 |
| 5 | level 一致性 | 每个产品的 level 与 total 对应 |
| 6 | HTML 结构完整 | 文件以 <!DOCTYPE html> 开头,以 </html> 结尾 |
| 7 | JSON 已注入 | HTML 中包含 var __DATA__ = { |
| 8 | 转义完整性 | 搜索 </script> 不出现在 JSON 数据中(转义无遗漏) |
| 9 | 模板完整性 | canvas元素、初始化脚本完整保留 |
| 10 | 诊断小结质量 | 每个产品的 aiSummary 不少于50字,不包含未替换的模板变量 |
| 11 | 改善建议质量 | 每条建议包含 priority/dim/action/dept/period/kpi 六个字段 |
如果验证脚本可用,运行以下命令作为最终确认:
python scripts/validate_data.py <生成的JSON文件> --strict
八、可移植性与离线使用
Chart.js 依赖
报告的雷达图依赖 Chart.js v4.4.1。当前模板通过 CDN 加载(含 SRI 哈希校验),优点:
- 模板文件精简(~20KB vs ~220KB内联版)
- 浏览器缓存后加载极快
离线环境处理:
1. 若用户需要在完全离线环境使用,读取 assets/report-template.html,将 Chart.js CDN 的 <script src="..."> 替换为用户本地路径
2. 若 Chart.js 加载失败(网络不可用),报告的文字部分正常显示,雷达图区域显示友好的降级提示
跨平台兼容
- 生成的 HTML 为纯静态文件,无需服务端
- 支持 Chrome、Edge、Firefox、Safari 主流浏览器
- 支持移动端浏览(响应式布局)
- 支持打印和浏览器"另存为PDF"
九、FAQ
Q: 用户可以自定义维度权重吗?
A: 可以。在 Step 2 评分前,如果用户明确要求调整权重,可自定义 dimWeights 数组。但必须满足:7个数字,和=100。完成后在报告底部注明权重已自定义调整。
Q: 如何处理跨部门同名产品?
A: 产品名称应包含部门前缀,如"运维智能体(信息安全部)",确保唯一性。
Q: 测评结果是否需要人工审核?
A: 本 Skill 的评分基于规则引擎(查表法),结果具有确定性。但如果用户提供了估算数据而非精确数据,评分精度取决于数据精度。建议在报告中标注"数据来源:用户估算"。
Q: 一个产品的改善建议最多几条?
A: 理论上是低分维度数×3。但实际建议数量应控制在 3-6 条,优先显示 P0 和 P1 级建议。P2 级(70-80分维度)的建议仅在总建议数少于3条时补充。
Q: 如何批量对比所有产品?
A: 批量模式下,报告会自动生成:
- 顶部KPI仪表盘(平均分、各级别产品数)
- 所有产品按总分降序排列
- 每个产品的雷达图叠加"群体平均"参考线
十、参考资源索引
| 资源 | 路径 | 用途 | 大小 |
|---|---|---|---|
| 评分标准 v2.0 | references/seven-dimensions.md |
27项指标评分+反模式+校验规则 | ~11KB |
| HTML报告模板 v2.0 | assets/report-template.html |
数据注入模板 | ~20KB |
| 数据验证脚本 | scripts/validate_data.py |
JSON结构与数据校验 | ~10KB |
| 演示报告 | assets/demo-report.html |
双产品对比示例 | ~30KB |
十一、版本历史
| 版本 | 日期 | 变更摘要 |
|---|---|---|
| 2.0.1 | 2026-07-03 | Bug 修复 双产品对比模式下,独立产品区域雷达图 canvas id 与对比区冲突,导致下方两幅雷达图无法绘制。修复方案:(1) renderSingleProduct 接受第三参数 idPrefix 命名空间 canvas id;(2) drawAllCharts 在双产品模式下追加 drawProductRadar(d, 0/1, 'radar_mainA_/radar_mainB_') 调用。详见 Bug 修复日志 |
| 2.0.0 | 2026-07-02 | 全面升级:新增安全准则、错误处理、验证清单、FAQ、可移植性指南;修正二级指标为27项;增强评分纪律与反模式;新增验证脚本;模板增加SRI和降级机制 |
| 1.0.0 | 2026-07-01 | 初始版本:基础七维度测评框架,24项二级指标,HTML模板输出 |
十二、Bug 修复日志
v2.0.1 — 双产品对比模式独立雷达图未绘制
现象: 当测评对象为恰好 2 个产品时,对比分析区域(上方)显示两个并排雷达图,但紧随其后的两个独立产品详细区域(下方)的雷达图为空白。
根因(两处叠加 Bug):
-
Canvas DOM id 冲突:
renderCompareProducts内部使用的 canvas id 是radar_0/radar_1;同一函数后面调用renderSingleProduct(d, 0)和renderSingleProduct(d, 1),又生成了同名的radar_0/radar_1。HTML 规范要求 id 唯一,document.getElementById('radar_0')只会返回第一个匹配——对比区的 canvas 抢占了查询,导致下方两个独立 canvas 永远不会被任何绘图代码命中。 -
drawAllCharts在双产品模式下漏画独立雷达图:原代码的双产品分支仅调用drawCompareRadar(d)画对比图,没有循环为独立区域调用drawProductRadar,即使 id 不冲突,下方独立产品也得不到图表实例。
修复方案:
- 修改
renderSingleProduct(d, idx, idPrefix='radar_single_')接受可选的 id 前缀参数,避免硬编码radar_<idx>。 - 修改
renderCompareProducts调用独立产品时传前缀:renderSingleProduct(d, 0, 'radar_mainA_')、renderSingleProduct(d, 1, 'radar_mainB_')。 - 修改
drawProductRadar(d, idx, idPrefix)同样接受 id 前缀,与 renderer 一一对应。 - 修改
drawAllCharts在双产品模式下追加:
js drawProductRadar(d, 0, 'radar_mainA_'); drawProductRadar(d, 1, 'radar_mainB_');
修复后 canvas id 分布(共 4 个,全部唯一):
| 区域 | canvas id | 颜色 |
|---|---|---|
| 对比区左 | radar_0 |
蓝色 (#4f46e5) |
| 对比区右 | radar_1 |
红色 (#ef4444) |
| 独立产品A 详细区 | radar_mainA_0 |
蓝色 |
| 独立产品B 详细区 | radar_mainB_1 |
蓝色 |
回归验证方法(无需浏览器):
// 在 Node.js 用 vm 模块跑模板的 script 段
const vm = require('vm');
const template = fs.readFileSync('report-template.html', 'utf-8');
const data = JSON.parse(fs.readFileSync('data.json', 'utf-8'));
const jsonStr = JSON.stringify(data);
const injected = template.replace('/* DATA_PLACEHOLDER */', 'var __DATA__ = ' + jsonStr + ';');
const inner = injected.match(/<script>([\s\S]*?)<\/script>/g).pop().replace(/<\/?script>/g, '');
// 模拟 DOM,强制走 _chartJsFailed 路径避免 setInterval
const dom = { /* ... 略 ... */ };
vm.runInContext(inner, vm.createContext({ document: dom, window: { _chartJsFailed: true }, setInterval }));
const ids = dom.getElementById('app').innerHTML.match(/id="(radar[^"]*)"/g);
// 期望:4 个唯一 id
适用范围: 任何会触发"对比模式 + 独立区域共存"的场景。批量模式(≥3 产品)不受影响,因为 drawAllCharts 走 else 分支且 canvas id 不会重复。