前言 每次写博客,我们可能要参考AI的回答,但是AI的回答的格式不是我们想要的,每次都要调整,我们可以把自己的要求写成一个Skill,这样生成的博客就会更符合我们的要求。
位置 .cursor/skills/blog-generator
其中blog-generator就是我们的技能文件夹
下面创建技能文件SKILL.md
技能内容 内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 --- name: blog-generator description: Generates Chinese technical blog posts in a structured tutorial format with Jekyll-style frontmatter and code blocks. Use when the user asks to write/generate a new blog post, markdown article, or a tutorial for Android/Web/Kotlin/etc. --- # 博文生成器(结构化教程) ## 使用方式(触发条件) 当用户提出以下诉求时使用本 Skill: - “生成/写一篇/写博文/新文章/教程/markdown”- 用户给出一个主题、技术栈或需求(例如:WorkManager 周期任务、后台调度、API 集成)## 核心目标 生成一篇可直接发布到 `source/_posts/` 的 `.md` 文件: - 顶部包含 YAML frontmatter(`layout/title/description/date/tags/categories` )- 正文使用中文分节,包含“前言/步骤/代码/验证/总结”等模块- 代码块尽量可运行,并在无法确定关键版本/配置时向用户提问或用通用写法并提示可能差异- 正文各章节之间不要出现分割线;特别是:**禁止正文出现单独一行的 `---`** (只允许 YAML frontmatter 起止的两个 `---` )- 章节标题尽可能简短(优先用 1 行短短语,如 `# 前言` / `# 依赖` / `# 实现` / `# 验证` / `# 总结` ),详细解释放在正文中## 先澄清(如关键信息缺失就提问) 生成前优先收集/确认这些信息(缺少就问用户): 1. 文章主题与标题要点(用户给了就复述确认)2. 目标技术栈(语言/框架/平台,例如 Android Kotlin、Node.js、Vue/Nuxt)3. 期望包含代码吗(默认:需要)4. 读者水平(新手/进阶/团队内部,默认:新手可读)5. 标签与分类(默认:从技术栈推断;若不明确就先给候选)## 生成工作流 按以下顺序组织正文内容(尽量贴近参考文章的节奏): 1. `# 前言` - 用 3-6 句描述“为什么做、解决什么问题、一个最小场景示例” - 如包含周期/异步/任务调度,写出关键限制或注意点(例如最小间隔、系统限制),但避免写死过期信息2. `# 依赖` (仅当需要代码/SDK 时) - 给出需要加入的依赖片段(Gradle/npm/版本用用户提供的;用户没给就给“示例版本”并标注“按项目实际调整”)3. `# 实现` (拆小节) - 每一步一个短标题:例如 `## 创建类` 、`## 调度任务` 、`## 监听状态(可选)` - 每个小节包含:关键代码 + 一两句解释4. `# 验证` - 提供如何验证是否工作(日志/断点/命令/接口返回)5. `# 扩展` (若主题合理) - 提供停止、取消、清理或替代方案(例如“按 tag 取消”“一次性延迟任务”等)6. `# 总结` - 用“步骤清单 + 注意事项”总结 - 可复用类似参考文章的写法(例如 `步骤` 、`注意` )7. `# 方法` (可选) - 用“方法类别/列表”收束:查询/取消/链式(按主题调整)## 输出格式要求(强约束) ### 1) 文件名与路径 - 默认写入建议路径:`source/_posts/{date}-{slug}.md` - `date` 默认使用今天(由系统环境决定时可由代理填写),格式 `YYYY-MM-DD` - `slug` 使用小写 kebab-case(例如 `android-workmanager-periodic-task` )### 2) YAML frontmatter(必须) 使用如下字段;字段值按主题替换: ```yaml --- layout: post title: { 标题 } description: { 一句话摘要 } date: { YYYY-MM-DD } tags: - { tag1 } - { tag2 }categories: { category } --- ``` 说明: - `tags` 与 `categories` 根据技术栈推断,若用户没给就先给候选,并在正文开头用一句话表明“可按需修改 tags/categories” ### 3) 代码块 - 每段代码使用带语言标记的代码块(例如 `kotlin` / `gradle` / `bash` / `ts`) - 不在 Skill 中输出 Windows 风格路径(正文里避免 `scripts\\xxx` 形式;需要路径就用正斜杠) ## 质量自检清单(生成前/生成后) 在给出最终文章前检查: - 标题与 `description` 是否准确对应主题 - 结构是否包含:`前言` + `步骤/依赖/代码(如需)` + `验证` + `总结` - 没有明显编造的 API/版本信息;不确定就用“示例/按需调整”或向用户提问 - 代码块能在读者视角下完成替换/迁移(例如类名、入口位置、依赖位置在文中出现) ## 写入文件指令(当用户允许“落地生成”时) 如果用户明确要“直接生成/写入文件/发布到 posts”,则: 1. 先在回复中展示最终文章内容与建议文件路径 2. 仅在用户确认后,再把内容写入 `source/_posts/` 对应文件 3. 如果用户没有确认写入,就只输出内容与路径建议 ## Examples **示例 1(用户只给主题)** Input: 生成一篇 Android Kotlin 教程:如何用 WorkManager 实现周期性同步,并教我怎么验证和取消。 Output: - 生成 frontmatter - `前言/添加依赖/创建 Worker/调度任务/监听状态(可选)/查看日志验证/取消/总结` **示例 2(用户要按特定结构)** Input: 按类似“前言 + 步骤 + 代码 + 查看日志验证 + 总结”风格,写一篇 Vue 组件通信的文章。 Output: - 使用同样的分节风格,替换成 Vue 对应代码块与验证方式
使用方式
写一篇关于Java的入门教程