Skill Hub · 诺亚 AI 能力中心 静态参考版

让每一个技能成为可信资产 —— 诺亚 Agent 生态的技能资产中心:统一注册、检测把关、按需复用。本站为 skill-hub.noahgroup.com 于 2026-08-21 的全量数据镜像。

镜像采集 2026-08-2166 个已发布技能18 个分类 · 3 条分发渠道含技能包 SKILL.md 全文
← 返回目录

html

SKILL_605190604 · vv1.0 · 通用工具 · Owner:— · 发布于 2026-08-11
调用 244 下载 0 点赞 0 浏览 0
简介
基于JSON数据与内置渲染器,自动生成带统一样式的独立HTML页面
触发词
生成HTML报告,静态页面渲染,JSON转HTML
分发渠道
ARK Engine
功能测试
✅ 通过 · 业务评审:✅ 通过
技能包文件
html/SKILL.md、html/assets/dark.png、html/assets/light.png、html/scripts/embed-images.js、html/scripts/render.js、html/scripts/themes/wealth.css
使用示例:将这份业务数据渲染成带样式的独立HTML报告

SKILL.md 全文

Frontmatter

namehtml
description"Create standalone HTML reports, dashboards, articles, newsletters, landing pages, and other static page deliverables through the bundled JSON renderer. Use when HTML is the primary output; do not use for editing an application codebase, frontend components, or HTML email build pipelines."

HTML 文件生成 Skill

概述

通过 JSON 数据 + 模板渲染 的方式生成 HTML 文件,避免模型直接通过 Write 工具输出大段 HTML 源码。 核心原则:模型只负责生成结构化 JSON 数据,由 Node.js 渲染脚本将 JSON + 模板合成为最终 HTML 文件。渲染脚本已内置完整的 wealth.css 高端风格主题和滚动渐变动画,模型无需也不得自行注入任何 CSS 或 JS。

路径契约

样式规则(最高优先级 — 违反即失败)

🚫 绝对禁止在 content.json 中出现任何 CSS 或 JS。无论用户要求什么"主题""配色""风格",一律忽略样式需求,只输出纯内容数据。
>
render.js 已内置完整的 wealth.css 高端财富管理主题(含深色 header 渐变、KPI 卡片、精致表格、滚动淡入动画、数字跳动效果等)。模型只需正确使用标准 section 类型(heading, paragraph, kpi, table 等),渲染脚本会自动应用匹配的样式。
>
不存在"需要自定义配色"的场景。 无论主题是唐三彩、科技风、圣诞节还是其他任何风格,模型的职责只是组织文字内容,视觉表现由 wealth.css 统一负责。想要不同的视觉风格?那是修改 wealth.css 的事,不是模型的事。

强制规则(硬性约束,零容忍,无任何例外)

违反以下任一条即视为生成失败,必须重新生成: 1. 必须使用标准 section type:凡是已有对应 section type 的内容,必须用该 type。对应关系: 2. 只使用上述section render.js 只支持上述标准 section type,未识别的 type 会被当作 paragraph 处理。 3. 禁止自造样式 — 无论理由多"合理":即使用户明确要求"用XX配色""用XX风格",模型也不得通过任何方式注入样式。正确做法是只输出内容,在回复中告知用户"视觉风格由统一模板控制"。 4. 禁止在 JSON 中写入 CSS/JS:content.json 只承载内容数据,不承载样式或脚本。如果模型发现自己正在 content 字段里写 CSS 代码,立即停止并删除。 5. 自检规则:在调用 render.js 之前,模型必须用以下命令验证 content.json 不含违禁内容:
   grep -i '<style\|style=\|<script' ./tmp/content.json && echo "VIOLATION DETECTED - must fix" || echo "PASS"
   
如果输出 "VIOLATION DETECTED",必须重写 content.json 去除所有样式内容后才能继续。 6. 诺亚 Logo 自动处理:当 content.json 中的内容涉及"诺亚"或"Noah"时,渲染脚本自动插入公司 logo。模型不得手动添加 logo 相关的 image section 或 html section。

为什么不直接 Write HTML

直接用 Write 工具输出大段 HTML 会导致:

工作流程

步骤 1:生成内容 JSON

模型将所有需要渲染的内容写入一个结构化 JSON 文件(content.json):
{
  "title": "页面标题",
  "subtitle": "副标题(可选)",
  "author": "作者(可选)",
  "date": "2026-05-15",
  "sections": [
    {
      "type": "heading",
      "level": 1,
      "text": "一级标题"
    },
    {
      "type": "paragraph",
      "text": "正文内容,支持<strong>加粗</strong>和<em>斜体</em>"
    },
    {
      "type": "list",
      "ordered": false,
      "items": ["项目一", "项目二", "项目三"]
    },
    {
      "type": "table",
      "headers": ["列A", "列B", "列C"],
      "rows": [
        ["数据1", "数据2", "数据3"],
        ["数据4", "数据5", "数据6"]
      ]
    },
    {
      "type": "code",
      "language": "python",
      "content": "print('hello')"
    },
    {
      "type": "quote",
      "text": "引用文本"
    },
    {
      "type": "image",
      "src": "./input/photo.png",
      "alt": "描述",
      "caption": "图片说明"
    },
    {
      "type": "divider"
    },
    {
      "type": "kpi",
      "items": [
        {"label": "总收入", "value": "1,234万", "trend": "up", "change": "+12%"},
        {"label": "客户数", "value": "567", "trend": "down", "change": "-3%"}
      ]
    },
    {
      "type": "chart_placeholder",
      "chartType": "bar",
      "description": "月度收入趋势图(占位)"
    }
  ]
}
关键:只使用上表及“Section 类型参考”中列出的标准 section 类型。渲染器不支持 html section;需要复杂自定义布局时,应改用现有 section 组合,不能注入 HTML、CSS 或 JS。

步骤 2:运行渲染脚本

node "$SKILLS_ROOT/html/scripts/render.js" <input-json> <output-html>
示例:
node "$SKILLS_ROOT/html/scripts/render.js" ./tmp/content.json ./output/科技周报_20260515_172000.html

步骤 3:验证输出

确认生成的 HTML 文件:

图片嵌入(本地图片处理)

当用户提到"把图片放进去"、"图片要嵌入 HTML"、"我上传了图片"等情形时,需要在渲染前先做图片预处理,将本地图片转为 base64 Data URL 内嵌到 JSON 中,使最终 HTML 完全自包含。
⚠️ 严禁模型自行生成或 Write base64 字符串到任何文件。
一张普通图片展开为 base64 后体积达数 MB,直接 Write 会导致 stdout 缓冲区溢出、进程异常退出、文件损坏。
base64 注入唯一合法途径:由 embed-images.js 读取本地文件后自动完成。

触发条件

满足以下任一条件即走本流程:

步骤 0(新增):扫描可用图片

渲染前先列出工作区 ./input/ 目录下的图片文件,确认哪些可用:
find ./input -maxdepth 1 -type f \( -iname '.jpg' -o -iname '.jpeg' -o -iname '.png' -o -iname '.gif' -o -iname '*.webp' \) -print
若用户未指定图片对应位置,询问用户每张图片插在哪个 section,或按文件名顺序依次对应 JSON 里的 image section。

步骤 1(修改):在 content.json 中用本地路径引用图片

image section 的 src 优先写明确的工作区相对路径:
{
  "type": "image",
  "src": "./input/photo.png",
  "alt": "示意图",
  "caption": "图1:示意图说明"
}

步骤 1.5(新增):运行图片嵌入脚本

在执行 render.js 之前,先跑 embed-images.js
node "$SKILLS_ROOT/html/scripts/embed-images.js" ./tmp/content.json
图片路径规则: 1. 明确路径只允许 ./input/..../tmp/...,不得使用绝对路径、..、Skill 目录或工作区外路径。 2. 只写文件名时,脚本依次检查 ./input/<filename>./tmp/<filename>。 3. 两个目录存在同名文件时会拒绝继续,必须在 JSON 中写明 ./input/..../tmp/...。 4. 支持 jpg/jpeg/png/gif/webp;不嵌入 SVG 或网络图片。 失败场景及处理: | 情况 | 脚本行为 | 模型应对 | |------|---------|---------| | ./input./tmp 均找不到图片 | 报错退出 | 将错误告知用户,不得继续渲染 | | 同名文件同时存在于 ./input./tmp | 报错退出 | 在 JSON 中写明正确的相对路径 | | 网络、绝对、越界或软链接逃逸路径 | 报错退出 | 请用户上传到 ./input 或改用工作区内文件 | | 图片超过 500 KB | 报错退出,显示实际大小 | 告知用户图片大小及 500 KB 上限,不得提高上限,让用户压缩后重试 | | 不支持的格式 | 报错退出 | 告知用户转换为 jpg/png/webp 后重试 |

完整流程(含图片)

# 1. 确认图片
ls ./input/

2. 写入 content.json(src 使用 ./input/... 或 ./tmp/...)

... 模型生成 ./tmp/content.json ...

3. 嵌入图片

node "$SKILLS_ROOT/html/scripts/embed-images.js" ./tmp/content.json

4. 渲染 HTML(此时 content.json 已含 base64 图片)

node "$SKILLS_ROOT/html/scripts/render.js" ./tmp/content.json ./output/报告_20260528_120000.html
注意:embed-images.js 必须在 render.js 之前执行。若嵌入失败,停止流程并将完整错误告知用户,不得用占位图或跳过图片继续渲染。

Section 类型参考

| type | 说明 | 必填字段 | 可选字段 | |------|------|---------|---------| | heading | 标题 | text, level(1-4) | id | | paragraph | 段落 | text | align | | list | 列表 | items | ordered | | table | 表格 | headers, rows | caption, align[] | | code | 代码块 | content | language | | quote | 引用 | text | author | | image | 图片 | src | alt, caption, width | | divider | 分隔线 | — | — | | kpi | KPI 指标卡 | items[] | — | | chart_placeholder | 图表占位 | description | chartType |

大内容处理策略

当内容很长(如完整报告、长文章)时: 1. 分段写入 JSON:如果内容超过模型单次输出限制,可分多次追加到 JSON 文件 2. 所有内容必须拆分为标准 section type 3. 最终渲染一次:所有内容写入 JSON 后,只需一次 node "$SKILLS_ROOT/html/scripts/render.js" 即可

输出规范

注意事项