Skip to Content
全部文章搬砖工具AI编程系列一:mcp、skill、rule如何让模型更强大

AI编程系列一:mcp、skill、rule如何让模型更强大

发布时间: 2026-01-20

前言

最近几个月我用 AI CODING,也算是贯穿到我的整个工作中了,总结了一些自己的使用经验。我想通过一个系列的文章 来分享一下是怎么 AI 融入到自己的工作中的。当然这些经验可能很容易就过时, 因为现在 AI 编程在这一块其实更新还是蛮快的,不管是模型的能力更新,还是各个 AI IDE的能力更新,所以我的分享可以用来 做个参考,还是需要根据自己的实际情况来看。

开始之前

在开始之前的话,我还是想先讲一下为什么要用标题中写的mcp,skills 还有 rules 之类的来辅助我们进行一个 AI 编程。原因就是现在的大模型的话,其实就是一个基本的根据你提供的上下文做出一些回应,你和模型的每一次交互都会 带上你前面说有的问答内容,然后AI基于这些上下文再次做一个理解推理然后给出回复的过程。

一旦上下文token长度超出了模型支持的长度,就会把之前的内容丢掉一部分(现在的AI IDE会做一个优化就是对历史消息做压缩和剪裁), 因此随着交互的轮数越多事实上可能偏差就越大,这也是为什么你会感觉到对话越多偏离越来越多的根本原因。

💡
Tip

什么是token?

Token 是大模型处理文本的最小语义单元。它不等于单词,也不等于字符。 英文:通常一个单词是一个或多个 Token。 中文:一个汉字可能是 1 个或多个 Token,取决于词表。

提示词工程

基于上面模型存在的问题,提示词工程 这个概念就诞生了,如何写好prompt才能让模型给我们更符合预期的答案。

如果你的提示词是这样的:

生成MCP系统的Command和Skill文档 又或者是 给我的Go电商MCP系统写一份Command和Skill的技术文档,要中文的,格式好看点

这些比较笼统的需求,给AI模型提供的较大的可操作空间,极有可能是不可控的回复。

好的propmpt应该是什么?

一个高效、可靠的 Prompt 应该具备清晰的结构:

1. Task/Role (角色): 明确身份和目标 (System Prompt)。 2. Context/Content (内容): 提供处理任务所需的原始数据。 3. Instructions (指令): 详细的分步指导。 4. Examples (示例): Few-shot learning,校准输出。 5. Constraints (约束): 强调格式、安全、幻觉控制。

但是如果我们每次跟模型交互时是不可能都能够给大模型来重复的打一遍这些详细的、结构化的提示词的。

因此AI编程工具通常都提供了一些Rules、Skill等辅助我们来提供一些额外的上下文给大模型,1是可以扩充大模型的能力,2是也能对其推理和发挥 施加控制。

AI Coding能力辅助

接下来介绍一下现在的AI Coding工具的一些名词以及实际使用方式和作用,下面的内容着重看一下Rules和Skill,其他的都是了解即可。

连接层:Tool和MCP

工具Tool

工具(Tool)是一个个具体的原子化的被调用对象,通常它是函数/方法的形式存在,举个例子:一个工具的作用是查询今天的天气,那么调用这个工具后,其会返回 今天的天气是晴天20摄氏度。

再举一个例子,你在Cusor或者其他编程工具中给大模型说”帮我看看A函数在哪里被调用”,这个时候模型会调用本地的搜索工具,去你的源码中搜索A函数, 得到搜索结果后然后模型又会调用工具去read搜索结果中的文件的具体内容,然后大模型再分析。

MCP(Model Context Protocol)

MCP是24年A社弄出来的一个协议,全称是模型上下文协议,在2025年迅速普及,MCP为Tool调用提供统一的接口、发现机制和安全上下文。有了MCP后Tool不再 各自为政。在没有MCP之前,所有的工具调用可能都有各自的入参出参格式, 对于调用来说也是不够统一的,于是MCP就规定了所有工具使用json shcema来定义自己的入参出参文档就统一了这个事情。

MCP Server

通常是一组符合MCP协议的工具,组合在一起提供的本地服务供模型调用,比如 Chrome Devtools Mcp ,其安装后大模型可以查阅提供了哪些工具,在需要的时候去调用对应的工具,比如获取dom、获取console。

又比如Figma MCP,可以让AI直接读取设计稿来进行理解和开发。

什么是Rules

这个是最基础且最常用的一种模型约束类型的文档,它的特点是你的每一次提问都会自动带上所有的规则(项目专用以及个人制定的规则)。

场景:代码风格偏好、特定库的使⽤规范、禁⽌的⾏为、响应语⾔等必要的规则

比如模型老给你创建一些文档,你可以定义一个规则:

除非主动要求创建文档,否则请你不要创建

然后你每一次提交问题都会自动带上这个rule,如图:

1

现在像Trae和Codebuddy都支持项目级的rule以及个人的rule 1

其中个人规则会直接让你输入保存到编辑器工具中,项目规则会生成具体的规则md文件存在你的项目目录中,一般在.trae|.cursor|.codebuddy 中,根据你使用的工具在不同的目录下。

什么是Skill

技能这个东西最早是A社去年底推出的,很快各个公司都接受了A社的Skill的标准,然后现在各家都逐渐也支持了。

你有没有一个疑问?为什么有rules了还需要skill?直接把要求都写到rules行么? 这是不行的,因为rules每次都会全量带上,会无端消耗token,因此我们需要一个按需使用的能力

一堆skill是怎么工作的

在skills目录下的每个文件夹都是一个特定的skill定义,内部必定有一个叫SKILL.md的文件,文件内部开头必定这样的定义:

--- name: check-sql-injection description: 检查 Go 源代码中潜在的 SQL 注入漏洞并提供修复步骤。 --- xxxxxxxxx

假如我有10个这样的skill,每个skill负责的内容不一样,他们是如何工作的?

简单来说就是会把每一个skill的description组合在一起,提交给模型,模型会根据需要自动匹配description的内容使用对应的skill, 匹配上之后就会去读取对应skill的详细内容,来按照要求进行执行。现目前对于自动匹配这件事情,不管是trae、codebuddy都不太准确, 最好还是在对话中明确指定要求使用某项技能来完成工作,比如 帮我写一段读写数据库的函数,使用check-sql-injection来审查sql注入

skill具体工作原理

我们再来看一个完整的技能示例,这是我用来生成go代码时要求避免sql注入的技能定义。

SKILL.md
--- name: check-sql-injection description: 检查 Go 源代码中潜在的 SQL 注入漏洞并提供修复步骤。 --- # SQL 注入检查 Skill 使用此 Skill 系统地审计 Go 代码中的 SQL 注入风险。 ## 用户输入 text $ARGUMENTS 如果用户提供了特定的文件或目录,则专注于检查这些内容。否则,检查整个代码库或当前打开的文件。 ## 检查步骤 1. **搜索数据库操作** - 查找标准 `database/sql` 调用:`Query`, `QueryRow`, `Exec`, `Prepare` - 查找 ORM 使用(如 GORM, XORM):`Where`, `Raw`, `Order`, `Select` 2. **分析查询构建** - **关键**:检查 SQL 字符串是否使用以下方式构建: - `fmt.Sprintf` - 字符串拼接 (`+`) - `strings.Join` - 如果进入 SQL 字符串的任何变量来自外部源(函数参数、HTTP 请求等),则为高优先级漏洞。 3. **验证参数化** - 确保查询使用参数占位符(例如 MySQL 的 `?`,Postgres 的 `$1`)而不是直接值注入。 - **安全代码示例**: go db.Query("SELECT * FROM users WHERE id = ?", id) - **不安全代码示例**: go db.Query(fmt.Sprintf("SELECT * FROM users WHERE id = %s", id)) 4. **动态标识符检查** - 如果表名或列名是动态的,请验证它们是否针对严格的白名单进行了验证。 ## 输出格式 对于发现的每个潜在漏洞,输出: - **位置**: `[file_path:line_number](file:///path/to/file#line)` - **问题**: 简要描述为什么它有风险。 - **修复**: 显示如何使用参数化查询安全重写的代码片段。 ## 参考规则 - **禁止** 对 SQL 进行字符串拼接。 - **禁止** 对 SQL 值使用 `fmt.Sprintf` - **必须** 使用库提供的参数替换。

然后我们来让模型帮我们生成一个sql查询的示例程序,我告诉AI

在这个文件内生成一个示例查询数据库的代码,请注意避免sql注入

然后就可以看到他在生成的过程中使用了我们刚创建的skill(但是不稳定,并不一定每次都能准确识别并use skill,建议还是明确指定比较好) 1 而生成代码也明确注意到这个情况:

package main import ( "database/sql" "fmt" // 实际项目中需要导入具体的数据库驱动,例如: // _ "github.com/go-sql-driver/mysql" ) // User 代表数据库中的用户表结构 type User struct { ID int Username string Email string } // GetUserByUsername 演示如何安全地查询数据库,避免 SQL 注入 func GetUserByUsername(db *sql.DB, username string) (*User, error) { // ❌ 错误做法 (SQL 注入漏洞): // query := fmt.Sprintf("SELECT id, username, email FROM users WHERE username = '%s'", username) // err := db.QueryRow(query).Scan(&user.ID, &user.Username, &user.Email) // ✅ 正确做法 (使用参数化查询): // 使用 ? 作为占位符 (不同数据库驱动占位符可能不同,如 PostgreSQL 使用 $1) // 数据库驱动会自动处理转义,防止恶意 SQL 注入 query := "SELECT id, username, email FROM users WHERE username = ?" var user User // Execute the query err := db.QueryRow(query, username).Scan(&user.ID, &user.Username, &user.Email) if err != nil { if err == sql.ErrNoRows { return nil, nil // 用户不存在 } return nil, err } return &user, nil } func main() { // 模拟数据库连接 (仅作演示,实际代码需要真实的 DSN) // db, err := sql.Open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname") // if err != nil { // log.Fatal(err) // } // defer db.Close() // 示例调用 // user, err := GetUserByUsername(db, "admin' OR '1'='1") // 恶意输入测试 fmt.Println("此文件演示了如何编写避免 SQL 注入的查询代码。") fmt.Println("关键点:始终使用 database/sql 提供的参数占位符 (?),而不是字符串拼接。") }

简单总结一下skill的作用:

  • 它是一份可沉淀、可迁移、可复制、可重复的经验
  • 它是一份操作手册,ai可以直接从中间读取他要怎么做的一系列流程
  • 通常包括ai要做什么,输出什么,遇到什么情况做什么,怎么做

常见的可作为skill的技能:

  • 代码审查技能:你可以叫他在代码审查时,审查的规则、审查范围,审查深度等以及这些审查操作的执行步骤和输出报告的格式等。
  • 根据模板创建一个新项目:写上你创建项目的流程,约束,生态依赖,比如我要通过vue3,pinia、路由、单元测试等各方面的详细说明来构建一个什么样的项目。
  • 为项目写总结:给当前项目写一个总结和介绍

skill的渐进式

渐进式的意思是,我们会主动把skills目录下的每个子目录内的SKILL.md文件中的description提取出来,就像组织一个目录一样发给模型, 模型会根据需要确定要使用某个技能的时候,再去查阅SKILL.md的全部内容,这样做的好处就是节省token。

如果你的技能内容很长,你可以在SKILL.md中只保留一些简单的描述,而更详细的内容可以放到references/目录中,而且还支持script/目录。 一个完整skill目录如下:

├── [SkillID] # 以Skill唯一标识命名的目录(如SK-COMMON-VALIDATE-001) │ ├── SKILL.md # 核心:Skill元信息(必选) │ ├── script/ # 扩展:可复用脚本(可选,按语言/场景拆分) │ │ └── xxxx.py # 脚本 │ └── references/ # 扩展:补充说明文档(可选,按内容类型拆分) │ └── xxxxx.md # 更详细的文档

SKILL.md 的核心是Skill 的元信息标准化(标识、入参、出参、核心逻辑),而script和references是对 Skill 的落地补充。

  • script:把 Skill 的「执行逻辑」从纯文字描述转为可直接调用的脚本,解决「定义和落地两层皮」的问题;
  • references:把 SKILL.md 中放不下的细节(业务背景、异常案例、对接文档、使用示例)拆分出去,保持核心文件简洁。

这就是Skill的全部,它并不是复杂的技术,而是prompt工程的一部分,可沉淀、可迁移的技能知识,可以说是最近期AI Coding最重要的 能力之一,github上也有很多编写好的开源的skill,大家可以自己去查找一下。

来看一个做UI风格的skill

一个让AI做设计的一个开源的skills ui ux pro max,在github上star 20k了

有兴趣也可以去看他的skill原文,也可以当成学习skill的一个范例。

--- name: ui-ux-pro-max description: "UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 9 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind, shadcn/ui). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient. Integrations: shadcn/ui MCP for component search and examples." ---

它内置了57 种 UI 设计风格,覆盖主流趋势、经典风格和功能性方案,能满足从 SaaS 后台、电商平台到移动 APP 等多种场景的设计需求。

安装好技能之后,你只需要给ai说 “使用UI ux pro max帮我设计一下这个项目的主页(dashboard)和登录页,我的项目是一个活动运营的管理后台,面向pc端,设计风格要求简约,现代。首页注重数据大盘检测、登录页来一点科技感但不要太复杂。”

1

就会自动帮我生成这样的界面(当然生成的过程中不是一次搞定的,也会出现很多错误慢慢解决):

1

1

全部风格参考清单:

  1. 现代趋势风格(12 种)
风格名称核心特征适用场景
Glassmorphism(玻璃拟态)半透明效果、模糊背景、边框高光社交 / 创意类产品、个人作品集
Claymorphism(粘土拟态)柔和阴影、圆润边角、低饱和度色彩儿童 APP、教育产品、亲子平台
Bento Grid(便当盒布局)模块化卡片、网格分区、信息层级清晰数据仪表盘、管理系统、个人主页
Aurora UI(极光 UI)渐变光效、霓虹色彩、科技感十足游戏 / 娱乐平台、音乐 APP、潮流品牌
Neo-Brutalism(新粗野主义)高饱和度色块、粗体文字、不规则布局极客产品、创意工作室、小众品牌
Cyberpunk(赛博朋克)霓虹线条、深色背景、故障艺术效果科技产品、游戏界面、未来感 APP
Gradient UI(渐变 UI)流畅色彩过渡、现代感十足登陆页、营销网站、品牌展示页
Flat 2.0(扁平化 2.0)简洁元素、轻微阴影、简约配色企业官网、工具类产品、管理后台
Liquid UI(液态 UI)流动形态、弹性动画、柔和过渡创意应用、艺术展示、互动体验
3D Minimalism(3D 极简)低多边形、柔和阴影、简约 3D 效果产品展示、品牌官网、高端 APP
Skeuomorphism 2.0(拟物化 2.0)精致质感、真实光影、现代交互高端工具、奢侈品 APP、专业软件
Micro-Interaction(微交互)细腻动画、反馈清晰、用户引导友好工具类 APP、社交平台、电商产品
  1. 经典永恒风格(10 种)
风格名称核心特征适用场景
Minimalism(极简主义)留白充足、色彩克制、元素精简博客、内容平台、阅读类 APP
Flat Design(扁平化)无渐变、无阴影、二维视觉企业官网、工具类产品、系统界面
Neumorphism(新拟态)软拟物效果、低对比度、微妙阴影工具类 APP、智能家居控制界面
Brutalism(粗野主义)原始质感、强对比、无修饰小众品牌、创意工作室、极客社区
Material Design(材料设计)卡片层级、波纹动画、强调可读性Android 应用、跨平台产品、企业级应用
Swiss Design(瑞士设计)网格系统、清晰排版、客观美学资讯网站、学术平台、专业出版物
Retro Futurism(复古未来主义)复古色彩、未来元素、怀旧科技感游戏、音乐 APP、潮流品牌
Vintage(复古风)旧时代质感、暖色调、纹理细节文创产品、复古品牌、历史类 APP
Monochrome(单色调)单一色彩、不同明度、简约高级高端品牌、摄影网站、艺术展示
High-End Minimal(高端极简)极致留白、精致细节、高级质感奢侈品、高端服务、精品电商
  1. 功能性主题风格(8 种)
风格名称核心特征适用场景
Dark Mode Professional(深色专业模式)低蓝光、高对比度、护眼设计开发者工具、数据分析平台、长时间使用的软件
High Contrast Accessibility(高对比度无障碍)WCAG 合规、文字清晰、色彩鲜明公共服务、政务平台、适老化产品
Light Mode Professional(浅色专业模式)明亮背景、柔和文字、低疲劳设计办公软件、文档编辑、内容创作平台
Mobile First(移动优先)简洁布局、触控友好、响应式设计移动 APP、移动端网站、跨平台应用
Desktop First(桌面优先)复杂布局、多窗口支持、高效操作专业软件、管理系统、设计工具
Performance Focused(性能优先)简洁元素、无复杂动画、轻量级设计低配置设备、网络不稳定环境、工具类产品
Accessibility First(无障碍优先)屏幕阅读器兼容、键盘导航友好公共服务、教育平台、医疗健康产品
Print Style(印刷风格)纸张质感、清晰排版、墨色文字电子书、杂志 APP、文档阅读平台
  1. 行业专属风格(15 种)
风格名称核心特征适用场景
SaaS Dashboard(SaaS 后台风格)数据可视化优先、功能分区明确、操作高效B2B SaaS 产品、企业管理系统、数据分析平台
E-commerce Product(电商商品页风格)高清图片、突出价格、转化导向设计电商平台、商品展示页、购物 APP
Healthcare(医疗健康风格)干净色调、信任感配色、清晰信息层级医疗 APP、健康管理平台、医院系统
Fintech(金融科技风格)安全蓝色调、权威深色、强调数据准确性银行 APP、理财平台、支付系统
EdTech(教育科技风格)活泼色彩、互动元素、知识导向设计在线教育、学习平台、教育 APP
Travel(旅游风格)风景图片、明亮色彩、探索感设计旅游 APP、酒店预订平台、旅行博客
Food & Beverage(餐饮风格)鲜艳色彩、美食图片、食欲激发设计外卖 APP、餐厅预订、美食博客
Fitness(健身风格)活力色彩、肌肉线条、运动元素健身 APP、健康管理、运动社区
Beauty(美妆风格)优雅柔和色调、精致强调色、质感设计美妆品牌、护肤 APP、时尚平台
Real Estate(房地产风格)高端质感、空间图片、专业排版房产平台、装修 APP、家居设计
Automotive(汽车风格)金属质感、流线型设计、科技元素汽车品牌、购车平台、汽车资讯
Media & Entertainment(媒体娱乐风格)丰富色彩、动态元素、沉浸式设计视频平台、音乐 APP、娱乐资讯
Social Media(社交风格)友好色彩、互动元素、分享导向设计社交 APP、社区平台、内容分享
Startup(初创风格)活力色彩、简洁设计、创新元素初创公司官网、产品展示、创业平台
Enterprise(企业风格)专业色彩、严谨排版、权威感设计大型企业官网、B2B 平台、政务系统
  1. 布局系统风格(7 种)
风格名称核心特征适用场景
Card Flow(卡片流)卡片式布局、流畅滑动、内容聚焦内容展示、资讯 APP、产品列表
Single Column(单栏布局)简洁排版、阅读友好、专注内容博客、文章阅读、长内容展示
Multi Column(多栏布局)信息丰富、分类清晰、高效浏览新闻网站、电商平台、数据仪表盘
Full Screen(全屏布局)沉浸式体验、视觉冲击力强产品展示、登陆页、品牌宣传
Split Screen(分屏布局)左右分区、对比明显、功能明确登录注册、产品对比、数据展示
Asymmetric(非对称布局)创意排版、视觉焦点、个性设计创意网站、个人作品集、品牌展示
Fixed Header(固定头部)导航便捷、内容稳定、操作友好管理系统、电商平台、资讯网站
  1. 特殊效果风格(8 种)
风格名称核心特征适用场景
Parallax(视差滚动)多层滚动、深度感强、视觉冲击登陆页、营销网站、品牌展示
Particle Effects(粒子效果)粒子动画、动态背景、科技感十足科技产品、游戏界面、高端 APP
Holographic(全息效果)3D 投影、彩虹色彩、未来感科技展示、产品发布会、高端品牌
Glitch Art(故障艺术)信号干扰效果、色彩偏移、现代感音乐 APP、游戏界面、潮流品牌
Low Poly(低多边形)几何形状、简洁设计、现代感产品展示、品牌官网、游戏界面
Pixel Art(像素艺术)像素风格、复古游戏感、怀旧设计游戏、复古 APP、像素艺术展示
Hand-Drawn(手绘风格)手绘质感、亲切友好、个性设计教育 APP、儿童产品、创意平台
Watercolor(水彩风格)水彩质感、柔和色彩、艺术气息文创产品、艺术展示、设计平台

最后

  • 通过 Rules 约束大模型输出
  • 通过 MCP 触达外部业务系统
  • 通过知识库进行私域知识库输入(本文没有探讨的RAG,原理是先从私有数据库检索出一些资料一起提交给AI)
  • 而通过 Skills 则是为大模型武装上特定技能,配备现实世界所需要的技能,高效解决问题

这篇文章就简单的介绍一下AI Coding和一些辅助的手段,下一篇我计划写一些现在SDD编程的一些落地,比如Openspec和SpecKit之类的优秀工具。

最后编辑于

hi