埋点产品交互方案设计
设计原则:一切皆 ChartConfig。预设模板、AI 对话、异常预警、分享链接——四个入口产出同一份 JSON,走同一条渲染管道。这就是”不臃肿”的秘诀。
一、产品愿景与用户
1.1 一句话定位
让产品经理用自然语言问数据,系统自动分析并呈现可视化结果。
1.2 目标用户
| 角色 | 痛点 | 使用方式 |
|---|---|---|
| 产品经理 | 不懂 SQL,不会配置分析参数,每次分析都找开发 | 自然语言对话,AI 翻译意图 |
| 运营 | 需要定期看数据,但每次都重复同样的操作 | 固定看板 + 一键导出报告 |
| 研发负责人 | 需要快速了解产品数据全貌 | 预设看板,一页概览 |
| 老板 | 只关心结论,不关心过程 | 分享链接 / 静态报告 |
1.3 用户故事
| 编号 | 故事 | 优先级 |
|---|---|---|
| US-1 | 作为产品经理,我打开页面就能看到常用指标,不需要每次手动配置 | P0 |
| US-2 | 作为产品经理,我可以用大白话描述需求(”上周各渠道的访问量对比”),系统帮我生成图表 | P0 |
| US-3 | 作为产品经理,AI 生成的分析参数我可以在确认前修改,防止理解偏差 | P0 |
| US-4 | 作为产品经理,我可以把 AI 对话中生成的图表”钉”到看板上,下次打开还在 | P1 |
| US-5 | 作为运营,我每天早上收到企微消息,告诉我昨天数据有没有异常 | P1 |
| US-6 | 作为运营,我可以把分析结论一键导出为 HTML 报告发给老板 | P1 |
| US-7 | 作为产品经理,我可以把分析结果分享链接发给同事,对方打开就能看到同样的图表 | P2 |
| US-8 | 作为产品经理,我可以继续上次的分析会话,而不是从头开始 | P2 |
二、核心设计:一切皆 ChartConfig
2.1 数据结构
整个系统的唯一流通数据格式:
1 | |
2.2 图表类型枚举
| 类型 | 说明 | 对应 API |
|---|---|---|
funnel |
漏斗图,展示逐步转化率 | /analytics/funnel |
trend |
趋势折线图,按天展示变化 | /analytics/range-times-count / range-people-count |
bar |
柱状图,维度对比排名 | /analytics/dimension |
pie |
饼图,占比分布 | /analytics/dimension |
table |
数据表格,支持排序和分页 | 任意 API |
retention |
留存热力图,N 日留存矩阵 | /analytics/retention |
metric_card |
指标卡,大数字 + 环比变化 | /analytics/times-count + people-count |
2.3 四入口 → 一管道
1 | |
关键设计决策:ChartRenderer 不关心 ChartConfig 的来源。无论它是预设的、AI 生成的、还是告警触发的,渲染逻辑完全相同。这是整个系统不臃肿的根本原因。
三、页面设计
3.1 整体布局
1 | |
3.2 页面状态
3.2.1 首次访问(无历史数据)
1 | |
3.2.2 正常使用状态
- 左侧:对话历史 + 输入框
- 右侧:已固定的图表网格(上次保存的布局)
- 对话中生成的图表可以用 “📌 固定到看板” 添加到右侧
- 右侧图表可以拖拽排序、删除、单独刷新
3.2.3 AI 思考中
1 | |
3.2.4 参数确认状态
1 | |
3.2.5 错误状态
1 | |
3.2.6 空数据状态
1 | |
四、交互流程
4.1 预设看板流程(L1)
1 | |
4.2 AI 对话流程(L2)
1 | |
4.3 异常预警流程(L3)
1 | |
4.4 分享与导出流程(L4)
1 | |
五、后端 API 设计
5.1 已有 API(Phase 1-3,8 个)
| API | 方法 | 用途 |
|---|---|---|
/analytics/report |
POST | 单条上报 |
/analytics/reportBatch |
POST | 批量上报 |
/analytics/times-count |
POST | 查询总次数 |
/analytics/range-times-count |
POST | 按天统计总次数 |
/analytics/people-count |
POST | 查询总人数 |
/analytics/range-people-count |
POST | 按天统计总人数 |
/analytics/funnel |
POST | 漏斗分析 |
/analytics/retention |
POST | 留存分析 |
/analytics/monthly-aggregate |
POST | 触发月度聚合 |
/analytics/monthly-stats |
POST | 查询月度统计 |
/analytics/dimension |
POST | EAV 维度聚合 |
5.2 Phase 4 新增 API
5.2.1 AI 对话 - 意图解析
1 | |
5.2.2 AI 对话 - 执行查询
1 | |
5.2.3 分享报告
1 | |
5.2.4 预设配置
1 | |
5.2.5 告警查询
1 | |
六、LLM 集成策略
6.1 设计原则
接口隔离,灵活替换。通过 LlmService 接口解耦,当前使用外部大模型 API Key 方式,后续可无缝切换到 FastGPT 或其他模型。
1 | |
6.2 配置项(Nacos / application.yml)
1 | |
6.3 System Prompt 设计
1 | |
七、风控策略
7.1 拦截规则
| 层级 | 规则 | 触发条件 | 处理 |
|---|---|---|---|
| 时间范围 | 最大跨度 90 天 | startTime ~ endTime > 90 天 | 拒绝,提示缩小范围 |
| 时间范围 | 必须包含起止时间 | 缺少 startTime 或 endTime | 默认最近 7 天 |
| API 白名单 | 仅允许调用 8 个分析 API | LLM 返回了非白名单 API | 拒绝,记录日志 |
| 参数白名单 | groupByFields 仅允许 7 个字段 | 字段不在白名单 | 拒绝,提示可用字段 |
| 参数白名单 | metric 仅允许 count/people | 其他值 | 拒绝,提示可用指标 |
| 频率限制 | 同一用户 1 分钟 10 次 | 超限 | 拒绝,提示稍后重试 |
| 敏感数据 | distinct_id 精确查询 | 检测到精确用户查询 | 二次确认弹窗 |
7.2 写入操作隔离
AI 对话路由只暴露查询 API。写入接口(/analytics/report、/analytics/reportBatch)不在 AI 可用 API 列表中,LLM 无法生成写入请求。即使 LLM 被 prompt injection 攻击,后端 API 白名单也会拦截。
八、企微通知设计
8.1 触发时机
| 场景 | 触发条件 | 频率 |
|---|---|---|
| 日访问量异常 | 当日值 vs 7 日均值,波动 > 30% | 每天 9:00 |
| 转化率骤降 | 漏斗最后一步转化率 < 历史均值 50% | 每天 9:00 |
| 数据归零 | 某事件当日数据为 0 | 每天 9:00 |
8.2 消息格式
1 | |
8.3 配置
1 | |
九、前端组件树(供独立前端项目参考)
1 | |
十、实施阶段
| 阶段 | 内容 | 工时 | 依赖 |
|---|---|---|---|
| 4.1 | 后端:ChartConfig DTO + 预设配置 API | 1 天 | — |
| 4.1 | 前端:ChartRenderer + 6 个子图表 + 预设看板 | 2-3 天 | 4.1 后端 |
| 4.2 | 后端:LlmService 接口 + OpenAiImpl + AiAnalysisService | 2 天 | 4.1 后端 |
| 4.2 | 后端:AiAnalysisController + 风控 | 1 天 | 4.2 后端 |
| 4.2 | 前端:ChatPanel + ConfigConfirmCard | 1-2 天 | 4.1 前端 |
| 4.3 | 后端:异常检测定时任务 + 企微推送 | 1 天 | 4.1 后端 |
| 4.3 | 前端:AlertBadge 组件 | 0.5 天 | 4.1 前端 |
| 4.4 | 后端:分享报告 API | 0.5 天 | 4.1 后端 |
| 4.4 | 前端:分享页 + 导出功能 | 0.5-1 天 | 4.1 前端 |
| 合计 | 9-13 天 |
最小可行版本(MVP)
如果时间紧张,只做 4.1 + 4.2 的核心功能(不含多轮对话上下文),约 5-7 天 即可上线一个可用版本。
十一、风险与缓解
| 风险 | 概率 | 影响 | 缓解 |
|---|---|---|---|
| LLM 解析不准确,生成错误的 ChartConfig | 中 | 中 | 强制展示参数确认卡片,用户可修改 |
| LLM 响应慢(>5s),用户体验差 | 中 | 高 | 后续加 SSE 流式返回;当前先设 15s 超时 + loading 动画 |
| 用户不知道怎么用 AI 对话 | 高 | 中 | 提供示例问题引导;4.1 预设看板作为保底方案 |
| 外部 LLM API 不稳定 | 低 | 高 | 预设看板不依赖 LLM,可独立使用 |
| 图表数据量大导致渲染卡顿 | 低 | 低 | ECharts 原生支持大数据量;表格分页 |
埋点产品交互方案设计
https://blog.baoyanfudao.com/tech/埋点前端交互设计/