这次我们来看一个在 2025 年下半年开始被 Agent 开发圈子反复提及的名字:Agent Skills。它不是一个新出的模型,也不是某个固定的开源软件,而是一套让大模型智能体具备“可复用执行能力”的工程规范:把常用技能写进标准目录、标准描述和可运行脚本,Agent 需要时直接调用,而不是每次从零生成程序。
先说结论。如果你关心的是 Agent 应用开发、企业内部自动化、批量数据处理、AI 工作流编排,Agent Skills 是目前值得投入时间研究的方向。它的核心特点可以浓缩成四点:第一,把大模型的“思考”与“执行”分离,让 Agent 不再只靠写代码碰运气;第二,Skill 是文件化、可复用的,换一个项目也能带过去;第三,能与 MCP(Model Context Protocol)结合,被多种 Agent 客户端复用;第四,支撑批量任务和接口化调用,方便接入真实业务。下面这篇文章会从概念、学习路线、环境准备、目录结构、脚本编写、MCP 接入、批量任务、性能观察和排错清单讲清楚,目标是让你自己动手写一个 Skill,并把它挂到 Agent 上跑通。
如果你以前玩过 AutoGPT、MetaGPT、LangChain、CrewAI,看 Agent Skills 会非常容易;如果你刚接触大模型开发,也没关系,按下面的路线走,先把概念骨架搭起来,再动手写一个几十行的小工具,就能感受到这套玩法比“提示词套提示词”更接近工程化。
1. 核心能力速览
先把 Agent Skills 的关键信息整理成一张表。这里的“硬件门槛”和“显存占用”不是固定的,取决于你接的是云端大模型 API 还是本地模型;Skill 本身几乎不消耗额外资源,真正的成本在大模型推理和脚本执行。
| 能力项 | 说明 |
|---|---|
| 项目类型 | 大模型 Agent 技能工程规范,配套可复用的 Skills 文件结构 |
| 核心作用 | 让 Agent 获得可复用的执行能力,而不是每次现场生成工具代码 |
| 是否需要大模型 | 是,需要接入大模型 API 或本地模型 |
| 是否依赖具体厂商 | 否,OpenAI 系、Anthropic 系和本地模型都适用 |
| 接入方式 | SKILL.md + scripts + assets,再通过 Agent 框架或 MCP Server 暴露给模型 |
| 是否支持 API | 支持,Skill 本质是可调用的工具/函数,可通过 Agent 框架 API 或 MCP 工具协议暴露 |
| 是否支持批量任务 | 支持,可在脚本层做主流程批量循环,也可以做任务队列 |
| 显存占用 | 取决于所选模型;本地小模型通常 8G 显存起步,需实际测试 |
| 适合人群 | Agent 应用开发者、自动化方案调研者、企业 AI 平台团队、AI 爱好者 |
从材料看,Anthropic 在 2025 年 10 月左右开源了 skills 相关仓库,OpenAI 也在同一时期更新了 Agents SDK,把技能类能力并入官方体系。这个时间点很关键,说明各家的方向在收敛:Agent 不能只靠对话,必须有一套标准化的“可执行技能层”。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Agent Skills 到底是什么:与 Tool / MCP / Workflow 的边界
很多读者会混淆几个概念:Tool、Function Calling、MCP、Agent Skills、Workflow。它们看起来都能让模型做事情,但层次完全不同。
先看 Tool 和 Function Call。这是最底层的能力,意思是模型在推理时,根据用户的请求选择一个外部函数并传入参数,然后程序去执行这个函数。它的特点是“一次一问一答”,开发者要自己维护函数列表,模型只负责决定调哪个函数,不负责组织复杂的执行流程。
再看 MCP。MCP 是一个统一协议,解决的是“一堆工具如何被多个客户端复用”的问题。传统的工具函数往往在一个应用里写死,换个客户端就要重写。MCP 把工具包装成标准接口,模型客户端按统一方式发现工具、查看参数、调用工具。MCP 更像是一个“插线板”,Agent 是电器,工具是插头。
Agent Skills 的层次比 Tool 更高。一个 Skill 不是单个函数,而是一整套“执行方案”:包含技能说明、触发条件、执行流程、脚本代码、依赖资源、输出格式。当模型发现当前任务适合某个 Skill 时,它会按 Skill 里的步骤去运行脚本,而不是自己临时生成 Python 代码。简单理解:Tool 是“单兵能力”,Skill 是“完整作战流程”。
Workflow 则是更偏工程编排的层,强调固定流程,比如“先检索知识库,再写摘要,再翻译,再发邮件”。Workflow 的每一步可以调用 Tool 或 Skill,但流程本身是开发者预先写死的,模型没有太多自主调整空间。
看看这张对比表会更清楚:
| 概念 | 解决什么问题 | 由谁决定调用 | 复杂度 | 典型形态 |
|---|---|---|---|---|
| Tool / Function Call | 让模型调用单个外部函数 | 模型 | 低 | 函数列表 |
| MCP | 统一工具发现与调用协议 | 客户端 + 模型 | 中 | MCP Server / Client |
| Agent Skills | 让模型按预设技能流程执行完整任务 | 模型 + 技能描述 | 中高 | SKILL.md + scripts |
| Workflow | 固定业务流编排 | 开发者 | 高 | 有向图流水线 |
在实际项目里,这四者不是互斥的。很多成熟的 Agent 产品是“Workflow 负责稳定流程,Skills 负责灵活能力,MCP 负责统一接入,Tool 负责底层函数”。学习 Agent Skills 时,如果能站在这个全局视角看问题,后面做架构设计会顺利很多。
3. 从零到实战:10 周学习路线图
标题既然叫“入门到实战”,这里给出一条比较稳的学习路线。不用急着一次性学完所有框架,先跑通最小闭环,再逐步加深。
3.1 阶段一:搞懂 Agent 的工作原理(第 1-2 周)
这个阶段不要碰任何复杂框架,先搞清楚大模型Agent 的运行循环:用户输入 -> 模型思考 -> 决定调用工具 -> 执行工具 -> 把结果交回模型 -> 模型生成最终回答。这就是 ReAct 的基本思想。
重点做三件事。第一,了解 Function Calling 的请求与返回结构;第二,理解“模型只负责决策,程序负责执行”的原则;第三,了解模型上下文如何影响 Agent 的稳定性。你可以用一个很简单的 Python 脚本,定义两个函数,让模型决定调哪个,先感受工具调用的全过程。
3.2 阶段二:选一个框架跑通(第 3-4 周)
目前主流的 Agent 框架有 OpenAI Agents SDK、LangChain / LangGraph、AutoGPT、MetaGPT、CrewAI 等。不建议全部深入,选一个和自己技术栈最近的先跑通。我的建议是:如果主要用 Python,可以优先看 OpenAI Agents SDK 或 LangGraph;如果关注多角色协作,可以看 MetaGPT 和 CrewAI;如果关心自由度,可以看 AutoGPT 系列。
跑通的目标很简单:创建一个 Agent,让它会调用一个外部工具,并能完成一次完整任务。例如让 Agent 查询时间、做一次计算、读取一个本地文件。不要一上来就做多 Agent 协作,那会打击信心。
3.3 阶段三:学会写 Skills(第 5-6 周)
从这一阶段开始,进入 Agent Skills 的核心。你需要理解 Skill 的标准结构:SKILL.md 负责描述技能,scripts 负责真正执行逻辑,assets 负责静态参考材料。还要学会写高质量 description,因为模型是根据 description 来判断什么时候调用这个 Skill 的。
建议写三个 Skill:一个文本处理类(如格式化 JSON)、一个数据处理类(如批量重命名)、一个计算类(如温度换算)。每个 Skill 控制在几十行脚本以内,重点是掌握结构而不是写复杂逻辑。
3.4 阶段四:工程化能力(第 7-8 周)
这个阶段要把 Skill 接到真实场景。包括:把 Skill 包装成 MCP 工具,让其他客户端能调用;为 Skill 加输入校验、超时控制、日志输出;用队列或批量循环处理一批文件;增加失败重试和错误分类。
如果你要做企业内部自动化,这里还可以加入权限设计:哪些 Skill 允许执行写操作,哪些只允许读操作,必须明确。
3.5 阶段五:企业级与多 Agent 协作(第 9-10 周)
最后一步是组合。你可以让多个 Agent 共享同一组 Skills,也可以给不同 Agent 指定不同 Skill 集:比如一个 Agent 负责数据清洗,一个 Agent 负责报告生成,一个 Agent 负责质检。此时要开始关注调用链路的可观测性、成本控制、版本管理和安全审计。
4. 环境准备与前置条件
Agent Skills 本身不重,但开发调试还是需要一套完整环境。下面是一份通用检查清单,具体版本按你选用的框架调整。
| 项目 | 建议配置 | 说明 |
|---|---|---|
| 操作系统 | Windows 10/11、macOS、Linux 均可 | 大部分框架跨平台 |
| Python | 3.10 或更高 | 主流 Agent 框架的基础环境 |
| Node.js | 18 或更高 | 部分 MCP Server 和工具链需要 |
| 大模型 API | 按需申请,或用本地模型 | 需要可用的模型调用凭证或本地推理服务 |
| 本地 GPU | 8G 显存起步,具体以模型为准 | 接 API 则不需要 GPU |
| 磁盘空间 | 至少 10G 可用 | 安装依赖和存放测试数据 |
环境准备阶段最容易踩的坑有两个。一个是 Python 版本太低,导致依赖装不上,建议直接用虚拟环境隔离;另一个是模型 API 凭证管理不规范,直接写在代码里容易泄露。正确做法是把密钥放到环境变量或独立的配置文件中。
如果你选择本地模型方案,可以参考常见的大模型本地部署方式,先启动一个支持 OpenAI 兼容接口的推理服务,再让 Agent 框架指向它的地址。这样既能保护数据不外传,又能体验完整的本地 Agent 流程。
5. 第一个 Skill 实战:目录结构、SKILL.md 与脚本
下面用一个非常简单的“温度换算” Skill 来演示整个流程。这个 Skill 虽然业务简单,但结构完整,适合当作模板。
5.1 Skill 的目录结构
一个标准 Skill 通常长这样:
text复制skills/
└── temperature-converter/
├── SKILL.md
├── scripts/
│ └── temperature_converter.py
└── assets/
└── readme.md
SKILL.md 是技能的核心描述文件,Agent 会优先读取它来理解技能用途。scripts 目录存放可执行脚本。assets 目录可以放参考文档、示例数据、规则表等静态资源。实际项目中,assets 经常用来存放领域词典、格式模板和业务规则,这些内容不需要改代码,但模型需要参考。
5.2 编写 SKILL.md
SKILL.md 的写法直接影响模型能不能正确使用技能。描述要具体、可触发、有输入输出示例。太泛的描述会让模型不知道怎么调用,太长的描述会消耗上下文空间。
markdown复制---
name: temperature-converter
description: 将摄氏温度换算为华氏温度,或反向换算。当用户提供温度数值并带有单位时触发。
---
# 摄氏 / 华氏温度换算
本技能提供摄氏度与华氏度的双向换算,适用于论文数据核对、食谱温度转换、代码调试等场景。
## 输入
- 数值,例如 100、-40
- 单位,支持 C、F、celsius、fahrenheit
## 执行
```bash
python scripts/temperature_converter.py "100 C"
输出
- 换算后的数值,保留两位小数
- 输出格式:
100 C = 212.00 F
code复制
这段描述的关键信息有三个:技能名称、触发条件(温度数值带单位)、执行方式(如何调用脚本)。模型读到这一段,基本就能判断什么时候用、怎么用。
### 5.3 编写可执行脚本
脚本不需要复杂,重点是能接收参数、处理输入、输出结果、有错误返回。下面是一个完整示例,可以直接保存为 `scripts/temperature_converter.py`。
```python
import sys
def convert_c_to_f(c: float) -> float:
return c * 9 / 5 + 32
def convert_f_to_c(f: float) -> float:
return (f - 32) * 5 / 9
def main() -> None:
if len(sys.argv) < 2:
print("usage: temperature_converter.py '100 C'")
sys.exit(1)
parts = sys.argv[1].split()
if len(parts) != 2:
print("error: input must be like '100 C'")
sys.exit(1)
value_text, unit_text = parts
try:
number = float(value_text)
except ValueError:
print("error: value must be a number")
sys.exit(1)
unit = unit_text.lower()
if unit in ("c", "celsius"):
result = convert_c_to_f(number)
print(f"{number} C = {result:.2f} F")
elif unit in ("f", "fahrenheit"):
result = convert_f_to_c(number)
print(f"{number} F = {result:.2f} C")
else:
print("error: unsupported unit")
sys.exit(1)
if __name__ == "__main__":
main()
这段代码不依赖任何第三方库,在任何 Python 3 环境都能运行。写脚本时要注意:必须能从命令行接收参数,必须对异常输入有处理,必须返回可解析的结果。如果你要做更复杂的技能,建议把“核心逻辑”和“参数解析”分层写,方便以后复用。
5.4 本地验证步骤
写完 Skill 后,先不要急着接入 Agent,先在本地验证脚本是否正确:
bash复制cd skills/temperature-converter
python scripts/temperature_converter.py "100 C"
python scripts/temperature_converter.py "-40 F"
python scripts/temperature_converter.py "abc C"
预期结果:
text复制100 C = 212.00 F
-40 F = -40.00 C
error: value must be a number
脚本没问题后,再进入下一步:把它接给 Agent。
6. 把 Skills 接入 Agent:MCP 与 API 两种方式
Skill 文件本身只是“说明书 + 脚本”,真正要变成 Agent 能用的能力,还需要一层桥接。目前主流的桥接方式有 MCP Server 和 Agent 框架 API 两种。
6.1 通过 MCP Server 注册 Skill
MCP 的核心思路是把 Skill 包装成一个标准工具,任何支持 MCP 的客户端都能发现并调用它。如果你使用某个 MCP Server 库,可以在配置里声明工具名称、描述和输入参数,然后由 MCP Server 在收到调用请求时去执行对应的 Skill 脚本。
以通用 MCP 工具定义的 JSON 结构为例,大致长这样:
json复制{
"name": "temperature-converter",
"description": "将摄氏温度换算为华氏温度,或反向换算",
"inputSchema": {
"type": "object",
"properties": {
"value": {
"type": "number"
},
"unit": {
"type": "string",
"enum": ["C", "F"]
}
},
"required": ["value", "unit"]
}
}
实际项目里,你只需要在 MCP Server 中把收到的 value 和 unit 拼接成命令行参数,然后调用 temperature_converter.py,最后把 stdout 返回给客户端。这样 Skill 就和工具协议解耦了,谁都可以调用。
6.2 通过 Agent 框架 API 调用 Skill
如果你用的是 OpenAI Agents SDK、LangGraph 等框架,通常可以直接在 Agent 配置里挂载自定义工具。示意代码如下,具体函数名和参数需要按你使用的框架调整:
python复制from agents import Agent, Runner
def run_temperature_converter(value: float, unit: str) -> str:
"""将摄氏温度换算为华氏温度,或反向换算"""
import subprocess
result = subprocess.run(
["python", "skills/temperature-converter/scripts/temperature_converter.py", f"{value} {unit}"],
capture_output=True,
text=True,
timeout=30
)
return result.stdout.strip()
agent = Agent(
name="temperature-assistant",
instructions="你是一个温度换算助手。需要换算时调用 temperature-converter 技能。",
tools=[run_temperature_converter]
)
result = Runner.run_sync(agent, "请把 100 摄氏度换算成华氏度")
print(result.final_output)
这段代码展示的是“技能脚本 -> 工具函数 -> Agent 工具列表”的桥接方式。实际项目中,建议不要把 subprocess 调用写在业务代码里,而是封装出一个统一的 SkillRunner,根据 Skill 名称路由到对应脚本,统一处理超时、日志和环境变量。
接入完成后,验证标准很简单:让 Agent 说一句“把 100 摄氏度换算成华氏度”,它能正确调用工具并返回 212.00 F,链路就通了。
7. 批量任务与工程化实战
单个 Skill 跑通只是第一步。真实场景中,Agent 处理的任务往往是一批文件、一批订单、一批报告。此时要考虑批量任务编排。
以批量处理 CSV 文件为例,思路是:读取任务列表,逐个把输入参数交给 Skill,收集结果后写回输出目录。下面是一个通用批量执行框架的伪代码,实际使用时把 run_skill 替换为你自己的调用函数即可。
python复制import json
from pathlib import Path
def run_skill(skill_name: str, input_text: str) -> str:
# 这里替换为真实的 Skill 调用逻辑
# 可以是 subprocess 调脚本,也可以是 MCP 工具调用
raise NotImplementedError
def load_tasks(config_path: str) -> list[dict]:
config = json.loads(Path(config_path).read_text(encoding="utf-8"))
return config["tasks"]
def save_result(output_file: str, result: str) -> None:
Path(output_file).parent.mkdir(parents=True, exist_ok=True)
Path(output_file).write_text(result, encoding="utf-8")
def main() -> None:
tasks = load_tasks("tasks.json")
for task in tasks:
result = run_skill(task["skill"], task["input"])
save_result(task["output_file"], result)
print(f"done: {task['input']}")
if __name__ == "__main__":
main()
对应的任务配置文件:
json复制{
"tasks": [
{
"skill": "temperature-converter",
"input": "100 C",
"output_file": "output/result_100.json"
},
{
"skill": "temperature-converter",
"input": "212 F",
"output_file": "output/result_212.json"
}
]
}
批量工程化要注意三个细节。第一,加超时:单个任务超过 30 秒要中断,避免整个队列卡死。第二,加失败隔离:一个任务失败不能影响后续任务,建议记录错误后继续处理。第三,加日志:每个任务都打印输入、输出、耗时和状态,方便排查。如果任务量很大,可以引入消息队列,把“任务生产”和“技能执行”分开,再用 Worker 并发消费。
这里要特别提醒:批量任务一旦放开了权限,影响面会成倍放大。比如批量发送邮件、批量修改文件、批量调用外部接口,都要在正式执行前做“演练模式”或“审批模式”,确认结果没问题后再放开写操作。
8. 资源占用与性能观察
Agent Skills 的性能瓶颈通常不在 Skill 本身,而在大模型推理和脚本执行两个环节。观察性能时,建议把一条完整链路拆成三段来看。
第一段是模型决策耗时,即 Agent 收到用户请求后,需要多久才能判断出该调用哪个 Skill。这段耗时主要取决于模型能力和上下文长度。如果 SKILL.md 写得很长,模型每次都可能要处理大量技能说明,token 消耗和延迟都会上升。更稳的做法是每个 SKILL.md 控制在几百行以内,description 控制在几行以内,让模型快速匹配。
第二段是脚本执行耗时。纯计算类脚本通常毫秒级完成,但如果 Skill 里包含文件读取、网页请求、数据库查询,耗时就会显著上升。观察这段耗时的方法很简单,在脚本入口和出口分别打点,对比两个时间戳。如果某个 Skill 执行时间异常,优先怀疑外部依赖而不是脚本本身。
第三段是模型结果生成耗时。模型拿到脚本输出后,需要把结果组织成自然语言回答。这段耗时受输出长度影响较大。如果你的应用只需要机器可读的结果,可以让模型直接返回 JSON,减少自然语言生成开销。
显存占用方面,如果你用云端 API,本机显存占用基本为零;如果用本地模型,显存占用由模型参数量和量化方式决定,需要以实际测试为准。另外要注意的是多任务并发:多个 Agent 同时调用 Skill,如果共用同一个本地模型服务,请求会排队,延迟会明显高于单任务。建议先用一个 Agent 串行跑通,再逐步增加并发。
有一个容易忽略的资源点:日志和输出目录。批量任务跑几十个文件后,日志文件可能膨胀得很快。建议按日期分目录,定期清理中间结果,不要把临时文件堆积在生产环境。
9. 常见问题与排查方法
这里汇总 Agent Skills 开发中最常遇到的问题,按“现象 -> 原因 -> 排查 -> 解决”整理成表。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 模型不调用 Skill | description 写得太泛,模型无法判断触发场景 | 查看模型输出中是否有 tool_call 记录 | 精简 description,加入明确触发关键词和示例 |
| SKILL.md 内容被截断 | 技能描述过长,超出模型上下文窗口 | 检查每次调用的 token 用量 | 精简 SKILL.md,把细节放到 assets 中按需加载 |
| 脚本执行报错 | 脚本依赖未安装或参数格式不对 | 手动在终端运行脚本查看 stderr | 补齐依赖,增加参数校验,统一错误输出 |
| Agent 调用 Skill 后无结果 | 脚本没有写 stdout,或 subprocess 捕获失败 | 检查脚本是否 print 结果 | 让脚本把所有结果写到 stdout,不要用 print 之外的方式输出 |
| 批量任务卡住 | 某个任务没有设置超时,一直阻塞 | 观察进程列表和日志 | 为每个 Skill 调用增加 timeout,失败后跳过继续 |
| 端口冲突 | MCP Server 或本地服务端口被占用 | 使用 netstat 检查端口占用 | 更换端口,或强制释放旧进程 |
| API 凭证泄露 | 密钥写在代码或配置文件中并提交到了仓库 | 检查 git 历史和运行日志 | 改用环境变量或密钥管理工具,立即轮换凭证 |
| 输出质量不稳定 | 脚本逻辑正确但模型组织结果时自由发挥 | 对比脚本输出和最终回答 | 让模型直接引用脚本输出,减少二次改写 |
| 并发后延迟飙升 | 多个 Agent 同时请求本地模型或外部 API | 检查服务端请求队列 | 限制并发数,增加重试退避机制 |
排查 Agent 问题时,最重要的一件事是“分层定位”。先确认脚本本身能不能跑,再确认模型是否发起了工具调用,再确认结果是否正确回传到模型。直接把锅甩给模型层,通常会让问题更难定位。
10. 最佳实践与安全边界
这部分是实战经验的浓缩,建议在项目里直接落实。
第一,一个 Skill 只做一件事。不要写一个“全能技能”把所有逻辑塞进去。Skill 越小,模型越容易判断什么时候调用,代码也越容易维护。如果一个任务步骤复杂,可以拆成多个 Skill 由 Agent 顺序调用。
第二,description 是模型唯一的路标。写 description 时,要包含“什么时候用”“用到什么输入”“输出大概什么样”。不要只写“温度换算工具”这种模糊描述,而应写成“当用户提供温度数值并带有 C 或 F 单位时触发”。
第三,脚本输入必须校验。Agent 传参不一定按预期来,脚本必须有非法输入处理。任何传入参数都可能是字符串、空值、超长文本,做好校验能避免很多线上事故。
第四,执行环境要做隔离。Skill 脚本可能会有文件操作、网络请求等行为,建议在沙箱环境或受限账号下运行。如果允许 Skill 执行写操作,一定要有权限控制:哪些技能只读,哪些技能可写,哪些技能需要审批。
第五,涉及个人信息、人脸、声音、版权素材的任务,必须确认合法授权。Agent 自动化批量处理用户数据时,要遵循最小必要原则,处理完及时清理中间文件。发布或商用前,要对生成结果做人工复核。
第六,API 凭证和密钥不得写入代码。任何调用大模型、MCP Server、外部 API 的凭证都用环境变量或专用密钥管理工具保存,并在日志中脱敏。
11. 总结与下一步
Agent Skills 最值得尝试的一点,是把大模型开发从“提示词调试”推进到了“技能工程”:思考交给模型,执行交给标准化的脚本目录。这条路能走通,是因为 2025 年下半年各家 Agent 框架都在往这个方向收敛,OpenAI Agents SDK、Anthropic Skills 仓库和 MCP 生态形成了一组合力。
对于刚开始接触这个方向的读者,建议第一步不是去学复杂框架,而是先创建上面那个 temperature-converter 这样的小 Skill,让它在本地脚本层跑通,再通过一个工具函数挂到 Agent 上,观察模型能不能正确触发调用。跑通这个最小闭环后,再尝试第二个 Skill,比如批量重命名文件、批量整理 CSV、生成 Markdown 报告。最容易踩的坑就是跳过脚本验证直接接 Agent,导致最后分不清是模型选错了工具还是脚本本身有问题。
下一步可以分三个方向扩展:一是研究 MCP 协议,把 Skill 包装成标准工具,供更多客户端复用;二是研究多 Agent 协作,让不同 Agent 使用不同 Skill 集,组成一条自动处理流水线;三是研究批量任务队列,把 Skill 从“单次调用”升级为“稳定服务”。这套能力学完以后,你再看 AutoGPT、MetaGPT、LangGraph 这些项目,会发现很多功能背后都是同样的技能工程思想。建议收藏本文,动手的时候照着目录结构和样例脚本改,比从零开始摸索快得多。
