Agent 与 Skill 的本质
核心结论:Agent 和 Skill 在文件层面都是
.md文本,但系统赋予它们的“权责”和“调度方式”存在天壤之别。Skill 是“被注入的静态手册”,Agent 是“被隔离的动态执行体”。
一、定义:它们到底是什么?
- Skill(技能):一份静态的“操作说明书”。它只包含文本指令、示例和准则,没有任何工具调用权限,本身不能执行任何代码或命令。
- Agent(智能体):一个拥有独立上下文、独立工具集和独立模型配置的 AI 执行实例。它被调用时会在后台独立运行,完成复杂任务后只返回结果。
二、它们看起来都是一个 markdown 文件而已
从文件后缀和书写格式来看,它们确实都是 Markdown 文件。 你可以在里面写步骤 1、2、3,告诉系统“要做什么、怎么做”。
但系统的读取逻辑完全不是看正文,而是看文件头部(Frontmatter)的声明。
三、本质区别:系统如何识别与调度
1. 文件头部的“权限清单”不同
| 类型 | Frontmatter(YAML 头)必须包含 | 是否允许声明工具 |
|---|---|---|
| Skill | 仅有 name 和 description |
严禁声明 tools 和 model |
| Agent | 必须包含 tools 和 model |
必须显式声明可用工具列表 |
- Skill 的头:
--- name: sql-reviewer description: 审查 SQL 语句规范 --- - Agent 的头:
--- name: sql-reviewer-agent tools: ["Read", "Grep", "Bash", "Write"] model: sonnet ---
这意味着:系统给 Agent 授予了“动手权限”(调用 API 读写文件、执行命令),而 Skill 没有权限声明,系统根本不会为其分配任何工具调用能力。
2. 调度模式截然不同(最核心的本质)
这是你在文本上看不出来的底层逻辑:
| 维度 | Skill(技能) | Agent(智能体) |
|---|---|---|
| 调度方式 | 内联注入:将 SKILL.md 内容直接粘贴到当前主对话上下文 |
独立实例化:在后台新建一个独立的 AI 会话逻辑单元 |
| 上下文隔离 | 占用主窗口的 Token,永驻主对话 | 拥有独立上下文窗口,干完活立即销毁 |
| 由谁执行 | 主 Agent 读指令后亲自执行 | 自己(新 AI 实例)独立执行 |
3. “新上下文(Context)”在技术层面到底是什么?
请务必注意:它不是操作系统层面的新进程(Process),也不是新线程(Thread)。
在技术底层,它只是一个逻辑会话对象(Logical Session Object)——即服务器内存中一张带有独立 session_id 的“便签纸”,对应一次或多次独立的 HTTPS API 请求事务。
- 本地客户端(Claude Code / Copilot)不会 fork 子进程。
- 云端 GPU 服务器不会开辟新的 CPU 线程,而是利用异步事件循环维护这个
session_id的状态。 - 这个“窗口”包含独立的系统提示词、独立的工具调用循环状态机,以及清零的 Token 计数。
- 生命周期极短:Agent 返回结果后,该
session_id即被标记为可回收(TTL 仅几分钟)。
最贴切的类比:它就像浏览器中新开的 “独立标签页(Tab)”——和主页面隔离,有自己的浏览历史和缓存,关闭后立即释放内存。
四、它们之间的关系
Agent 可以引用并加载 Skill 作为自己的内置知识库。
例如,Agent 的执行协议中写道:
“第一步,加载
security-checklistSkill 获取最新安全规则;第二步,应用这些规则进行审查。”
这样:
- Agent 专注“执行流程”(拉取代码、生成报告);
- Skill 专注“专业知识”(具体的漏洞规则列表)。
公司安全规范更新时,只需修改 Skill 文件,所有依赖它的 Agent 便自动获得新能力。
五、如何创建 Agent 和 Skill(实操速查)
各工具存放路径
| 工具 | Skill 项目级路径 | Agent 项目级路径 | 用户级路径 |
|---|---|---|---|
| Claude Code | .claude/skills/ |
.claude/agents/ |
~/.claude/ |
| GitHub Copilot CLI | .github/skills/ |
.github/agents/ |
~/.copilot/ |
| OpenAI Codex | .agents/skills/ |
.agents/agents/ |
~/.agents/ |
Skill 文件示例(SKILL.md)
---
name: commit-message-writer
description: 按 Conventional Commits 规范生成提交信息。当用户要求写 commit 时使用。
---
# 提交信息生成器
1. 执行 `git diff --staged` 获取暂存变更
2. 分析变更类型(feat/fix/docs 等)
3. 生成格式:`<type>(<scope>): <subject>`
4. 复杂变更需补充 body 说明原因
Agent 文件示例(my-agent.agent.md)
---
name: pr-reviewer
description: 审查 PR 代码的安全与性能问题。
tools: ["Read", "Grep", "Write", "Bash"]
model: sonnet
---
# PR 审查流程
1. 执行 `git diff main...HEAD` 获取变更
2. 检查硬编码密钥:`grep -iE "password|secret|token"`
3. 检查 SQL 注入:查找字符串拼接的 SQL 语句
4. 生成 `REVIEW_REPORT.md`,列出阻断性问题与修复建议
5. 如发现严重漏洞,直接自动修复并提交
六、如何快速区别 skill 和 agent
写
description的是教材(Skill)——只动嘴,不动手;
写tools的是包工头(Agent)——自己开新窗口,独立干脏活累活。
它们生而平等(都是 .md),但系统赋予的“调度权限”和“运行生命周期”天差地别。理解这一点,你就能在设计系统时做出精准的技术决策:固定的流程做成 Skill,复杂耗时的苦力活封装成 Agent。
浙公网安备 33010602011771号