news 2026/10/11 11:37:19

nao 图表可视化深入解析:在聊天中生成、分享可交互数据故事的完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
nao 图表可视化深入解析:在聊天中生成、分享可交互数据故事的完整指南

【免费下载链接】nao

👾 nao is an open source analytics agent. (1) Create context with nao-core cli, (2) deploy nao chat interface for everyone

项目地址:https://gitcode.com/gh_mirrors/nao4/nao
点击查看免费下载

nao 是一款开源分析智能体(Analytics Agent):先用nao-coreCLI 为智能体构建数据上下文,再部署一个所有人可用的聊天界面。它最吸引人的能力之一,就是nao Stories 与图表可视化——你在聊天里问一句“帮我看看近 90 天的收入趋势”,智能体不仅回答,还会直接生成可交互图表,并把多个图表、表格和文字组合成一份可分享、可下载、可离线打开的数据故事(Story)。本文带你完整拆解这套能力的实现原理与使用方法。

为什么要在聊天中生成数据故事?

传统 BI 工具的痛点很典型:分析师写好仪表盘,业务同学要等排期;换个问题,又要重新建模。nao 的思路是把「问数」和「呈现」合并在同一个聊天会话里完成:

  1. 自然语言提问→ 智能体生成并执行 SQL;
  2. 结果自动变成图表→ 柱状图、折线、KPI 卡片等 15 种内置可视化,即问即得;
  3. 图表升级为故事→ 多个图表 + 表格 + 叙述文本,组合成一份完整的数据报告;
  4. 一键分享→ 生成链接、嵌入页面,或导出 PDF / HTML 离线文件。

对业务用户来说,这意味着不需要学会任何仪表盘工具,就能把一次聊天对话沉淀为可复用的数据分析成果。📊

一键生成:在聊天中创建交互式图表

当智能体回答数据问题时,内部会调用display_chart工具把查询结果渲染成图表。该工具的参数定义在 apps/shared/src/tools/display-chart.ts 中,几个值得了解的设计:

  • 15 种内置图表类型:柱状、堆叠柱状(含百分比)、横向条形、折线、面积图、混合图、饼图、环形图、KPI 卡片、散点图、雷达图等,完整清单见 apps/shared/src/chart-types.ts;
  • 数值格式化:支持货币前缀($、€、¥)、百分号后缀、K/B 等紧凑单位,KPI 卡片还能展示环比变化;
  • 条件格式:可对表格单元格按阈值或色阶着色,异常值一眼可见;
  • 双轴混合图:同一图表里柱子表示金额、折线表示比率,适配量级差异大的指标对比。

生成的图表都是可交互的:悬停查看 tooltip 明细、切换系列、缩放坐标轴,而不是一张静态图片。

深入解析 Stories:classic 与 custom 两种格式

故事是 nao 的「可视化容器」。故事工具的输入输出 schema 定义在 apps/shared/src/tools/story.ts,它支持create / update / replace / publish / revert等操作,且每个故事都有版本管理——改坏了可以回滚到任意历史版本。

classic 格式:Markdown + 图表块

默认的经典故事是「Markdown 里的组件化文档」,智能体只需写出少量声明式块即可:

  • <chart query_id="..." />:嵌入一次查询结果的图表;
  • <table query_id="..." />:嵌入 SQL 结果表格;
  • <grid widths="2,1">...</grid>:把 2~4 个图表/表格并排布局,支持不等宽列;
  • <tab title="...">...</tab>:标签页式分区,把一份报告拆成多个视图。

比如一句“做一个收入仪表盘”的提示,智能体会自行决定用 KPI 卡片展示总额、用grid并排两张趋势图、再配一段文字结论,结构化的报告就此成形。

custom 格式:用 React 写故事应用

对于更复杂的交互需求,故事还可以是源代码级的 React 应用,文件放在/stories/<id>/下,从 story-kit starter 应用(nao.json、app.jsx、app.css)起步。可用的组件库定义在 apps/frontend/src/story-runtime/story-kit/ 中,包括:

组件用途
KpiCard带环比变化胶囊的核心指标卡
LineChart/BarChart/Chart折线、柱状及通用图表
DataTable可排序的查询结果表
Narrative自动生成的数据叙述文本
Slides/Slide幻灯片式分页展示
PointMap/MapTiles基于 Leaflet 的地图可视化

出于安全考虑,custom 故事只允许导入白名单内的模块(react、recharts、leaflet、@nao/story-kit等),白名单定义在 apps/shared/src/story-app.ts,编译不通过的版本不会被发布,错误会直接反馈给智能体继续修复。

分享与导出:把数据故事发给团队

故事做好后,nao 提供了三条分享路径:

  1. 分享链接:前端路由 apps/frontend/src/routes/_sidebar-layout.stories.shared.$shareId.tsx 支持将故事分享给同组织成员,也有独立的 embed 路由embed.story.$storyId.tsx供嵌入外部页面;
  2. 下载导出:后端路由/story/:storyId/download(见 apps/backend/src/routes/embed-story-download.ts)支持pdf与html两种格式(格式定义见 apps/shared/src/types.ts);
  3. 离线 HTML 故事:导出的 HTML 由 apps/shared/src/story-document.ts 构建——故事运行时、代码包和查询数据全部内嵌进文件,并附带严格的 CSP 安全策略。断网打开依然有 tooltip、翻页等完整交互,适合在邮件或会议中直接传递。

此外,live类型的故事(服务见 apps/backend/src/services/live-story.ts)支持按调度自动刷新数据,让仪表盘始终保持最新。

源码导读:故事与图表的核心模块

想深入理解实现,可以从以下入口读起:

  • 故事工具 schema:apps/shared/src/tools/story.ts
  • 图表类型与能力判定:apps/shared/src/chart-types.ts
  • 图表渲染块与主题:apps/shared/src/chart-block.ts、apps/shared/src/story-theme.ts
  • 前端故事运行时:apps/frontend/src/story-runtime/
  • 数据库中的故事表结构:apps/backend/migrations-postgres/0019_add_stories.sql

快速上手:从聊天到可分享故事

整个过程无需写代码,四步完成:

  1. 初始化项目:pip install nao-core后执行nao init,接入你的数据库;
  2. 启动聊天界面:nao sync && nao chat,浏览器打开http://localhost:5005;
  3. 提问并生成图表:直接用自然语言提问,得到图表后可继续追问“把这张图做成仪表盘”,智能体会创建 Story;
  4. 分享或导出:复制故事链接给同事,或下载 PDF / HTML 离线版本。

小结

nao 把「分析对话」和「数据呈现」打通了:聊天中即时生成 15 种可交互图表,再用 classic / custom 两种故事格式把结论沉淀为可版本管理的数据报告,最后通过链接、嵌入或离线 PDF/HTML 一键分享。对于希望让业务团队「自助式看数」的团队来说,这是一套开箱即用的开源方案。👾

【免费下载链接】nao

👾 nao is an open source analytics agent. (1) Create context with nao-core cli, (2) deploy nao chat interface for everyone

项目地址:https://gitcode.com/gh_mirrors/nao4/nao
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 11:34:34

猪脸识别工程实战:从数据集到推理脚本的完整落地路径

简介&#xff1a;这份资源是面向深度学习与计算机视觉学习者的猪脸识别工程文件及代码包&#xff0c;基于目标检测思路实现猪只面部特征的检测与识别&#xff0c;适合具备Python基础、希望了解深度学习在农业场景落地实践的中高级开发者参考。压缩包共34个文件&#xff0c;约17…

作者头像 李华
网站建设 2026/10/11 11:33:47

基于MAPPO的多无人机三维编队避障实现与训练调参实战

简介&#xff1a;MAPPO多无人机三维编队避障项目&#xff0c;围绕多智能体强化学习中的协同编队与动态避障问题展开&#xff0c;面向深度学习、人工智能方向的毕业设计、课程设计与期末大作业场景。压缩包共6个文件&#xff0c;含4个Python脚本、1个策略权重文件和1个Markdown说…

作者头像 李华
网站建设 2026/10/11 11:33:15

旧书数字化与AI数据管线:从扫描件到高质量训练语料

如果你关注人工智能行业动态&#xff0c;最近很可能刷到过一个话题&#xff1a;一些AI公司正在大量购买旧书&#xff0c;扫描完内容之后&#xff0c;甚至还会把纸质原书直接销毁。很多人把它当成猎奇新闻&#xff0c;但从数据工程师的视角看&#xff0c;这背后真正指向的&#…

作者头像 李华
网站建设 2026/10/11 11:31:35

Spring Boot家教管理系统:从业务闭环到工程化实践

1. 家教管理系统最容易被低估的部分&#xff1a;业务闭环这个题目在毕设和练手项目里出现频率极高&#xff0c;但十个人里有八个做成了"普通的后台增删改查"&#xff1a;教师表、学生表、课程表、订单表&#xff0c;配上几个下拉框和表格页面&#xff0c;就能应付答辩…

作者头像 李华
网站建设 2026/10/11 11:29:18

手搓生产级 AI Agent 系统(29):MCP接入选型与架构梳理

传输方式&#xff1a;stdio与SSE的工程分野 根据当前搜索到的社区资料&#xff0c;MCP的传输方式被多次描述为两类&#xff1a;stdio和SSE&#xff0c;其中stdio被提及为更常用的方式。需要说明的是&#xff0c;这属于社区层面的归纳&#xff0c;并非官方规范原文&#xff0c;实…

作者头像 李华
网站建设 2026/10/11 11:29:16

复试倒计时14天:冲刺期最值得做好的几件事

复试第十四天。这个标题里的数字&#xff0c;我猜有两种读法&#xff1a;一种是倒计时&#xff0c;距离复试还有十四天&#xff1b;另一种是正计时&#xff0c;复试已经结束十四天。我是从第一种读法写起的&#xff0c;去年这个时候&#xff0c;我正坐在图书馆的角落&#xff0…

作者头像 李华