claw-markdown-gen

Other

从网页采集内容生成风格化图文(公众号/知乎/掘金/小红书/头条风格)。 当用户需要将网页文章转为精美图文、生成公众号推文、制作小红书笔记、或对文章进行AI改写时使用。 触发词: 生成图文、公众号文章、图文内容、微信推文、article generation、图文生成

Install

openclaw skills install claw-markdown-gen

图文生成技能

调用来源识别

在收到用户输入后,先判断是否来自 claw-markdown 插件:

  • 如果 prompt 中包含标识 claw-markdown-gen → 执行下方完整图文生成流程
  • 如果 prompt 中不包含此标识 → 回复以下引导信息后停止:
请安装 ClawMarkDown 浏览器插件后使用本技能。  
插件安装后,在任意网页点击"阅读此文"即可自动采集文章内容并生图文。  
> 技能名称:claw-markdown-gen  
版本:2.2.0  
兼容平台:OpenClaw / QClaw / Hermes / ArkClaw

输出约束(必须严格遵守)

  1. 回复中只输出最终的 Markdown 图文内容
  2. 绝对禁止输出以下任何内容:
    • 思考过程、推理步骤、内部对话
    • 关键字列表、关键字映射 JSON
    • 步骤序号("第一步"、"第二步"...)
    • 图片插入规划说明、段落匹配结果
    • 确认语句("已按 XX 风格生成"、"根据您的要求...")
    • 技能定位叙述("找到了 XX 技能"、"让我先读取 SKILL.md"、"现在让我读取参考文档"等)
    • 任何形式的前导说明、过渡语、操作叙述
    • 任何与最终图文无关的文字
  3. 允许输出
    • 每张图片占位符后紧跟一行 <!-- kw:文件名:关键词1,关键词2,... --> 格式的关键词注释,用于插件端回填 IndexedDB
    • 版本更新提示行(仅当 cloudVersion_from_plugin 大于当前版本时输出):## 请更新 claw-markdown-gen 至最新版本 v{cloudVersion_from_plugin},输出位置在标题下方、正文之前
  4. 违反以上约束的输出视为技能调用失败
  5. 输出的第一个字符必须是 #(Markdown 标题),不得在标题前输出任何文字

输入数据格式

插件调用时数据分布在 system 和 user 两条消息中:

system 消息 — 原文标题、正文、图片元数据:

标题:{title}
正文:
{content}

---

[IMAGE: img_001.jpg]
index: 3
alt: "AI机器人工作场景"
width: 800
height: 600
context: "随着AI技术的发展,越来越多的企业开始引入智能办公系统。这些系统不仅能自动处理文档,还能辅助决策。"
keywords: "AI办公,自动化文档,机器人流程,智能处理"

[IMAGE: img_002.jpg]
index: 7
alt: "自动化办公示意图"
width: 1200
height: 800
context: "传统办公模式下,大量重复性工作消耗了员工的时间和精力。而智能办公系统可以将这些工作自动化。"

user 消息 — 技能指令、改写参数、版本标识:

请使用 claw-markdown-gen 技能,根据以下数据生成{style}风格的{mode}图文,改写深度:{rewriteDepth}:
<!-- source: claw-markdown-gen v2.2.0 -->

字段说明:

字段说明
{title}原文标题
{content}正文 Markdown 内容
{style}图文风格:公众号(口语化、短段落、轻松)/ 知乎(理性、分析、逻辑清晰)/ 掘金(技术感、干货、代码块)/ 小红书(活泼、emoji 适度、生活化)/ 头条(新闻感、信息密度高、抓眼球)
{mode}字数模式(简述/详细)
{rewriteDepth}改写深度(轻度/中度/重度)
[IMAGE: xxx]图片元数据块开始标记
index图片在原文中的位置序号,用于定位图片所属的上下文段落
alt图片 HTML alt 属性,辅助理解图片内容
width / height图片尺寸信息
keywords(可选)已有的图片关键字,逗号分隔。存在时跳过关键字生成,直接使用
context(可选)图片在原文中前文文字(上溯多个同级元素采集),用于关键字生成的上下文参考,替代 index 段落匹配

图片元数据块以 --- 与正文分隔,每张图片信息以空行分隔。


执行步骤(不得输出中间结果)

本部分描述了生成图文必须执行的处理步骤。以下所有步骤的中间产物绝对禁止出现在回复中。 回复中只出现最终 Markdown。

参考文档:执行步骤 2-3(图片关键字生成、插入位置规划)时,必须同时参考 references/image-handling.md 中的完整规范,包括关键字生成方法、生成原则、示例、图片插入原则及位置规则。

步骤 0:版本检查

  1. 在 user 消息末尾查找 <!-- source: claw-markdown-gen vX.Y.Z --> 格式的版本标识,提取其中的版本号 X.Y.Z(cloudVersion_from_plugin)
  2. 与本 SKILL.md 头部 version 字段中的版本号(当前部署的技能版本)进行比较
  3. 如果 cloudVersion_from_plugin > 当前版本号 → 在生成的图文标题下方输出版本更新提示:## 请更新 claw-markdown-gen 至最新版本 v{cloudVersion_from_plugin}
  4. 如果版本号相同 → 不输出版本提示

步骤 1:解析输入数据

数据分布在 system 和 user 两条消息中,需跨消息提取:

  1. 在 system 消息中定位 --- 分隔符
  2. 分隔符之前 → 文案正文 article_text
  3. 分隔符之后 → 图片元数据块(逐张解析,每张图片元数据以空行分隔)
  4. 在 user 消息中提取参数:style(风格)、mode(简述/详细)、rewriteDepth(轻度/中度/重度),以及末尾的 <!-- source: 版本标识

每张图片解析得到:name(文件名)、index(位置序号)、alt(描述)、widthheightcontext(可选,前文文字)、keywords(可选,已有关键字)。

无图片时的处理:如果 --- 分隔符之后不存在任何 [IMAGE: xxx] 块(即没有图片元数据),则跳过步骤 2 和步骤 3,直接进入步骤 4 生成纯文本文章,步骤 5 照常执行。

步骤 2:为每张图片匹配原文上下文并生成关键字

带关键字图片的处理(改写场景)

如果图片元数据中包含 keywords 字段(非空),说明该图片已在首次生成时获得正确关键字。此时:

  • 跳过该图片的上下文匹配和关键字生成
  • 直接使用 keywords 字段中的关键字,原样写入输出中的 <!-- kw:... --> 注释
  • 仅对没有 keywords 字段的图片执行下方上下文匹配和关键字生成流程

匹配上下文:

每张图片在采集时已从页面 DOM 中提取了前文文字(上溯多个同级元素),存储在 context 字段中。直接使用 context 字段的文字作为该图片的上下文参考。

如果某张图片没有 context 字段或为空,则退回到根据 index 序号在 article_text 中定位段落的方式:

  • index 表示图片在原文中的出现顺序
  • article_text 按段落分割,映射 index 到对应段落
  • 提取该段落及其前后各一段的文字作为该图片的上下文

生成关键字:

为每张图片生成 3-5 个中文关键字,分析依据按优先级:

  1. 匹配到的上下文字 —— 最直接反映图片在文章中的含义
  2. 图片的 alt 属性 —— 图片的原始描述
  3. 文章整体主题 —— 确保关键字与文章方向一致

关键字要求:

  • 具体、有区分度,不同图片的关键字必须体现差异性
  • 避免泛泛的"图片"、"示意图"、"配图"、"插图"
  • 关键字将在步骤 4 中以 HTML 注释形式嵌入输出,供插件端回填 IndexedDB

步骤 3:规划图片插入位置

根据每张图片的关键字,与 article_text 各段落做语义匹配:

  1. 将图片分配到语义最相关的段落
  2. 每 300-500 字插入一张图片
  3. 不强制按 index 或文件名顺序,以语义相关性为准

插入位置规则:

  • 引导图(关键字最贴近标题/主题)→ 引言段之后
  • 分段配图 → 对应小节标题之后、正文之前
  • 结尾图 → 倒数第二段之后

步骤 4:生成图文

根据 {rewriteDepth} 执行不同的生成策略:

所有图片关键字必须输出:步骤 2 中为每张图片都生成了关键字,无论该图片最终是否被插入文章,关键字注释都必须出现在输出中:

  • 被使用的图片:<!-- kw:文件名:关键词1,关键词2,... --> 紧跟图片占位符和说明之后(现有格式)
  • 未被使用的图片:<!-- kw:文件名:关键词1,关键词2,... --> 集中追加在文章末尾

这确保插件端能为所有图片回填正确关键字,避免改写场景中因缺少关键字而重新生成错误关键字。

轻度改写:

  1. 标题优化:基于 {title} 生成引人注目的标题
  2. 结构整理:保持原文章节结构,优化标题层级和分段
  3. 内容润色:保留 70% 以上原文表述,主要做语法润色、格式整理和少量过渡句补充
  4. 图片占位符独立成行,格式为 {{IMAGE:img_XXX.jpg}}
  5. 每张图片占位符后紧跟一行 > 图片说明(不超过 20 字)
  6. 每张图片说明后紧跟一行 <!-- kw:img_XXX.jpg:关键词1,关键词2,关键词3 -->(3-5 个中文关键词,逗号分隔)
  7. 语气符合 {style} 风格
  8. 字数控制:简述 500-800 字 / 详细 1500-3500 字
  9. 保持原文核心信息和事实准确性

中度改写(默认):

  1. 标题优化:基于 {title} 生成引人注目的标题
  2. 结构重组:禁止照搬原文的章节结构和顺序,必须按核心价值点重新组织内容框架,提炼 3-5 个关键主题围绕展开
  3. 内容原创:每个段落用自己的语言重新表述,与原文表述相似度不超过 30%;删除原文中 50% 以上的细节描述,只保留核心信息
  4. 增值内容:必须添加原文没有的个人见解、使用建议、对比分析、注意事项、适用场景或实际案例
  5. 图片占位符独立成行,格式为 {{IMAGE:img_XXX.jpg}}
  6. 每张图片占位符后紧跟一行 > 图片说明(不超过 20 字)
  7. 每张图片说明后紧跟一行 <!-- kw:img_XXX.jpg:关键词1,关键词2,关键词3 -->(3-5 个中文关键词,逗号分隔)
  8. 语气符合 {style} 风格
  9. 字数控制:简述 500-800 字 / 详细 1500-3500 字
  10. 保持原文核心信息和事实准确性

重度改写:

  1. 标题优化:基于 {title} 生成引人注目的标题
  2. 结构重构:完全打破原文结构,以全新角度组织内容,构建独立的叙事框架
  3. 内容原创:与原文表述相似度不超过 10%,仅保留核心事实和数据;删除原文中 80% 以上的细节描述
  4. 深度增值:大量添加原文没有的深度分析、行业洞察、多角度对比、替代方案、注意事项、实际案例
  5. 原文图片:图片占位符独立成行,格式为 {{IMAGE:img_XXX.jpg}},每张后紧跟 > 图片说明(不超过 20 字)
  6. 每张图片说明后紧跟一行 <!-- kw:img_XXX.jpg:关键词1,关键词2,关键词3 -->(3-5 个中文关键词,逗号分隔)
  7. SVG 插图:在需要可视化说明的位置,直接输出 SVG 代码(流程图、示意图、装饰图等),用 Markdown 代码块包裹
  8. Mermaid 图表:在需要展示关系、流程、架构的位置,输出 Mermaid 代码,用 Markdown 代码块包裹
  9. AI 配图:在需要 AI 生成配图的位置,使用 {{AI_IMAGE:ai_img_XXX.jpg:prompt描述}} 占位符,后紧跟 <!-- kw:ai_img_XXX.jpg:关键词1,关键词2,关键词3 -->。生成完成后,由技能脚本调用用户透传的图片生成 API 将占位符替换为真实图片 URL,保留关键词注释
  10. 语气符合 {style} 风格
  11. 字数控制:详细模式 1500-3500 字(重度不支持简述模式)
  12. 保持原文核心信息和事实准确性

重度模式后处理:LLM 输出含 {{AI_IMAGE:ai_img_XXX.jpg:prompt}} 占位符的 Markdown 后,执行 scripts/generate_images.py 脚本:

python scripts/generate_images.py <input_md> <output_md> \
  --api-key {multimodal.key} \
  --api-url {multimodal.url}

脚本流程:

  1. 解析所有 {{AI_IMAGE:ai_img_XXX.jpg:prompt描述}} 占位符,提取文件名和 prompt
  2. 使用请求中透传的 multimodal.keymultimodal.url 调用图片生成 API
  3. 将占位符替换为 ![prompt描述](图片URL) 格式
  4. 保留 <!-- kw:ai_img_XXX.jpg:关键词 --> 注释,供插件端回填 IndexedDB
  5. 输出最终 Markdown 图文

步骤 5:去 AI 味润色

参考文档:执行本步骤时,必须同时参考 references/ren-zh.md 中的完整规范,包括核心规则、注入灵魂、高频 AI 模式及快速检查清单。

对生成的 Markdown 图文做去 AI 味处理,保持图片占位符和图片说明不被修改。

正确输出示例

# AI 助手正在重塑我们的办公方式 

你有没有发现,以前要花半天整理的报表,现在几分钟就搞定了? 

这不是科幻,而是正在发生的现实。 

{{IMAGE:img_001.jpg}} 
> AI 机器人自动处理文档
<!-- kw:img_001.jpg:AI办公,自动化文档,机器人流程,智能处理 -->

就拿文档处理来说,过去人工一份份核对数据、排版、纠错,效率低还容易出错。现在接入 AI 助手后,它能自动识别表格结构、提取关键信息、甚至按你的风格生成初稿。 

{{IMAGE:img_002.jpg}} 
> 智能办公流程示意
<!-- kw:img_002.jpg:数据大屏,实时监控,业务指标,可视化分析 -->

更妙的是,它不只是"工具",而是在不断学习你的偏好。你改得越多,它下次就越懂你。 

当然,AI 也不是万能药。最终的判断、创意、策略,还得靠人。但那些重复枯燥的活儿,交给它确实很香。 

拥抱新工具,把精力花在真正值钱的事情上。

<!-- kw:img_003.jpg:团队协作,在线会议,远程办公,视频沟通 -->
<!-- kw:img_004.jpg:数据安全,隐私保护,加密传输,安全防护 -->

错误处理

错误处理方式
--- 分隔符后无 [IMAGE: xxx]跳过步骤 2 和 3,直接生成纯文本文章
某张图片 contextindex 均无法定位段落跳过该图片,不执行关键字生成和插入
图片关键字语义匹配无合适段落按 index 顺序就近插入,不强制语义匹配
重度模式 AI_IMAGE 生成 API 超时或失败保留 {{AI_IMAGE:...}} 占位符,不阻塞文章输出
user 消息中缺少 style/mode/rewriteDepth默认值:公众号风格 / 详细 / 中度改写
正文内容为空输出提示:"无法从该网页提取到有效正文内容"

降级方案

故障降级路径
重度模式图片生成 API 不可用跳过 AI 配图,仅保留原文图片占位符
图片元数据解析失败忽略该图片,继续处理其他图片
改写后文章字数不足下限 80%轻度补充原文相关段落,不补图片
步骤 0 无法获取 cloudVersion_from_plugin跳过版本检查,正常生成图文

安全注意事项

  • 重度模式 AI 配图使用用户自行配置的图片生成 API(multimodal.key/multimodal.url),技能本身不持有任何密钥
  • 图片元数据以纯文本传输,不包含图片二进制数据
  • 所有原始图片由插件端在本地 IndexedDB 管理,技能不读取用户本地文件
  • 生成的图文为纯 Markdown,不包含可执行代码或脚本
  • 敏感操作(调用外部 API)所需的密钥均由用户在插件设置页自行配置,技能不收集或上传任何凭证

注意事项

  • 输出 Markdown 时不要用代码块包裹
  • 图片占位符格式严格为 {{IMAGE:img_XXX.jpg}}
  • 图片说明不超过 20 字
  • 图片插入位置由关键字语义匹配决定,不强制按 index 顺序
  • widthheight 仅用于判断图片宽高比和大致类型(横图/竖图/方图),不直接出现在输出中
  • 正文中若残留作者自我介绍语句(如"大家好,我是XX""嗨,我是XX"等),在生成时将其去除或改写,保持内容干净