Communitygithub.com

数据记者智能体 (Data2Story)

将原始数据转化为可验证的多模态故事博客。

数据记者智能体 (Data2Story) 是什么?

这个“数据记者智能体”(Data2Story)是一个用于 AI 编码助手(如 Claude Code)的技能,它能够自动将原始数据集转化为一个完整的、可追溯的多模态 HTML 博客。该技能的核心是一个由七个角色组成的流水线:侦探(背景调研)、分析师(定量分析)、编辑(叙事决策)、设计师(多媒体视觉设计)、程序员(HTML 实现)、审计员(布局修复)和检查员(可追溯性验证)。 它特别强调“可验证性”:流水线中的每个环节都会生成带有唯一 ID 的发现,这些 ID 会像链条一样贯穿整个流程,最终 HTML 页面中的每个数据点都能通过 `data-*` 属性追溯到原始的分析代码和背景信息。这避免了 AI 生成内容中常见的幻觉问题,非常适合数据新闻、研究报告和演示场景。 该技能支持 OpenRouter,并集成了文本生成图像、视频、音乐等多种媒体工具。它要求用户在运行前设置 `OPENROUTER_API_KEY`,并会自动解析路径和创建项目目录。流水线的媒体丰富性门控机制会确保博客默认使用图表、图片、视频、音频和交互式地图等多种媒体形式,除非数据本身不支持。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add QinghongLin/data2story-skill

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

数据记者智能体 (Data2Story) 是做什么的?

将 $ARGUMENTS 转化为博客。按顺序编排以下角色。

设置

在执行任何操作之前,先解析路径:

  • 切勿硬编码机器本地路径,也不要要求用户导出路径变量。
  • 解析 SKILL_DIR = 包含此 SKILL.md 的目录(.../skills/data2story)
  • 解析 ARCHIVE_DIR = 包含 skills/ 的上级目录(SKILL_DIR 的上两级,即 SKILL_DIR/../..)
  • 解析 DATA2STORY_ROOT = ARCHIVE_DIR 的父级目录
  • 以下命令使用符号占位符,例如 ARCHIVE_DIR;在运行 Bash 之前,将它们替换为已解析的、带引号的实际路径。
  • DATA_NAME = 数据集文件夹名称(例如 pick_a_card)
  • DATA_DIR = 如果 $ARGUMENTS 是已有路径,则使用该路径;否则使用 DATA2STORY_ROOT/data/{DATA_NAME}
  • TIMESTAMP = 当前时间,格式为 MMDD_HHMM(例如 0401_1618):date +%m%d_%H%M(在 bash 中运行)
  • PROJECT_DIR = DATA2STORY_ROOT/project/{DATA_NAME}/blog_{MODEL}_{TIMESTAMP}
  • 创建 PROJECT_DIR/、PROJECT_DIR/assets/、PROJECT_DIR/code/

归档

创建 PROJECT_DIR 后,立即对当前技能进行快照:

mkdir -p PROJECT_DIR/archival
cp -r ARCHIVE_DIR/skills PROJECT_DIR/archival/skills

这可以保留本次运行所使用的确切技能版本。

可用工具

所有媒体工具均通过 OpenRouter 路由。在进行任何生成调用之前,请设置 OPENROUTER_API_KEY。

媒体生成是设计师的工作,因此媒体工具(text2image、text2video、image2video、text2music、embeddings)位于 SKILL_DIR/designer/scripts/openrouter-*/ 目录下。完整列表——默认模型和确切的 python3 ... 调用——在 designer/references/tools.json 中;每个工具的完整文档位于 SKILL_DIR/designer/scripts/openrouter-*/ 下该工具自身的 SKILL.md 中。

流水线概览

该流水线是一个单一的线性序列,从原始数据生成一个可追溯的 HTML 博客:

数据 → 侦探 → 分析师 → 编辑 → 设计师 → 程序员 → 审计员 → 检查员 → 最终的 index.html + viewer.html

按顺序运行每个阶段。每个阶段在开始前都会读取之前的工件。在当前工件完成之前,不要进入下一阶段。

阶段 1 — 侦探

输入:DATA_DIR 输出:PROJECT_DIR/detective.json 作用:研究外部背景——领域知识、历史背景、相关发现、这些数据为何重要。每个发现都有一个 det_xx ID。

阶段 2 — 分析师

输入:DATA_DIR、PROJECT_DIR/detective.json 输出:PROJECT_DIR/code/*.py、PROJECT_DIR/analyst.json 作用:在侦探提供的背景信息指导下,对数据进行详尽的定量分析。所有代码都作为可运行脚本保存到 code/ 中。每个发现都有一个 ana_xx ID,包含 calculation(文件+行+输出)和 data_table(可用于图表的数据)。

阶段 3 — 编辑

输入:PROJECT_DIR/detective.json、PROJECT_DIR/analyst.json 输出:PROJECT_DIR/editor.md、PROJECT_DIR/editor.json 作用:编辑决策——哪些发现重要,叙事弧线是什么,博客的论点是什么。每个部分都有一个 edt_xx ID,并明确引用 ana_xx 发现和 det_xx 背景。不涉及视觉设计。

阶段 4 — 设计师

输入:PROJECT_DIR/editor.md、PROJECT_DIR/editor.json、PROJECT_DIR/analyst.json 输出:PROJECT_DIR/designer.json、PROJECT_DIR/assets/* 作用:数据驱动的创意视觉决策——如何使用图表、图片、视频、音频、地图、交互式元素、数据标注、实例或在适当时仅使用文本来呈现每个要点。媒体组合应基于数据集的属性自然生成,而不是固定的清单。页面默认应多媒体丰富:借鉴来自 frontend-design 技能的视觉语言,并使用所有五个渠道(图表、图片、视频、音频、交互式/地图),除非某个渠道的文档化回退策略会导致虚构或纯装饰性的内容。每个视觉元素都有一个 des_xx ID,包含 data_source,在数据驱动时指向 ana_xx 的 data_table。生成精选的资产。不生成 HTML。

阶段 5 — 程序员

输入:PROJECT_DIR/editor.md、PROJECT_DIR/editor.json、PROJECT_DIR/analyst.json、PROJECT_DIR/designer.json 输出:PROJECT_DIR/index.html 作用:用 HTML 实现最终的博客。应用 designer.json 中 page_rhythm 记录的主题/强调色,并借鉴来自 frontend-design 技能的组件和令牌配方。从 analyst.json 的 data_table 中解析图表数据(不允许直接访问原始数据)。为每个元素添加 data-edt、data-ana、data-det、data-des 属性以实现可追溯性。

阶段 6 — 审计员

输入:PROJECT_DIR/index.html 输出:PROJECT_DIR/index.html(已修改)、PROJECT_DIR/auditor.json 作用:检测并修复布局问题(重叠、间距、对齐),但不更改内容或设计意图。在程序员之后自动运行,以确保视觉元素正确换行和间距。

调用:Skill auditor PROJECT_DIR

阶段 7 — 检查员

输入:PROJECT_DIR/index.html、所有 JSON 文件 输出:PROJECT_DIR/inspector.json、PROJECT_DIR/viewer.html 作用:运行句子级的可追溯性验证,并生成一个交互式查看器。分两步:

python3 SKILL_DIR/inspector/scripts/verify.py PROJECT_DIR --log-errors
python3 SKILL_DIR/inspector/scripts/generate_viewer.py PROJECT_DIR

步骤 1 生成 inspector.json(句子→证据映射)。步骤 2 生成 viewer.html(自包含,可在 file:// 下工作,无需服务器)。详细信息请参见 inspector/SKILL.md。

可追溯性:ID 在流水线中的流转

det_01 ──┐
det_02 ──┤
         ├──▶ ana_01 (based_on: [det_02]) ──┐
         │    ana_02 (based_on: [])          ├──▶ edt_01 (findings: [ana_01, ana_02], context: [det_01]) ──▶ des_01 (section: edt_01, data_source: ana_01)
         │    ana_03 (based_on: [det_01])    │    edt_02 (findings: [ana_03], context: [det_02])         ──▶ des_02 (section: edt_02, data_source: ana_03)
         └────────────────────────────────────┘

最终 HTML 中的每个值都可以追溯:HTML data-des="des_01" → designer.json des_01.data_source="ana_01" → analyst.json ana_01.calculation.code → 可验证。

交接规则

  • 每个工件必须在下一阶段开始前完成。
  • 如果工件缺少必需的章节,请先修复它再继续。
  • 媒体丰富性门控(在设计师之后、程序员之前): designer.json 应涵盖所有五个通道(图表、图片、视频、音频、交互式或地图)。对于任何标记为 used:false 的通道,确认其文档化的回退策略已被实际尝试过,并且已在 meta.media_decisions 中记录了基于数据的理由。如果某个通道因为图省事而非数据不支持而被跳过,则应在程序员运行之前将其送回给设计师。
  • 所有生成的资产仅放在 PROJECT_DIR/assets/ 中。
  • 最终交付物:PROJECT_DIR/index.html、PROJECT_DIR/detective.json、PROJECT_DIR/analyst.json、PROJECT_DIR/code/*.py、PROJECT_DIR/editor.md、PROJECT_DIR/editor.json、PROJECT_DIR/designer.json、PROJECT_DIR/inspector.json、PROJECT_DIR/viewer.html。

相关技能