借助Trae - 做一个思维导图转换为博客的Skill
本文的话想和大家聊一聊我在Trae上使用AI Skills的一次初体验。最近AI圈最火的概念应该就是AI Agent了,而伴随着AI Agent一起火起来的还有MCP(Model Context Protocol)和Skill。每次在ProcessOn上用思维导图记录完学习内容后,都需要手动整理成博客文章。这个过程非常繁琐且重复,于是我就想能不能借助AI Skill来自动化这个过程。本文就是记录了
前言
本文的话想和大家聊一聊我在Trae上使用AI Skills的一次初体验。
最近AI圈最火的概念应该就是AI Agent了,而伴随着AI Agent一起火起来的还有MCP(Model Context Protocol)和Skill。刚好最近我在做知识记录的时候有一个需求:每次在ProcessOn上用思维导图记录完学习内容后,都需要手动整理成博客文章。这个过程非常繁琐且重复,于是我就想能不能借助AI Skill来自动化这个过程。
本文就是记录了这次尝试的全过程,包括遇到的问题、解决方案,以及最终形成的可复用经验。希望能够给各位提供一些参考。
1. AI Skill是什么
在正式介绍之前,我们先简单了解一下什么是AI Skill。
(本部分比较多的内容是参考自TRAE 技能(Skill) 大家如果想对AI SKill有个更好的理解可以去trae的社区中查看)
1.1 从MCP到Skill的发展历程
2025年,MCP(Model Context Protocol)的横空出世让AI Agent有了标准化的工具调用接口,解决了协议层的问题。但随着使用的深入,行业逐渐发现一个更本质的问题:
即使有了MCP,AI在处理特定任务时仍然会"天马行空",输出结果不稳定。
举个例子:让AI写一篇技术博客,不同次数、不同轮次的对话,AI写出来的风格可能差异很大。有时详略不当,有时重点偏移,有时甚至会"发挥过度"——本该两千字的文章硬是写成了一万字。
正是为了解决这些问题,AI Skill应运而生。
注意:MCP提供的是一种标准化的工具调用接口,而Skill则是一种用于定义规则的技术。
1.2 Skill的核心价值
Skill(技能)是一种用于定义规则的技术,它可以将"万能"的AI进行收敛,让AI在某个特定领域变得非常强大。
简单来说,Skill就是给AI制定的一套"工作规范"。(我经常认为一个Skill就像是一个游戏里面的NPC,Skill就是赋予这个NPC它的工作能力,让它能够在游戏中完成特定的任务,同时告知到它有哪些工具可以使用,以及这些工具的使用场景。这样当游戏玩家触发了某个任务时就会找到特定的NPC,然后NPC则根据设定去选择如何与玩家进行沟通和执行某项任务)
在 TRAE 中,技能(Skill)通过 SKILL.md 文件进行定义和管理,每个技能封装了指令、脚本及相关资源,用于为智能体提供可复用、面向特定场景的专业能力。
一个技能可以被视为提供给智能体的一套 “专业能力说明书”(类似用户手册或操作指南)。在执行任务时,智能体可以按需加载相应的技能,从而增强其对任务的理解与执行能力。
1.3 Skill的主要特点
结构化
一个技能对应一个 SKILL.md 文件,文件中以结构化的方式描述完成某一类任务所需的信息,例如:
- 任务目标与适用场景;
- 关键约束与注意事项;
- 推荐流程或操作步骤;
- 可选的脚本、模板或示例。
动态按需加载
智能体不会在任务开始时一次性读取所有技能的完整内容。
在执行任务前,智能体会先扫描所有技能的简要描述,仅当判断当前任务与某个技能高度相关时,才会加载该技能的详细内容。这种按需加载机制可以有效减少上下文中的 Token 消耗、避免无关信息干扰智能体的决策。
1.4 Skill的使用场景
-
保证输出结果的一致性与规范性
我们在使用AI时,通常会遇到同一个问题,AI输出结果不一致的情况(例如我们让AI每天早上给我们定一瓶牛奶,可能有一天AI就给我们定了一瓶牛奶+一个面包,因为我们也没有告诉AI不允许定面包,所以可能有一天AI就觉得你想吃面包了就给你顶个面包)。
为了解决这个问题,我们可以定义一个Skill,来规范AI的输出结果。例如,我们可以定义一个Skill,来要求AI输出的结果必须符合一定的格式,或者必须包含某些关键词。这样,当我们使用这个Skill时,AI就会按照我们的要求输出结果,从而保证输出结果的一致性与规范性。 -
自动化重复性工作流
在实际工作中,我们通常会遇到需要频繁执行相同或高度相似的多步骤任务。例如,对于测试流程、代码规范检查、常规数据分析等难以避免的日常工作,可以将既有的 SOP 封装为技能。一旦相关任务被触发,智能体即可自动按照定义好的流程执行,从而减少重复的指令输入,提升效率。 -
总结与共享专业能力
**总结个人经验或团队规范,并在更大范围内复用。**例如,将技能在社区、交流群等公共平台进行分享,从而在不同的智能体、项目、团队间复用相同的技能。
以本次实践为例:我定义了一个xmind-to-blog的Skill,它规定了我博客的写作风格、格式要求、注意事项等。这样每次AI生成的博客文章都能保持一致的风格,大大减少了沟通成本。
1.5 Skill的结构
一个技能中必须包含一个 SKILL.md 文件,还可以根据实际需求添加其他文件,例如可执行的脚本、可参考的模板和风格指南等。例如
skill-name/
├── SKILL.md # (必须)智能体的核心指令
├── examples/ # (可选)输入/输出示例
├── input.md
└── output.md
├── templates/ # (可选)可复用的模板
└── component.tsx
└── resources/ # (可选)参考文件、运行脚本或素材
└── style-guide.md
1.6 Skill的文件格式
---
name: 技能名称
description: 简要描述这个技能的功能和使用场景
---
# 技能名称
## 描述
描述这个技能的作用。
## 使用场景
描述触发这个技能的条件。
## 指令
清晰的分步说明,告诉智能体具体怎么做。
## 示例 (可选)
输入/输出示例,展示预期效果。
1.7 工具介绍:Trae
聊完了AI Skill,让我们来说说本文使用的工具——Trae。
Trae是字节跳动推出的AI Code IDE,它深度集成了AI能力,可以帮助开发者完成代码编写、调试、分析等多种任务。在本次实践中,我就使用了Trae来探索和实现整个Skill功能。

Trae的核心特点:
- 智能代码补全:基于上下文理解,提供精准的代码建议
- 自然语言交互:可以用自然语言描述需求,AI帮你实现
- Skill支持:支持自定义Skill,定义AI的工作规范
- 工具集成:内置多种工具(如
WebSearch、WebFetch、文件操作等),方便AI完成复杂任务
借助trae我们能够有多种方式来创建skill

- 方式一:通过对话,由 AI 自动创建技能
你可以直接通过对话创建技能。你只需向 AI 描述你的需求,AI 就会自动为你生成对应技能的 SKILL.md 文件。例如:帮我在 ./trae/skills 目录下创建一个新的技能 技能的名字叫 xxx 这个技能可以帮我做以下事情: - xxx - xxx - xxx - 方式二:手动创建技能
可以参考文档Trae Skill文件格式来手动创建技能。 - 方式三:手动导入外部技能
可以参考文档Trae 手动导入外部技能来手动导入外部技能。
2. 我的需求:把思维导图变成博客
2.1 背景
我平时有一个习惯:学习新技术时喜欢用思维导图来记录要点。ProcessOn是我常用的工具,它支持思维导图、流程图等多种格式。
但问题是:
- 思维导图方便记录和回顾
- 但想要深入理解某个知识点,还是需要系统性的文章
- 每次手动从思维导图整理成博客文章,非常耗时
尤其是写技术博客,需要保持风格一致:开头怎么写、代码怎么展示、重点怎么强调……这些都是需要考虑的问题。
2.2 理想中的解决方案
我的理想方案是:
- 在ProcessOn上用思维导图记录学习内容
- 导出思维导图(XMind格式)
- AI自动转换成符合我风格的博客文章
- 人工校对和补充
3. 实现过程
3.1 第一次尝试:直接读取
最开始的想法很简单:让Trae AI直接读取ProcessOn的思维导图链接。
结果:失败了。
原因很简单:ProcessOn的页面内容是JavaScript动态渲染的,WebFetch工具无法获取到实际的思维导图内容。
教训:AI工具并不是万能的,对于动态渲染的网页内容,直接抓取往往行不通。
3.2 柳暗花明:导出到本地
既然在线读取不行,那就换个思路。我咨询了Trae AI,它告诉我可以将CSDN博客的Markdown文件导出到本地目录,然后它就可以分析了。

成果:成功分析出了博客的风格特点!
Trae通过对两篇文章的分析,提取出了Dr_chaser博客的典型特征:
- 标题格式:
# 1. 标题→## 1.1 子标题 - 强调句式:使用
==内容== - 开场模式:需要有前言,引用之前的相关文章
- 代码风格:带语言标注,中文注释
- 结尾风格:升华主题 +
一起加油(ง •_•)ง
[todo-图片:Trae分析博客风格的示意图]
3.3 创建Skill规则
分析出博客风格后,我告诉Trae希望使用Skill方案来实现自动化转换。Trae便调用它的skill-create工具,根据之前分析出的风格创建了Skill。
首先创建了Skill目录结构:
.trae/skills/xmind-to-blog/
└── SKILL.md

![> [todo-图片:Skill目录结构截图]](https://i-blog.csdnimg.cn/direct/28a8168d2b01431e98b52759fb4826f1.png)
然后在SKILL.md中定义了以下内容:
- 博客标题格式规范
- 强调句式要求
- 代码风格要求
- 转换步骤和质量检查标准
3.4 编写XMind解析脚本
XMind文件本质上是一个ZIP压缩包。Trae帮我编写了一个Python脚本parse_xmind.py来解析它:
核心思路:
- 用
zipfile解压XMind文件 - 读取
content.json获取思维导图内容 - 递归提取所有主题的层级结构
# 核心解析逻辑
def extract_all_topics(data, level=0):
results = []
if isinstance(data, dict):
title = data.get('title', '')
if title and title.strip():
results.append((level, title))
# 递归处理子主题...
return results
3.5 第一次转换尝试
有了Skill规则和解析脚本,我开始第一次转换。
结果:生成的文章比较简陋,存在以下问题:
- 图片处理:XMind中的图片无法提取,我使用了
[todo-图片]占位符 - 内容单薄:思维导图的内容比较简略,需要AI补充更多的解释和说明
3.6 迭代优化
围绕Skill的使用情况,Trae根据实际转换效果进行了多次迭代优化:
V1 → V2:增加图片标注
- 添加了
[todo-图片]格式规范 - 要求AI主动标注需要补充图片的位置
V2 → V3:Markdown优先
- 发现图片标注太多了
- 修改规则:能用Markdown表达的内容,不要用图片
- 流程图用Mermaid、对比用表格、目录用树形结构
V3 → V4:增加讨论章节
- 添加"质量检查"要求
- 输出文章时需要标注"待讨论问题"和"可以补充的点"
- 方便我确认理解是否正确
3.7 用户反馈与完善
第一次完整转换后,我根据实际情况向Trae提出了两个重要的补充需求:
需求一:内存管理部分
Gpio_S对象的创建是使用静态分配还是动态分配?
这确实是一个重要的话题。我补充了:
- 裸机环境下使用静态对象池
- RTOS环境下使用动态分配
- 详细的代码实现和对比
需求二:ESP32移植示例
如果ESP32也移植这套的话会是什么样的?
这是一个非常好的问题!我补充了:
- STM32和ESP32的硬件差异对比
- 头文件保持不变的演示
- C文件中需要修改的部分
- 迁移前后的代码对比
4. 成果展示
4.1 最终形成的Skill
经过多次迭代,最终形成的Skill包含以下内容:
xmind-to-blog/
├── SKILL.md # Skill规则定义
└── parse_xmind.py # XMind解析工具
SKILL.md的核心内容:
- 风格规范:标题格式、强调句式、代码风格
- 转换步骤:解析→润色→质量检查
- Markdown优先原则:能用图表不用图片
- 讨论章节要求:输出时必须包含待讨论问题
SKILL.md详解
如果你想自己创建一个类似的Skill,SKILL.md的格式和内容可以参考以下结构:
1. 文件头部(YAML格式)
---
name: "skill名称"
description: "Skill的简短描述,说明什么场景下触发"
---
2. 风格定义章节
详细描述目标输出格式的各个要素,例如:
- 文章结构(标题层级、目录格式)
- 特定句式(强调方式、口头禅)
- 代码风格(注释要求、格式规范)
- 结尾模式(总结方式语)
3. 转换步骤、鼓励
明确AI执行任务的流程,例如:
Step 1: 解析输入 → 提取关键信息
Step 2: 内容转换 → 按规则进行格式转换
Step 3: 质量检查 → 验证输出是否符合要求
4. 示例章节
提供输入→输出的示例,让AI更清楚地理解需求。
5. 注意事项
列出容易出错或需要特别注意的点。
parse_xmind.py的作用
除了SKILL.md,我还创建了一个Python脚本parse_xmind.py来辅助解析XMind文件:
import zipfile
import json
def extract_all_topics(data, level=0):
results = []
if isinstance(data, dict):
title = data.get('title', '')
if title and title.strip():
results.append((level, title))
# 递归处理子主题...
return results
这个脚本解决了一个实际问题:XMind文件本质是ZIP压缩包,直接读取二进制无法解析。Trae帮我编写了这个脚本,通过解压后读取content.json来提取思维导图的层级结构。
4.2 转换效果
以"用C实现面向对象对GPIO进行封装"为例,最终生成的博客包含:
- 完整的前言和需求说明
- 设计思想的详细解读(含Mermaid流程图)
- 代码实现(头文件+C文件)
- 内存管理专题(静态 vs 动态分配)
- ESP32移植示例
- 总结和讨论章节
字数:从XMind的简略内容,扩展成了超过一万字的详尽文章。
5. 总结
5.1 经验总结
通过这次实践,我总结出以下经验:
Skill使用心得
| 经验 | 说明 |
|---|---|
| 从小开始 | 不要试图一开始就制定完美的规则,先用再迭代 |
| 用户参与 | 让用户提供样例,AI分析风格比凭空设计更准确 |
| 双向迭代 | AI转换 → 用户反馈 → 规则优化,形成闭环 |
| 工具配合 | Skill + 预置脚本 = 更高效率和可靠性 |
核心技术点
- XMind解析:XMind本质是ZIP压缩包,解压后读取
content.json即可 - 风格提取:通过分析现有文章,提取共性特征
- Markdown优先:能用Mermaid/表格/树形结构表达的,不用截图
5.2 未来展望
这次只是一个简单的尝试,未来还可以:
- 增加更多预置脚本(如处理其他格式的思维导图)
- 将Skill分享给更多人使用
- 探索Skill在更多场景下的应用
AI时代,会用工具的人不一定强,但会用AI工具构建自己工作流的人一定强。
大家一起加油(ง •_•)ง
6. 参考资料
更多推荐



所有评论(0)