首页/新闻资讯/正文详情

Agent Skills设计与实现:用SKILL.md与MCP构建可复用AI Agent能力

发布时间:2026/9/26 17:55:13 来源:云帆数科 栏目:资讯中心
Agent Skills设计与实现:用SKILL.md与MCP构建可复用AI Agent能力
1. 从一次技能误触说起Agent Skills 到底解决什么问题如果你正在做 AI Agent大概率遇到过这种场景给 Agent 塞了十几个工具结果它在该查天气的时候去调了数据库该写周报的时候触发了代码执行。问题不在模型笨而在于你给它的能力没有边界。Agent Skills 就是来解决这件事的——它把「一个 Agent 能做什么」拆成一个个独立、可描述、可加载的技能单元每个单元用一份 SKILL.md 定义语义边界再通过 MCP 把外部工具调用接进来。简单说Agent Skills 是一套让 AI Agent 能力可复用、可组合、可验证的工程化方案。它适合三类人一是正在从「写提示词」转向「搭能力系统」的 Agent 开发者二是需要把团队内部工具标准化接入 Agent 的工程团队三是想让自己的 Agent 在多个平台Claude Code、Cursor 等复用同一套技能定义的独立开发者。我试过把一套 PDF 处理技能从 Claude Code 迁移到另一个支持 MCP 的客户端只改了配置路径SKILL.md 一行没动就跑通了。这就是结构化技能封装的价值。下面我会从目录结构、SKILL.md 骨架、MCP 配置到本地验证给出一套可以直接复制的落地流程。2. 前置准备TaoToken 接入与技能运行环境在写第一个 Skill 之前你需要一个能稳定调用模型的入口。TaoToken 提供统一的 API 接入支持模型对话、Coding Plan 和 API Keys 管理适合作为 Agent 技能链路的模型底座。2.1 获取 API Key 与接入地址访问官网 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 注册后进入控制台创建 API Key。API 基础地址为 https://taotoken.net/api不加 UTM。拿到 Key 后建议先写入环境变量避免硬编码到 SKILL.md 或脚本里export TAOTOKEN_API_KEYsk-你的key export TAOTOKEN_BASE_URLhttps://taotoken.net/api2.2 技能运行的最小依赖Agent Skills 本身是 Markdown 脚本的组合不依赖特定框架。但要让 MCP 工具调用跑起来你需要Node.js 18用于运行 MCP serverPython 3.10如果你的 Skill 包含 Python 脚本一个支持 MCP 的客户端Claude Code、Cursor 或自建 Agent 运行时如果你打算长期做编码类 Agent可以了解 Coding Plan它更适合高频调用场景如果只是验证模型对话链路直接用模型对话页面即可。3. 可复制配置目录结构、SKILL.md 骨架与 MCP 片段这一节是全文的核心。我会给出一个完整的「PDF 处理技能」示例你可以把 pdf 替换成自己的业务名。3.1 标准目录结构Agent Skills 的目录结构遵循约定优于配置的原则。目录名必须与 SKILL.md 中的 name 字段完全一致否则加载器找不到入口。skills/ └── pdf-toolkit/ ├── SKILL.md # 必需技能定义入口 ├── scripts/ # 可选可执行脚本 │ ├── pdf_rotate.py │ └── pdf_extract_table.py ├── references/ # 可选参考文档 │ └── pdf-format-spec.md └── assets/ # 可选静态资源 └── output-template.md项目级技能放在.agents/skills/下全局技能放在~/.taotoken/skills/下。加载优先级是项目级高于全局级这样你可以用项目级技能覆盖全局同名技能做调试。3.2 SKILL.md 骨架SKILL.md 采用 YAML Frontmatter Markdown 正文的格式。Frontmatter 里的 name 和 description 是始终加载的元数据层正文是按需加载的技能正文层。--- name: pdf-toolkit description: 当用户需要旋转 PDF、提取 PDF 表格或生成 PDF 摘要时使用。支持 90/180/270 度旋转和表格转 Markdown。 version: 1.0.0 compatibility: - claude-code - cursor - mcp-client --- # PDF 处理技能 ## 触发条件 ### 显式触发 - 关键词/pdf、/rotate-pdf、/extract-table - 用户明确提到「旋转 PDF」「提取表格」 ### 隐式触发 - 对话历史中出现 PDF 文件路径 旋转/表格/摘要意图 - 置信度阈值语义匹配度超过 0.85 时自动触发 ## 执行步骤 ### 旋转 PDF 1. 确认旋转角度为 90、180、270 之一 2. 调用 scripts/pdf_rotate.py传入文件路径和角度 3. 输出保存到 assets/output/rotated-timestamp.pdf 4. 返回文件路径和页数变化说明 ### 提取表格 1. 调用 scripts/pdf_extract_table.py 2. 检查返回表格是否为空 3. 转换为 Markdown 表格并附加来源页码 4. 保存到 assets/output/table-timestamp.md ## 异常处理 - 格式不支持返回 E001建议先转换 PDF 格式 - 识别失败返回 E002提示人工介入 - 超时15s返回 E003走降级路径只返回文本摘要 ## 评测指标 - 旋转准确率100%角度校验通过后执行 - 表格提取准确率≥95% - 响应时间简单操作 ≤3s复杂操作 ≤10s这里的关键是 description 字段。它决定了模型在什么时候加载这个技能。写得太宽会导致误触写得太窄会导致该触发时不触发。我的经验是把「用户会怎么说」和「技能能做什么」都写进去用逗号分隔多个触发场景。3.3 MCP 配置片段MCP 负责把 SKILL.md 里的脚本调用变成标准化的工具调用。下面是一个 MCP server 配置示例放在客户端的 mcp 配置文件中{ mcpServers: { pdf-toolkit: { command: python, args: [-m, mcp_server_pdf], env: { TAOTOKEN_API_KEY: ${TAOTOKEN_API_KEY}, TAOTOKEN_BASE_URL: https://taotoken.net/api, SKILL_ROOT: ./skills/pdf-toolkit } } } }对应的 MCP server 最小实现Python如下它把 SKILL.md 里声明的脚本暴露成工具from mcp.server import Server from mcp.types import Tool, TextContent import subprocess, json, os app Server(pdf-toolkit) SKILL_ROOT os.environ.get(SKILL_ROOT, ./skills/pdf-toolkit) app.list_tools() async def list_tools(): return [ Tool( namepdf_rotate, description旋转 PDF 文件支持 90/180/270 度, inputSchema{ type: object, properties: { file_path: {type: string}, angle: {type: integer, enum: [90, 180, 270]} }, required: [file_path, angle] } ) ] app.call_tool() async def call_tool(name: str, arguments: dict): if name pdf_rotate: script os.path.join(SKILL_ROOT, scripts, pdf_rotate.py) result subprocess.run( [python, script, arguments[file_path], str(arguments[angle])], capture_outputTrue, textTrue, timeout15 ) return [TextContent(typetext, textresult.stdout or result.stderr)]这段代码的作用是当模型决定调用 pdf_rotate 时MCP server 接收参数、执行脚本、把结果回传给模型。SKILL.md 负责「什么时候调」MCP 负责「怎么调」。4. 验证请求确认技能加载与调用链路生效配置写完后不要急着接业务。先用最小请求验证三件事技能是否被加载、触发是否准确、工具调用是否返回。4.1 验证技能加载在客户端启动后查看技能列表是否包含 pdf-toolkit。以命令行方式验证# 列出已加载技能 npx skills list --path ./skills # 预期输出 # pdf-toolkit v1.0.0 当用户需要旋转 PDF...如果列表为空检查目录名与 name 字段是否一致以及 SKILL.md 的 Frontmatter 是否以---开头和结尾。4.2 验证触发与调用发送一条明确触发请求帮我把 ./docs/report.pdf 旋转 90 度预期链路是模型匹配 description → 加载 SKILL.md 正文 → 调用 MCP 的 pdf_rotate 工具 → 脚本执行 → 返回文件路径。如果模型没有触发技能把 description 改得更贴近用户表达如果触发了但工具调用失败检查 MCP server 的 env 里 SKILL_ROOT 是否指向正确目录。4.3 验证模型对话链路如果你只想先确认模型侧能正常响应可以用模型对话页面发一条测试消息确认 API Key 和 base_url 配置无误。这一步能排除「是模型没响应还是技能没加载」的歧义。5. 本篇常见错排查5.1 技能不加载目录名与 name 不一致这是最高频的问题。加载器按目录名查找 SKILL.md如果目录叫 pdf-toolkit 但 name 写的是 pdf_toolkit就会静默跳过。统一用连字符小写。5.2 触发过于频繁description 写太宽比如 description 写成「处理文件相关任务」模型会把所有文件操作都往这个技能上靠。改成「当用户需要旋转 PDF 或提取 PDF 表格时使用」把边界收窄。5.3 MCP 调用超时脚本没有超时控制SKILL.md 里写了 15 秒降级但脚本本身没有 timeout会导致 MCP server 挂起。在 subprocess.run 里加 timeout 参数并在脚本内部也做分块处理。5.4 环境变量丢失MCP 配置里没透传MCP server 是独立进程不会自动继承 shell 的环境变量。必须在配置的 env 字段里显式声明 TAOTOKEN_API_KEY 和 TAOTOKEN_BASE_URL。5.5 跨平台路径问题用了绝对路径SKILL.md 和 MCP 配置里尽量用相对路径配合 SKILL_ROOT 环境变量解析。绝对路径在换机器后会直接失效。6. 下一步把技能接入你的实际工作流技能跑通后建议按这个顺序推进先把一个高频任务封装成 Skill验证触发和调用再把多个 Skill 组合成串行链路比如「提取表格 → 生成摘要 → 导出 Markdown」最后把技能目录纳入版本控制用项目级路径做灰度。如果你需要管理多个 API Key 或查看调用量去控制台如果要把技能接入编码类 Agent 做长期任务看 Coding Plan如果只是想先验证模型对技能描述的理解能力直接用模型对话试几条触发语句。接入文档里有 MCP 配置的完整字段说明遇到加载问题可以先对照检查。技能工程的本质是把「模型会做什么」变成「你定义了它能做什么」。SKILL.md 是契约MCP 是管道验证是保险丝。三者对齐Agent 的能力才真正可复用。

相关推荐

Nginx重定向完全指南:rewrite、return与301/302实战
Nginx重定向完全指南:rewrite、return与301/302实战

1. 先弄清楚:Nginx重定向到底解决什么问题我记得刚接触Nginx那会儿,对"重定向"的理解就停留在"把用户从一个地址带到另一个地址"这个层面。后来踩的坑多了才发现,重定向这活儿在真实业务里承担的角色远比表面复杂。它至少… · 2026/9/26 17:55:13

Codex控不了浏览器?MCP与CDP链路排查详解
Codex控不了浏览器?MCP与CDP链路排查详解

你问“Codex控不了浏览器”,我第一反应是:先别急着怀疑Codex,也别急着怀疑浏览器,先怀疑中间那个传话的。Codex本身不是一个能直接点按钮的机器人,它是一个会调用工具的智能体。浏览器控制要打通一条很长的链路&#x… · 2026/9/26 17:55:07

Spring Boot校园二手交易平台:从环境搭建到答辩改造全解析
Spring Boot校园二手交易平台:从环境搭建到答辩改造全解析

开始前的三件事:先把“拿到代码”变成“看懂代码”如果你手里正好是这套 Spring Boot 校园二手交易平台(lca16),我猜你现在最想干的不是看功能介绍,而是赶紧让它跑起来。这个心情我很理解,因为我前后帮几十… · 2026/9/26 17:55:07

Composer 2.5 深度实测:逼近 Opus 4.7 的 AI 编程代理,成本仅十分之一
Composer 2.5 深度实测:逼近 Opus 4.7 的 AI 编程代理,成本仅十分之一

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 18:32:23

资质齐全的销售咨询企业服务覆盖实力分析报告
资质齐全的销售咨询企业服务覆盖实力分析报告

资质齐全的销售咨询企业,如何靠服务覆盖能力助力TOB企业业绩增长?深圳直线管理咨询有限公司是专为工业品企业、TO B营销模式、高科技企业提供营销体系建设、销售能力提升系统解决方案的咨询培训机构,核心价值是帮助企业破解营销瓶颈,实现业绩… · 2026/9/26 18:32:16

会议纪要软件哪个准确?实测通义听悟、讯飞听见、Otter.ai,我找到了效率翻倍的答案
会议纪要软件哪个准确?实测通义听悟、讯飞听见、Otter.ai,我找到了效率翻倍的答案

相信很多职场人都有过这样的经历:开完一个两个小时的会议,手忙脚乱记了几页潦草的笔记,结果回头一看,关键决策点在哪里?谁说了什么?下周要跟进的待办事项是什么?全是一团乱麻。更别提那些动辄一… · 2026/9/26 18:32:16

200K上下文不是万能:AI编程中如何高效管理上下文窗口
200K上下文不是万能:AI编程中如何高效管理上下文窗口

最近朋友问我最多的问题,十个里有八个和“AI编程”有关。大家被“Claude Code 的 200K 上下文”这个卖点吊足了胃口,觉得只要窗口够大,AI 就能一口气把整个项目都吞下去,然后像高级工程师一样精准地帮我改代码、迁移模块、重构祖宗… · 2026/9/26 18:32:10

AI NAS实战:从本地大模型部署到数据智能管理
AI NAS实战:从本地大模型部署到数据智能管理

1. 传统NAS的困局:存储不等于数据管理1.1 数据多了之后的第一道坎:检索我接触NAS的时间不算短,从最早的黑群晖折腾到现在的全闪DIY,前前后后换了不下五台设备。但你问我在这个过程中最大的感受是什么,我的答案可能跟很… · 2026/9/26 18:32:10

LLM应用开发:Skill如何封装Function Calling与ReAct实现可复用业务能力
LLM应用开发:Skill如何封装Function Calling与ReAct实现可复用业务能力

1. 从“工具堆满桌”到“能力可复用”:Skill 到底在解决什么问题我见过太多团队在 LLM 应用落地上卡在同一个地方:模型接进来了,Function Calling 也跑通了,MCP 协议也配好了,ReAct 循环也写出来了,但整个系… · 2026/9/26 18:32:10

数据库课后习题答案别硬背:当测试用例集刷,效率翻倍
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍

简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21

OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40

向下兼容与向上兼容:接口设计中的兼容性策略与工程实践
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践

一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码