腾讯以Dola执行数据分析并改进图表推荐
概述
Dola 是腾讯 PCG 大数据平台部基于 Agentic AI 能力开发的数据分析助手:用户引入个人数据表后可用自然语言提出需求,由它自主规划并执行取数、跑数、异动归因、画像对比分析、股票基金回测、房价预测等任务,自行编写 SQL、纠正 SQL 错误、执行查询、用 Python 做数据处理与可视化,并生成完整分析报告,报告中还可产出插画、静态网页与看板。前端针对「自动生成可视化图表」环节做了工程化改造:团队调研 AntV/AVA 等主流图表推荐库后认为其完全基于数据特征(字段类型、基数、分布)推荐,无法推断用户在 AI 对话场景下的分析意图,改为「工程化推荐 + 大模型微调」——前端在绘图前除数据外还能拿到生成数据的 SQL 与用户原始 prompt,据此建立三维评分机制,给候选图表打分后输出得分最高的图表类型与配置,用户不满意时再让大模型在已有配置上做局部修改;SQL 中的 GROUP BY、ORDER BY ... LIMIT、聚合函数与时间范围分别用于识别维度、TopN 意图、度量与趋势可行性,prompt 中的「趋势/对比/占比/分布/异常」等关键词用于区分相同查询结果下的不同意图,评分规则覆盖时间趋势、分类对比、占比分析、TopN、分布、相关性与多维探索并各带反向条件。复杂多维数据场景下推荐准确率从 55% 左右提升到近 90%;另补充交互式二次探索、大数据量自动采样与缩略图导航、多度量量纲差异自动双 Y 轴、数值方差极大时自动对数坐标等展示规则。 针对 LLM 流式对话中的代码块展示,团队先复用自研 2.x(Worker + OffscreenCanvas 离屏渲染,补齐流式选中与组件内搜索,新增代码块稳定后降级为静态图片的智能模式),再升级到 3.0:核心不是把 Canvas 换成 DOM,而是把两者收编为同一门面下的两个 renderer。DOM 模式底层用 CSS Custom Highlight API,代码以单个 textNode 存在、着色通过 CSS.highlights 注册的 Range 与 ::highlight() 伪元素完成,不创建任何 span,流式追加只是 textNode.appendData(),DOM 结构不变,选区、Ctrl+F 与屏幕阅读器基于原始文本节点工作;Canvas 模式保留给 3000 行以上超大代码与水印防复制场景并继承 2.x 的静态图片降级。多线程方面 Canvas 模式在 Worker 内完成 tokenize 与 OffscreenCanvas 绘制,DOM 模式 Worker 只做 tokenize,token 流回主线程由 CssHighlightPainter 转成 Range 注册,hljs.highlight() 不再压在主线程;调度上采用文本同步追加 + 着色异步节流(rAF 而非 setTimeout)双轨、Worker 启动期小代码主线程兜底、大代码等齐 Worker。业务侧只需持续调用 updateCode(完整代码),token 边界与 chunk 边界对齐交给调度器。实测:20 轮对话 DOM 节点数由 highlight.js 的约 15000 降至 3.0 的约 500(2.x 为约 300 个 Canvas 节点),主线程 >50ms 长任务由 12 次降至 1 次(2.x 3 次),30 分钟对话内存占用由约 180MB 降至约 55MB(2.x 约 90MB),流式选中与 Ctrl+F 检索由不支持变为原生支持。