承认自己知识上的不足并主动寻求系统性的学习,成为有清晰成长意识的资深工程师。
下面是一份从零开始、循序渐进、带亲手实操的AI基础知识学习教程,涵盖Skill、MCP、RAG三个核心概念。
第一部分:先搞清楚这几个概念到底是什么
在学任何概念之前,先弄明白"它是因为什么问题被发明出来的",远比背定义重要。
这张关系图,是你理解一整篇文章的"地基":
┌─────────────────────────────────────────────────────────────┐
│ 大语言模型(LLM) │
│ 问题:训练数据有截止日期,无法访问私有/实时数据,容易幻觉 │
└─────────────────────────┬───────────────────────────────────┘
│
┌─────────────┴─────────────┐
│ │
▼ ▼
【RAG 解决了什么】 【MCP 解决了什么】
让LLM能访问外部知识库 让LLM能连接外部工具/服务
┌─────────────────┐ ┌─────────────────┐
│ 知识不够怎么办? │ │ 能力不够怎么办? │
│ RAG:去知识库查 │ │ MCP:接上工具 │
└────────┬────────┘ └────────┬────────┘
│ │
└─────────────┬──────────────┘
▼
【Skill 站在更上层,解决的是】
"有了知识和工具后,具体怎么做任务的专业流程"
┌─────────────────────────────────────────┐
│ 比如:代码审查 → 不应该每次都重写流程 │
│ 所以:把流程打包成可复用的 Skill │
└─────────────────────────────────────────┘
一句话串联:
- RAG:解决"模型知识有限"的问题 → 让它能查私有/实时数据
- MCP:解决"模型能力有限"的问题 → 让它能调用外部工具/API
- Skill:解决"每次重复解释流程"的问题 → 把工作流打包成可复用的"技能包"
一个iOS开发的场景让你更好理解:
你接到一个需求:查一下这个用户昨天的Crash日志,然后写个分析报告。
- 无AI:你手动查日志 → 手写报告 → 花了2小时
- 只用LLM:你手动从日志平台搜出来 → 粘贴给LLM分析 → 花了1小时,但日志平台的搜步骤和粘贴都不消失
- 有了MCP:你可以让AI连接日志平台的API → AI帮你直接查Crash数据(解决了"AI能查到外部数据吗"的问题)
- 再有了Skill:你把"Crs日志获取 + 代码上下文读取 + 本地项目信息结合 + 按固定格式输出报告"整个流程,打包成一个"Crash分析Skill" → 以后只需要说"帮我分析一下这个用户的Crash",AI自动按你定义的标准流程执行(解决了"AI知道具体怎么一步步做这个任务吗"的问题)
MCP是“给Agent提供手和眼”,Skill是“给Agent提供特定领域的经验和工作流程说明书”。两者是互补关系,不是替代关系。RAG则是另一个层面,解决的是模型的知识获取问题。
第二部分:核心概念逐一拆解
一、Skill(技能)—— AI的专业角色
1、到底是什么?
Skill是一个包含指令说明、脚本文件和参考资料的文件夹,大模型在需要时自动加载并根据里面的"说明书"执行特定任务。
2、和普通对话有什么区别?
没有Skill时,你每一次让AI做一件专业的事,都需要手打一遍详细的指令,还要反复纠正AI的偏离。有了Skill,你把规则、步骤、模板打包成一个Skill,下次你只需要说"帮我做XXXX",AI自动识别并执行。
3、标准的Skill目录结构如下:
skill-name/
├── SKILL.md # 核心文件:含元数据(名称/描述/触发词)、执行流程、输出格式
├── scripts/ # 可选:辅助脚本(Python/Shell等)
├── templates/ # 可选:文档模板
└── resources/ # 可选:参考文件(如API文档、最佳实践等)
4、Skill的核心设计机制:渐进式披露
如果你有50个Skill,AI启动时全部加载会消耗大量Token。渐进式披露的设计是:读取阶段只加载几十Token的YAML元数据,真正调用时才加载全文。这意味着单个Skill在启动时仅消耗约30-50个Token,实现了极高的上下文效率。
5、Skill与MCP的本质区别:
- MCP(工具箱) :侧重于连接外部数据和工具,像给Agent提供"手和眼",让它能操作GitHub、数据库、Slack等外部服务。
- Skill(流程说明) :侧重于专业知识和流程,教Agent如何使用这些工具完成特定任务,像给Agent提供"领域专家的大脑皮层"。
两者的典型搭配是:用MCP连接工具(如数据库、API),用Skill封装使用这些工具的专业流程。
二、MCP(模型上下文协议)—— AI连接世界的"USB接口"
1、是什么?
MCP是Anthropic推出的开放标准,核心作用是让AI能够以统一的接口连接外部工具、数据源和API。它可以类比为AI领域的USB接口——键盘、鼠标、U盘,只要遵守USB协议就能即插即用,不需要为每个品牌单独开发驱动;MCP也一样,GitHub、数据库、文档查询等服务,只要遵守MCP协议,AI就能直接接入,不需要为每个工具单独写集成代码。
2、三个核心原语
MCP定义了三个基础构件:
- Tools(工具) :AI可以主动调用的函数/操作。比如执行特定计算、调用API完成特定动作。
- Resources(资源) :AI可以读取的数据源,如文档、数据库表结构。
- Prompts(提示模板) :可复用的提示词模板,支持参数填充。
3、MCP解决了什么问题?
没有MCP时,每个AI工具都要为主流AI平台单独开发集成,维护成本极高。MCP让所有AI工具围绕一套通用协议,一次编写就能被主流的MCP客户端(如Claude Code)识别调用。
三、RAG(检索增强生成)—— 让AI"查资料再回答"
1、定义
RAG是一种将信息检索与文本生成结合的技术架构。其核心原理是通过检索模块实时查询外部知识库(如数据库或文档集),将检索结果作为上下文输入大模型,使模型基于最新/私有数据生成回答。
2、为什么需要RAG?
大语言模型有两大天然短板:一是知识时效性,模型训练完成后,无法知晓训练截止后发生的新事件;二是私有数据隔离,企业的内部文档、业务数据不上互联网,外界无法进入模型训练。RAG让模型结合检索到的外部资料回答,有效降低幻觉,同时增强可追溯性和可实现性。
3、RAG与普通搜索引擎的区别:
| 维度 | 普通搜索引擎 | RAG |
|---|---|---|
| 用户输入 | 关键词查询 | 自然语言提问 |
| 输出形式 | 返回一堆链接列表,用户自判相关性 | 直接生成一个完整的自然语言答案 |
| 处理过程 | 关键字匹配 [21†L22-L24] | 语义检索 + 理解融合 + 生成完整回答 |
| 语义理解 | 较弱,主要靠词匹配 | 强,基于向量相似度和语义关联 |
| 举例 | 问"明天适合出门吗",返回天气预报链接 | 提取气温降水空气质量,结合"适合出门"的判断标准,直接给出结论 |
RAG从引擎返回链接列表,进化为直接给出可读、完整、个性化的答案。关键在于后面的生成(Generation) 环节——接收检索结果后,能理解、筛选、融合,然后生成直接满足用户诉求的答案。
4、RAG的技术流程:
- 数据准备阶段:对知识库中的原始文档做分段清洗,使用Embedding模型转换为保留语义信息的向量表示,存入向量数据库。
- 检索阶段:用户提问后,系统同样将用户问题进行向量化,在向量数据库中进行相似度搜索,找出最相关的Top-K内容。
- 生成阶段:将检索到的相关内容与用户原问题组装成提示词(Prompt),送入大模型生成最终回答。
第三部分:亲手写一个Skill —— iOS代码审查Skill实战
纸上得来终觉浅。下面我们亲手创建一个最简单的代码审查Skill,用于检查iOS代码中常见的潜在问题。
前置条件
- 能访问Claude API或使用支持Skill的AI平台
- 会基础的文件操作和读写
第一步:创建Skill的目录结构
在你的任意工作目录下创建以下文件夹结构:
ios-code-review-skill/
├── SKILL.md
├── scripts/
│ └── check_weak_self.py(Python可选,也可直接用纯Markdown指令让AI完成)
└── resources/
└── ios_best_practices.md(可选:存放更详细的iOS编码规范供参考)
第二步:编写SKILL.md —— 核心说明文件
在SKILL.md中写入以下内容:
---
name: iOS代码审查专家
description: 当需要审查iOS/Objective-C/Swift代码时,自动加载此技能,按内置规则完成安全与规范审查。
---
# iOS SDK 代码审查技能
## 触发场景
- 用户说"帮我审查这段iOS代码"
- 用户说"帮我检查一下这段Objective-C/Swift代码"
- 用户说"帮我review一下这个block相关的代码"
## 角色定义
你是一名资深的iOS代码审查员,重点关注以下问题:
- 内存管理隐患(循环引用、强引用delegate、block中的weak self使用)
- 线程安全问题(主线程更新UI、多线程访问可变状态)
- 潜在崩溃风险(数组越界、强制解包)
- 性能问题(重复计算、过度malloc、主线程阻塞)
## 核心检查规则
### 规则1:检查block中的循环引用
- 如果发现block内部使用了self,且self没有被声明为weak/strong组合,则报告警告
- 报告格式:`【内存风险】文件:行号 - block内发现直接使用self,建议使用weakself`
### 规则2:检查delegate声明是否是weak
- 如果`@property`声明的delegate缺少weak关键字,则是高风险
### 规则3:检查主线程操作
- 如果在未使用`dispatch_async(dispatch_get_main_queue())`或`@MainActor`的环境下直接更新UI,则是风险
## 输出格式模板
**审查结果概要**:
- 总行数:xx行
- 发现风险:x处
**风险明细**:
| 严重程度 | 文件 | 行号 | 问题描述 | 修复建议 |
|---------|------|------|---------|---------|
| 高 | ... | ... | ... | ... |
## 特别说明
- 不确定的情况要标注【需要人工确认】,不强行给出错误结论
- 仅关注当前提供的代码段,不做越界扩散
- 以上规则优先于通用模型默认判断
第三步:在resources目录中补充更多规则(可选)
在resources/ios_best_practices.md中可以补充更多资料:
# iOS 开发额外最佳实践,供审查时参考
## 1. 循环引用的多种场景
- NSTimer对target的强引用
- Block内捕获self
- 通知观察者未正确移除
## 2. 线程安全
- 尽量使用GCD串行队列保护可变状态
- Swift中利用`@MainActor`标注UI代码
## 3. 可选值处理
- 优先使用guard let或if let,减少强制解包
- 对于可引发异常的取值,如数组下标访问使用安全访问方法
第四步:让AI加载并执行你的Skill
现在,向支持Skill的AI输入你创建好代码审查Skill的文件夹路径,然后直接说:
"请帮我审查这段Objective-C代码:"
把一段代码粘贴出来。如果你还没有合适的测试代码,可以用下面这段:
- (void)loadData {
[self.api fetchUserData:^(NSDictionary *data) {
self.userName = data[@"name"];
[self.tableView reloadData];
}];
}
在没有Skill的默认模式下,AI可能只给出表面建议。加载你的自定义Skill后,AI会严格执行你定义的SKILL.md规则,按照标准表格格式输出规范化的审查结果。
Skill与实际执行的映射关系对应如下:
| 检查规则与要求 | AI实际执行行为 |
|---|---|
| 规则1:检查block内self | 发现用的是强self,输出"block内发现直接使用self,建议用weakself" |
| 规则2:触发场景为代码审查 | 自动对齐到定义的标准表格表格格式 |
| 表示"不确定的地方标注人工确认" | 如果拿不准,会添加【需要人工确认】标注 |
第五步:迭代优化你的SKILL.md
- 把SKILL.md想象成你给一个实习生写的操作手册,写得越清楚,他执行得越好。
- 你发现AI经常漏掉"线程"方面的问题,就在规则里加"规则3:检查主线程操作"。
- 你发现输出格式时不时跑偏,就用Markdown把想要的表格结构写死。
- 注意不要试图在一个Skill里塞太多不同的事;好的Skill应该只围绕一件事把它做透。
第四部分:深入理解RAG与搜索引擎的核心区别
RAG的"增强点"到底是什么?
RAG的增强体现在哪里呢?**检索(Retrieval)作为进入口,生成(Generation)作为转化口。 体现在以下三方面:
第一步:原始数据准备——各类原始文档,先分段切块,每个小块经Embedding模型转换成保留语义信息的向量,存入向量数据库。
第二步:问题的实时检索——用户提问后,同样将问题向量化,在向量数据库中做相似度检索,找出与用户意图在语义层面最相关的Top-K个资料片段。
第三步:生成最终答案——将检索到的相关内容与用户问题组装成一个完整的Prompt,输送给大模型,生成精确且包含实体依据的最终回答。
第五部分:概念之间的逻辑关系 —— 帮助你轻松内化所有概念
RAG、MCP、Skill如何融入AI能力的成长树?
| AI能力进化阶段 | 遇到的问题 | 解决方案 | 对应概念 |
|---|---|---|---|
| 第一阶段:纯模型对话 | 知识有截止日期,不懂新东西、不懂内部资料 | 去外部知识库先查资料 | RAG |
| 第二阶段:调用外部能力 | 模型只能说话不能干活(如无法操作数据库/GitHub) | 统一连接外部服务的标准 | MCP |
| 第三阶段:面向任务自动化为标准 | 需要每次都口头重复任务的详细流程 | 把任务流程打包为可复用技能包 | Skill |
三者构建出一个完整的AI应用能力体系:
- RAG在知识维度扩充模型的能力
- MCP在操作维度扩充模型的能力
- Skill在流程维度封装复杂多步骤任务的执行
第六部分:进一步学习路线图
短期(2-4周)
- 动手完成上面的iOS代码审查Skill并投入使用,解决至少一个工作中的高频重复任务
- 阅读Anthropic《Claude Skill构建指南》完整PDF(搜索公开链接或开发者社区资源即可找到)
中期(2-3个月)
- 尝试开发一个带MCP服务器的小项目,例如连接本地SQLite数据库或GitHub API的自定义MCP Server
- 学习LangChain里RAG模块的官方Demo,亲手搭一个最小可用的RAG应用
长期(半年以上)
- 了解Advanced RAG技术,如自我反思与自我RAG(Self-RAG)、查询重写与HyDE
- 探索MCP Server的线上部署方式和连接更多外部工具
- 参与Skill或MCP相关开源社区,复盘和共享自己生产的Skill组件
掌握了Skill、MCP、RAG这三项核心能力,你不仅能在关于"AI编码"相关的话题做出专业阐述,更能真正在日常工作中运用这些能力提升个人效率,解决实际业务问题。