前言

本文的话想和大家聊一聊我在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 理想中的解决方案

我的理想方案是:

  1. 在ProcessOn上用思维导图记录学习内容
  2. 导出思维导图(XMind格式)
  3. AI自动转换成符合我风格的博客文章
  4. 人工校对和补充

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目录结构截图]

然后在SKILL.md中定义了以下内容:

  • 博客标题格式规范
  • 强调句式要求
  • 代码风格要求
  • 转换步骤和质量检查标准

3.4 编写XMind解析脚本

XMind文件本质上是一个ZIP压缩包。Trae帮我编写了一个Python脚本parse_xmind.py来解析它:
在这里插入图片描述

核心思路:

  1. zipfile解压XMind文件
  2. 读取content.json获取思维导图内容
  3. 递归提取所有主题的层级结构
# 核心解析逻辑
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的核心内容:

  1. 风格规范:标题格式、强调句式、代码风格
  2. 转换步骤:解析→润色→质量检查
  3. Markdown优先原则:能用图表不用图片
  4. 讨论章节要求:输出时必须包含待讨论问题

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. 参考资料

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐