AI编码基础知识入门

承认自己知识上的不足并主动寻求系统性的学习,成为有清晰成长意识的资深工程师。
下面是一份从零开始、循序渐进、带亲手实操的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的技术流程:

  1. 数据准备阶段:对知识库中的原始文档做分段清洗,使用Embedding模型转换为保留语义信息的向量表示,存入向量数据库。
  2. 检索阶段:用户提问后,系统同样将用户问题进行向量化,在向量数据库中进行相似度搜索,找出最相关的Top-K内容。
  3. 生成阶段:将检索到的相关内容与用户原问题组装成提示词(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编码"相关的话题做出专业阐述,更能真正在日常工作中运用这些能力提升个人效率,解决实际业务问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容