首页
/ 使用 Fabric 的 enrich_blog_post 模式:为静态站点增强 Markdown 博客的完整指南

使用 Fabric 的 enrich_blog_post 模式:为静态站点增强 Markdown 博客的完整指南

2026-09-09 14:54:26作者:董宙帆

enrich_blog_post 是 Fabric 开源框架中一个专门面向 Markdown 博客写作与发布场景的模式(Pattern),其核心使命是:在保留原文一字不改的前提下,通过结构、排版与视觉元素的增强,让 Markdown 博文能够被静态站点生成器(Static Site Generator,SSG)更优雅地渲染成 HTML。读完本文,你将理解该模式的完整指令语义(身份设定、目标、五步工作流、MarginNote 处理规则、输出纪律),掌握在 Fabric CLI 中调用它的全部方式(含管道输入、输出落盘、流式输出与剪贴板),并学会通过环境变量为其绑定专属模型、通过别名把它变成一条日常命令。

一、模式定位:写给"发布前"的 Markdown 增强器

enrich_blog_post 的模式定义位于 data/patterns/enrich_blog_post/system.md,项目对它的官方描述是:"Enhances Markdown blog files by applying instructions to improve structure, visuals, and readability for HTML rendering"(见 data/patterns/pattern_explanations.md 第 119 条)。CHANGELOG.md 中也记录了该模式的引入历史(见 CHANGELOG.md)。

从模式文件的结构看,它属于 Fabric 中典型的"内容处理类"模式:不生成新观点、不重写文风,而是充当一个发布流水线中的预处理环节——输入是一篇草稿状态或排版粗糙的 Markdown 博文,输出是一份"结构更清晰、更适合渲染成 HTML 页面"的增强版 Markdown。

理解这个定位非常关键,它决定了该模式与 summarize(摘要)、humanize(去 AI 味)、improve_writing(润色)等模式的根本区别:enrich_blog_post 关注的是结构与呈现,而非内容本身

模式的内部组成

system.md 采用 Fabric 模式的标准分区格式,每个区块承担明确职责:

区块 作用 原文要点
IDENTITY 定义 AI 的角色设定 一个"超高智商 AI 系统",擅长按照指令增强 Markdown 博客,使其可被 SSG 正确渲染为 HTML
GOAL 明确目标 ① 按 INSTRUCTIONS 增强输入博客的结构、视觉与质量;② 保证最终 HTML 的最大可读性与可欣赏性
STEPS 规定执行流程 慢下来逐步思考 → 分析输入内容 → 审阅指令 → 应用增强 → 复查内容完整性
INSTRUCTIONS 具体的增强规则 符号与 NOTE: 段落 → 封装进 <MarginNote></MarginNote>
OUTPUT INSTRUCTIONS 输出纪律 只加增强、不加删改;不输出代码围栏包装
INPUT 输入占位 待处理的博客原文

说明:IDENTITY 中"4,312 IQ"这类夸张数字是 Fabric 提示词模式中常见的"角色激励"写法,其作用是引导模型进入高质量输出状态,而非对真实能力的量化声明。

二、五步工作流:从草稿到可发布文稿的执行路径

STEPS 区块规定了模型处理输入时的完整思考与执行顺序,理解这条链路有助于你预判模式行为、排查输出问题:

  1. 放慢节奏、逐步思考(Slow down and think)——先整体规划如何取得最佳增强效果;
  2. 分析输入内容——思考原文可以从哪些维度被增强:结构层次、排版可读性、链接补充、视觉标记等;
  3. 审阅 INSTRUCTIONS——对照下方指令,确定具体应用哪些增强手段;
  4. 应用增强——完美复刻输入博客,不改变任何实质内容,仅按指令对格式、结构、链接等进行增强;
  5. 完整性复查——确认增强过程中原文没有被改动,只允许增加排版、结构、链接等,不得新增、删除或修改任何措辞

这条工作流体现了该模式最重要的工程约束:"保真增强"。它把模型定位成一个"排版师"而不是"合作作者"——内容版权与文风完全属于原作者,模型只负责让文稿在静态站点上"更好看"。

三、核心指令解析: 符号与 <MarginNote> 渲染约定

INSTRUCTIONS 区块只有两条规则,但它们是整个模式的灵魂:

规则一: 符号 → MarginNote 封装

原文规定:

如果看到 符号,它表示一个 <MarginNote></MarginNote> 区块——一种类似旁注(aside)或 Callout 的视觉展示形式。观察附近的几行文字,判断哪些内容本应放进该 Callout 中,将它们合并为一行,并在输出阶段移入 <MarginNote></MarginNote> 标签内。

这意味着输入博客中可能存在作者用 标记的"待突出文本",模式需要:

  • 识别 符号位置;
  • 从上下文判断该 Callout 应包含的内容范围;
  • 将多行相关内容合并为单行
  • <MarginNote>...</MarginNote> 标签替换原始标记。

规则二:NOTE: 段落 → 同样的封装处理

任何以 NOTE: 开头的段落/文本,也要应用同样的封装逻辑,移入 <MarginNote></MarginNote> 标签。

为什么需要自定义标签:SSG 生态的常见做法

<MarginNote> 并不是标准 HTML 元素,而是由站点主题/模板约定的自定义渲染约定——静态站点生成器或其配套 CSS 会为该标签(或其对应的 class)定义"旁注/引用块"的视觉样式。这与 Fabric 仓库中另一个模式 data/patterns/md_callout/system.md 的思路一脉相承:后者使用 GitHub 风格的 > [!NOTE]> [!TIP]> [!IMPORTANT]> [!WARNING]> [!CAUTION] 五种 Callout 类型封装内容。区别在于:

  • md_callout 面向通用 Markdown 平台(如 GitHub 渲染);
  • enrich_blog_post 面向自建静态站点,使用项目自定义标签 <MarginNote>

因此,如果你要把增强后的博客部署到自己的 SSG,需要在主题模板中为 <MarginNote> 定义样式(例如侧边留白处的一段高亮引用、或带边框的 Callout 卡片),否则标签会被当作普通文本原样输出。

四、输出纪律:只增强,不增删改

OUTPUT INSTRUCTIONS 区块对模型输出提出了严格约束:

  • 只允许增加增强内容,不允许新增、删除或修改原文任何内容;
  • 必须遵循全部指令
  • 不得在输出 Markdown 外包裹代码围栏容器(如 ```markdown),只输出博客正文本身。

这条纪律的实际意义是保证幂等性与可追溯性:增强后的文稿与原文一一对应,作者可以方便地用 diff 工具审阅"模型到底改了什么",避免模型越权改写内容导致事实偏差或风格漂移。结合 STEPS 中的完整性复查,模式形成了"增强—校验"的闭环。

五、在 Fabric CLI 中运行 enrich_blog_post

Fabric 的模式通过 --pattern(短参数 -p)指定,因此运行该模式的标准命令为:

fabric -p enrich_blog_post

输入方式

模式从标准输入读取博客原文,典型用法:

# 从文件输入,结果打印到终端
cat my_blog_post.md | fabric -p enrich_blog_post

# 直接粘贴文本输入
fabric -p enrich_blog_post
# (随后粘贴 Markdown 原文,按 Ctrl-D 结束)

# 管道组合:抓取 URL 内容后直接增强
fabric -u "https://example.com/my-post" | fabric -p enrich_blog_post

注意:-u/--scrape_url 依赖 Jina AI 将网页抓取为 Markdown(见 internal/cli/flags.go),抓取结果再交给本模式增强,适合"从已有网页二次加工"的场景。

常用配套参数

参考 internal/cli/flags.go 中的 Flags 定义,以下参数与本模式组合最常用:

参数 说明 使用示例
-o, --output 将结果写入文件 fabric -p enrich_blog_post -o enhanced.md
--output-session 把整个会话(含临时会话)写入输出文件 fabric -p enrich_blog_post --output-session -o session.md
-s, --stream 流式输出 fabric -p enrich_blog_post -s
-c, --copy 结果复制到剪贴板 fabric -p enrich_blog_post -c
-m, --model 指定模型 fabric -p enrich_blog_post -m claude-sonnet-4-5
-V, --vendor 指定提供商 fabric -p enrich_blog_post -V "OpenAI" -m gpt-4o
-v, --variable 传入模式变量(如 -v=#name:value fabric -p enrich_blog_post -v=#style:minimal
-t, --temperature 采样温度(默认 0.7) fabric -p enrich_blog_post -t 0.3
--dry-run 只显示将发送给模型的内容,不真正发送 fabric -p enrich_blog_post --dry-run
-S, --setup 重新运行配置 fabric -S

其中 --dry-run 特别适合调试:在正式调用前先确认模式文件、变量与输入是否正确组装。

配置与模式加载机制

模式文件的加载与更新由 Patterns Loader 管理(见 internal/tools/patterns_loader.go):fabric -U/--updatepatterns 可从默认仓库(DefaultPatternsGitRepoUrl,模式目录 data/patterns)拉取最新模式集合;fabric -l/--listpatterns 可列出全部可用模式;fabric --readpattern enrich_blog_post 可在终端打印该模式的完整内容,便于你在调用前审阅指令细节。

六、为 enrich_blog_post 绑定专属模型与命令别名

按模式指定模型(环境变量)

internal/cli/chat.go 的源码可以看到,Fabric 支持"按模式映射模型":当指定了 --pattern 且未显式传入 --model 时,CLI 会构造环境变量名 FABRIC_MODEL_ + 模式名(大写、连字符转下划线)并读取其值;若值为 厂商|模型 格式则同时设定 vendor 与 model,否则仅设定 model。

因此,你可以在 shell 启动文件(如 ~/.bashrc)中为该模式固定一个高质量写作模型:

# 固定模型(只指定模型名)
export FABRIC_MODEL_ENRICH_BLOG_POST="gpt-4o"

# 同时指定厂商与模型
export FABRIC_MODEL_ENRICH_BLOG_POST="OpenAI|gpt-4o"

这样每次运行 fabric -p enrich_blog_post 都会自动使用该模型,无需重复 -m 参数。

为模式创建命令别名

README.md 中提供了为所有模式批量生成别名(alias)的脚本思路:遍历 ~/.config/fabric/patterns 目录下的每个模式目录,生成 alias pattern_name='fabric --pattern pattern_name' 形式的命令。套用到本模式即为:

alias enrich_blog_post='fabric --pattern enrich_blog_post'

之后即可直接用 enrich_blog_post < my_post.mdcat my_post.md | enrich_blog_post 调用。

七、输出后处理:thinking 块剥离与直接落盘

如果你开启了思考块(thinking)相关功能,模型输出中可能包含 <think>...</think> 之类的推理片段。Fabric 在 internal/domain/think.go 中提供了 StripThinkBlocks 函数,按起始/结束标签用正则((?s)startTag.*?endTag\s*,带正则缓存)剥离思考内容;CLI 侧的 --suppress-think 标志也会抑制思考文本的输出。因此在将增强结果写入博客文件前,建议:

cat my_post.md | fabric -p enrich_blog_post --suppress-think -o enhanced_post.md

八、实际工作流建议与注意事项

  1. 保留原文备份:虽然模式承诺"不改内容",但任何 LLM 输出都有不确定性,建议在增强前保留原文,增强后用 diff 工具核对差异是否符合预期。
  2. <MarginNote> 准备样式:若站点尚未定义该标签样式,增强结果中的标签会原样出现;可参照 md_callout 模式(data/patterns/md_callout/system.md)的 Callout 思路,为 <MarginNote> 设计对应的 CSS。
  3. 注意输入中的 NOTE: 标记:这两类标记是触发增强的关键信号;如果你希望原文中的某些内容保留原样,请确保它们不以 NOTE: 开头。
  4. 结合 --dry-run 调试:先跑一遍 --dry-run 确认发送给模型的完整提示词内容,避免变量替换或输入拼接错误。
  5. 别让它替你"写内容":该模式适合排版增强,若需要改写文风或压缩篇幅,应改用 improve_writingsummarize 等模式;各模式的定位差异可在 data/patterns/suggest_pattern/user.mddata/patterns/pattern_explanations.md 中查阅。

总结

enrich_blog_post 是一个小而精的"发布前置"模式:它以严格的内容保真为底线,通过 /NOTE:<MarginNote> 的标记转换、结构优化与可读性增强,让 Markdown 博文在静态站点上获得接近成品页面的呈现效果。配合 Fabric 的管道输入、输出落盘、按模式模型映射与命令别名机制,你可以把它无缝接入自己的写作发布流水线,实现"草稿进、可发布文稿出"的一键增强。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
docsdocs
暂无描述
Markdown
900
5.83 K
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.14 K
2.76 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
860
1.35 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
927
1.85 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.94 K
1.02 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
533
603
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.37 K
1.46 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
548
396
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.04 K
527