概览
本系统设计的目标是自动化生成 CS 产品质量月度分析报告。从维修工单数据库提取数据,经过 LLM 二次分类与总结,渲染为带有交互图表的 HTML 报告。全流程无需人工介入——从原始数据到可阅读的月度分析报告,一次运行完成。
核心流程:PostgreSQL → Python Agent → LLM → Vega-Lite HTML Report。报告包含交互式图表(可展开条形图、环形图、趋势图)和 DataTables 明细表(支持 10k+ 行),并内置跨图表联动筛选(cross-filtering)。
数据源
两张核心表,结构为设计假设——部署前需与数据库管理员确认实际结构。
| 表名 | 字段 | 说明 |
|---|---|---|
repair_tickets |
ticket_id, created_at, fault_category, major_component, fault_symptom, solution, repair_type, summary |
维修工单表 |
spare_parts |
ticket_id, part_name, part_code, quantity, replace_time |
备件更换表 |
技术架构
4 级流水线设计,各阶段独立可执行,便于分步调试和增量运行:
技术选型:
- Vega-Lite 5.x — 声明式图表,内置交互选择器实现 cross-filter
- DataTables 2.x — 支持 10k+ 行明细表,搜索 / 排序 / 分页
- Jinja2 — 模板渲染,数据与图表嵌入同文件
LLM 处理
两个独立 LLM 任务,各有明确的输入输出规范:
任务一 · 二次分类
故障子分类归一化
硬件 → 6 子类(机械 / 电气 / 光学 / 传感器 / 连接 / 结构)
软件 → 5 子类(系统 / 界面 / 数据 / 通信 / 驱动)
其他 → 3 子类(操作 / 环境 / 未知)
部件名称标准化
将各工单中不一致的部件名映射到公司标准部件表。例:「液压阀」「液压控制阀」「HYD-VALVE-01」→ 统一
严重度评级
P0 — 停机 / 安全风险
P1 — 功能受损
P2 — 体验问题
输入 / 输出
输入:fault_symptom + major_component + summary(每条工单)
输出:结构化 JSON(子分类 / 标准部件 / 严重度)
任务二 · 月度总结
输入为聚合统计 JSON,输出结构化分析,包含:
- 本月质量概况(3–5 句)
- TOP 3 高频问题及根因分析
- 备件更换热点分析
- 环比变化
- 给研发的改进建议
报告页面结构
单页 HTML,从上到下依次为:
- Header — 报告标题 + 月度 + 生成时间
- Filter Bar — 日期范围 | 故障分类 | 严重度,触发全局筛选
- KPI Cards — 工单数 / 已解决 / 平均处理时长 / 备件更换
- LLM 分析面板 — 可折叠,默认展开,包含月度总结全文
- 故障分类(柱状图) + 严重度(环形图) — 2 列布局
- 月度工单趋势 — 全宽折线 / 面积图
- 部件故障排行 + 备件更换 TOP10 — 2 列布局
- 备件更换明细 + 工单明细 — 2 列 DataTables
交叉筛选(Cross-Filter)
三种交互模式,实现图表之间的联动筛选:
🎯 Filter Bar
选择故障分类 → 所有图表和表格同步筛选
机制:Filter Bar change event → 全局状态 → View API refresh
📅 Trend Chart Brush
拖拽选中趋势图中某段时间范围 → 其他图表自动只显示该时间段数据
机制:Vega-Lite interval selection + resolve: filter
🔗 Component Ranking Click
点击部件排行柱状图中的某个部件 → 明细表只显示该部件的工单
机制:JS 监听 view change → DataTables API filter → table.draw()
代码架构
cs-quality-report/ ├── generate_report.py # 主入口 ├── config.yaml # 数据库 & LLM 配置 ├── templates/ │ └── report.html.j2 # Jinja2 模板 ├── prompts/ │ ├── classify.md # 二次分类 prompt │ └── summarize.md # 月度总结 prompt ├── output/ │ └── CS_质量报告_2026-05.html └── tests/ └── test_extract.py
generate_report.py 主流程:
- extract_data() → PostgreSQL SQL 提取,按月筛选
- llm_classify() → 批量二次分类(20 条 / batch)
- 统计计算 → 聚合指标(KPI / 排行 / 趋势)
- llm_summarize() → 月度分析文本
- build_vega_specs() → 配置所有图表规格
- render_html() → Jinja2 模板 → HTML 文件
设计规范
报告页面的视觉约束,确保信息密度与可读性:
- 功能优先 — 页面加载 0.4s 入场动画后即静止,不干扰阅读
- 强调色 ≤ 5% — 陶土橙(oklch(55% 0.15 25))仅用于关键指标
- 正文字体 ≥ 14px,表格 ≥ 12px
- 颜色带信息 — 严重度 / 分类通过色相区分,不靠图例猜
- 打印适配 — @media print 保留所有图表,隐藏交互控件
- 禁止 — 紫色渐变 / 装饰图标 / 虚构数据
- 字体 — h1/h2 用衬线(Noto Serif SC),正文用无衬线(Inter),标签用等宽
里程碑
总计约 7.5 个工作日,分 10 个里程碑:
- M10.5d数据库探查 & 表结构确认
- M20.5dPython 数据提取管线
- M31dLLM 二次分类集成
- M40.5dLLM 月度总结
- M51dHTML 模板 + 设计系统
- M61.5dVega-Lite 图表集成
- M71dDataTables 明细表 + 联动
- M80.5dLLM 分析面板
- M91d美化 + 响应式 + 打印
- M100.5d测试 + 文档
风险与应对
下一步
- 连接公司 PostgreSQL — 确认实际表结构和字段名
- 交付给 Copilot CLI / Hermes — 从 M1 开始实现
- 首月试运行 — 验证数据提取 → LLM 分类 → HTML 生成全链路