Trae 官宣:支持Skill!
简单说,Skill 是一段预定义的指令 + 示例 + 约束在什么场景下触发应该遵循什么规范输出什么格式的代码给 AI 的“编程风格指南”团队的“代码模板自动化器”你个人的“最佳实践知识库”
0. 为什么你需要“Skill”?因为 AI 不能靠猜!
你有没有遇到过这种情况:
“Trae,帮我写个高性能的 Go HTTP 服务。”
→ 它返回一个net/http的 Hello World,连中间件都没加。
问题在哪?AI 不知道你的“上下文标准”。你心目中的“高性能”可能是带连接池、pprof、结构化日志、优雅关闭的完整骨架,但 AI 默认只给最简答案。
这时候,Trae Skill 就派上用场了——它让你把“专业经验”封装成可复用的技能包,让 AI 按你的规范输出代码!

1. 什么是 Trae Skill?
简单说,Skill 是一段预定义的指令 + 示例 + 约束,告诉 Trae:
- 在什么场景下触发
- 应该遵循什么规范
- 输出什么格式的代码
你可以把它理解为:
- 给 AI 的“编程风格指南”
- 团队的“代码模板自动化器”
- 你个人的“最佳实践知识库”
2. 实战:创建一个 “Go 微服务骨架” Skill
场景
你经常要新建 Go 微服务项目,每次都得手动写:
- 带 Gin 的路由
- zap 日志
- pprof 监控
- 优雅关闭
- 配置加载(Viper)
太重复了!不如教 Trae 一次,以后一句话生成。
步骤 1:创建skill
最简单的方式就是直接跟trae对话,让AI创建一个skill

也可以手动创建skill,文件位置在./trea/skills下面
步骤 2:填写 Skill 元信息
Name: go-microservice-skeleton
Trigger: "create a Go microservice with Gin, zap, pprof, and graceful shutdown"
Description: 生成符合我团队规范的 Go 微服务基础骨架
步骤 3:编写 Skill Prompt
你是一个资深 Go 后端工程师,请根据用户需求生成一个生产级微服务骨架,要求:
1. 使用 Gin 作为 Web 框架
2. 日志使用 uber/zap,带 JSON 格式和 level 控制
3. 自动开启 net/http/pprof(仅在 debug 模式)
4. 支持通过 config.yaml 加载配置(用 Viper)
5. 实现优雅关闭(监听 SIGINT/SIGTERM)
6. 项目结构清晰:cmd/, internal/, pkg/, config/
请输出完整的 main.go 和目录结构说明。
步骤 4:添加示例(可选但强烈推荐)
提供一个你认可的 main.go 片段作为参考,帮助 Trae 理解你的代码风格。
步骤 5:保存并启用
3. 使用 Skill:一句话生成专业代码
现在,在聊天窗口输入:
“用 go-microservice-skeleton 创建一个用户服务”
Trae 会立刻返回:
// main.go
package main
import (
"context"
"log"
"net/http"
_ "net/http/pprof"
"os"
"os/signal"
"syscall"
"time"
"github.com/gin-gonic/gin"
"go.uber.org/zap"
"github.com/spf13/viper"
)
func main() {
// 加载配置
viper.SetConfigName("config")
viper.SetConfigType("yaml")
viper.AddConfigPath(".")
if err := viper.ReadInConfig(); err != nil {
log.Fatal("config error:", err)
}
// 初始化日志
logger, _ := zap.NewProduction()
defer logger.Sync()
// Gin
r := gin.Default()
r.GET("/health", func(c *gin.Context) {
c.JSON(200, gin.H{"status": "ok"})
})
// 启动 HTTP 服务
srv := &http.Server{
Addr: ":8080",
Handler: r,
}
// 启动 pprof(仅调试)
if viper.GetBool("debug") {
go func() {
http.ListenAndServe("localhost:6060", nil)
}()
}
// 优雅关闭
go func() {
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
logger.Fatal("server failed", zap.Error(err))
}
}()
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
<-quit
logger.Info("shutting down server...")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := srv.Shutdown(ctx); err != nil {
logger.Fatal("server forced to shutdown", zap.Error(err))
}
}
✅ 完全符合你的规范!
✅ 无需复制粘贴旧项目
✅ 还自动处理了 pprof 的开关逻辑
4. Skill 的高级玩法
✅ 团队共享
- 把 Skill 导出为 JSON,团队成员一键导入
- 统一代码风格,新人上手快
✅ 多语言支持
- 不只是 Go!你也可以创建:
react-ts-component:生成带 Storybook 和测试的 TSX 组件terraform-aliyun-ecs:根据你的阿里云账号习惯生成 ECS 模板
✅ 动态参数
未来 Trae 可能支持:
create user-service with port=9090, db=mysql
Skill 自动替换模板中的变量!
5. 为什么 Trae Skill 比普通 prompt 更强?
| 对比项 | 普通 Prompt | Trae Skill |
|---|---|---|
| 复用性 | 每次都要重写 | 一次定义,永久复用 |
| 触发精准度 | 容易误触发 | 通过关键词/正则精确匹配 |
| 团队协作 | 无法共享 | 可导出/导入,团队标准化 |
| 上下文隔离 | 容易被其他对话干扰 | 独立命名空间,干净可靠 |
6. 小结:把经验变成“可执行的知识”
Trae Skill 的本质,是将你多年积累的工程经验,转化为 AI 可执行的指令。它不是取代你,而是让你从“重复劳动”中解放出来,专注真正有创造力的部分。
就像你不会每次煮咖啡都从种咖啡豆开始,
也不该每次写服务都从import "fmt"开始。
更多推荐

所有评论(0)