报告转可视化组件流
任务目标
将文本报告数据转换为可视化组件配置,输出严格的MODULE格式。
输入格式
用户需提供以下变量:
${moduleData}: 报告数据内容
图表库规范
使用条件: 展示数据趋势,需至少5个连续、真实的时间点原始观测值
数据格式: {
"type": "Chart.Line",
"data": [{"name": "时间标签,≤6字", "value": 数值, "category": "系列名称,≤8字"}],
"config": {"xField": "name", "yField": "value", "title": "图表标题,≤12字"},
"layoutRow": "r1",
"layoutCol": "c1",
"rowSize": "auto",
"colSize": "auto"
}
约束: 禁止基于平均值、最高/最低值、总计等聚合统计量推测或填充时间序列数据
value 必须为 number 类型(如 78.5),禁止使用字符串(如 "78.5")
使用条件: 展示数据对比,一个或多个维度有不低于2个具体数值
数据格式: {
"type": "Chart.Column",
"data": [{"name": "分类标签,≤8字", "value": 数值, "category": "指标名称,≤8字"}],
"config": {"xField": "name", "yField": "value", "seriesField": "category", "isGroup": true, "title": "图表标题,≤12字"},
"layoutRow": "r1",
"layoutCol": "c1",
"rowSize": "auto",
"colSize": "auto"
}
约束: value 必须为 number 类型(如 78.5),禁止使用字符串(如 "78.5"),字符串会导致图表排序和轴刻度异常
如果原文给出范围值(如"60%-85%"),应拆分为两个数据点(如"线下摆摊(低) 60"和"线下摆摊(高) 85"),或改用 KeyValueCard 展示
❌ {"name": "线下摆摊", "value": "60-85"} → ✅ 拆分为 {"name": "摆摊(低)", "value": 60} 和 {"name": "摆摊(高)", "value": 85}
禁止混合量纲:同一个柱状图中所有数据点的 value 必须属于同一量纲(如全部是百分比,或全部是绝对数值)。
禁止将绝对数值(如曝光量 9500、成交金额 7800)与百分比(如点击率 2.3%、转化率 0.8%)放在同一个图表中,否则百分比的柱子会因数量级差异完全不可见。
应拆分为两个独立的 Chart.Column,或将百分比指标改用 DataCard 展示
❌ 曝光量(9500) + 点击率(2.3) + 成交金额(7800) 放在同一柱状图 → ✅ 拆分为"流量与销售"柱状图(绝对数值)+ "转化效率"DataCard 或柱状图(百分比)
使用条件: 展示核心指标值和环比数据,不低于4个指标
数据格式: {
"type": "DataCard",
"data": [{"desc": "指标名称,≤12字", "value": "指标值", "cycle": "环比变化值或null"}],
"config": {"title": "卡片标题,≤10字"},
"layoutRow": "r1",
"layoutCol": "c2",
"rowSize": "auto",
"colSize": "auto"
}
约束: cycle 字段仅用于填写环比/同比的数值变化(如 "-0.26%"、"+5.3%"),或填 null
禁止在 cycle 中填入描述性文字(如"下降""行业第一""占比47.2%")
如果某指标没有环比/同比数据,cycle 必须为 null
❌ {"desc": "斯凯奇份额", "value": "16.8%", "cycle": "行业第一"} → ✅ {"desc": "斯凯奇份额", "value": "16.8%", "cycle": null}
使用条件: 展示数据占比,不低于2个指标,value值求和应为100(百分比)或1(小数)
数据格式: {
"type": "Chart.Pie",
"data": [{"type": "类别名称,≤8字", "value": 数值}],
"config": {"angleField": "value", "colorField": "type", "innerRadius": 0.6, "statistic": {"title": false, "content": false}, "title": "图表标题,≤12字"},
"layoutRow": "r1",
"layoutCol": "c2",
"rowSize": "auto",
"colSize": "auto"
}
约束: value 必须为 number 类型,禁止字符串
禁止推算补全:如果原文只给出一个占比数据而缺少互补项(如仅提到"35-55岁占61.3%"),不得自行用 100%-61.3%=38.7% 推算出其他类别的占比。
应改用 DataCard 或 KeyValueCard 展示已有数据
❌ {"type": "其他年龄", "value": 38.7} ← 原文无此数据,系推算捏造
使用条件: 当内容满足以下全部条件时,必须使用 Chart.List 而非 TextCard/KeyValueCard:
有 3 个以上的对比对象(如 5 个品牌、4 款产品、6 个成本项)
每个对象需要展示 3-4 个维度(如品牌 + 定位 + 优势 + 数据)
需要横向对比阅读
数据格式: {
"type": "Chart.List",
"data": [{"list": [{"key": "列名,≤10字", "value": "列值,≤20字"}, {"key": "列名", "value": "列值"}]}],
"config": {"title": "分组标题,≤10字"},
"layoutRow": "r1",
"layoutCol": "c1",
"rowSize": "auto",
"colSize": "auto"
}
典型场景: ✅ 竞争品牌格局(5 个品牌 × 4 个维度)→ Chart.List
✅ 成本结构明细(6 个成本项 × 3 个维度)→ Chart.List
❌ 品牌格局用 TextCard 描述 → 违规
约束(总计行表达): 如果表格需要展示总计/合计行,总计行的 key-value 结构必须与明细行保持一致,第一列的 key 不变,value 填"总计/合计",后续列正常填写汇总数据
❌ {"list": [{"key": "成本项", "value": "约111.1元/双"}, {"key": "成本", "value": "-"}, {"key": "备注", "value": "含原材料25-40元"}]} ← 把金额塞进第一列,第二列留空,读者无法理解
✅ {"list": [{"key": "成本项", "value": "总计"}, {"key": "成本", "value": "约111.1元/双"}, {"key": "备注", "value": "含原材料25-40元"}]} ← 第一列标明"总计",后续列正常填写数据
使用条件: 展示数据总结、趋势洞察、运营建议等定性内容,不少于2个标题
数据格式: {
"type": "TextCard",
"data": [{"title": "标题,≤10字", "text": "内容,尽量2行,30-45字"}],
"config": {"title": "卡片标题,≤10字"},
"layoutRow": "r1",
"layoutCol": "c1",
"rowSize": "auto",
"colSize": "auto"
}
约束(元素数量): data 数组必须包含 至少 2 个元素(即至少 2 个 {"title": "...", "text": "..."} 对象),仅 1 个元素时应从原文上下文中提取更多观点/结论来补充,若确实无法补