本文探讨了AI技能链Agent Skills的概念及其在解决AI应用中的痛点问题上的作用。文章指出传统的AI应用方式如使用提示词Prompt存在效率低、结果不稳定等问题。AI技能链通过将专家知识和操作流程结构化地封装成可复用的模块使AI能够更稳定、高效地执行任务。文章详细阐述了技能链的设计原理、使用方法以及与函数调用和MCP的边界区别并提出了在生产环境中避免常见错误的建议。最终强调技能链是将专家知识转化为AI可执行操作流程的关键工具能够显著提升AI应用的质量和稳定性。你有没有遇到过这种情况写了一个函数需要补充单元测试。你打开 AI 助手发了一句话过去。AI 给了你几个测试用例。但你看了一眼发现边界条件根本没有覆盖Jest 框架也没用覆盖率更是没有任何说明。你只好重新发一条“要用 Jest 框架要覆盖边界情况要生成覆盖率报告……”下周同样的事情再发生一次你又要从头解释一遍。或者这个场景团队里积累了几十个 Markdown 文档格式乱、目录缺、链接死。你告诉 AI “帮我整理一下这些文档”AI 只是改了改标题格式其他什么都没动。你想要的是统一格式、提取关键信息、生成目录、验证链接——这些它压根不知道。问题不是 AI 不聪明。问题是它没有一套稳定的、可复用的能力链来完成这类任务。每次都要重新解释每次执行结果都不一样每次都是一次性的。这才是真正的痛点。Agent Skills 要解决的就是这个问题。什么是 Agent Skills先给一个干净的定义Skill 是一个可被 Agent 在运行时发现、理解、调用和组合的能力模块。这句话里有四个动词——发现、理解、调用、组合——缺少任何一个它都不能叫 Skill。用一个生活场景来理解你手机里装了几十个 App。当你想导航的时候不需要自己写路线规划算法直接打开地图 App 就好。App 帮你把导航这件事封装好了——如何定位、如何规划、如何播报全在里面。Agent Skills 的逻辑完全一样。Agent 是那部手机负责理解你的意图并调度能力Skill 是那个 App给 Agent 增加一项可调用的能力生态 是应用商店让能力被发现、安装和管理再讲一个更贴近工程场景的类比是你刚入职一家公司。你智商很高学东西快但完全不懂这家公司的业务。老板让你处理一下这批退款并生成财务报告。如果没有任何参考资料你大概率会做错。但如果书架上有一本《退款处理与财务报告生成 SOP》你只需要按照手册里的步骤用公司的工具电脑、系统账号一步步执行结果就会是对的。这本手册就是 Skill。它给 Agent 发的不是命令而是一张图书馆借阅证——不是强迫它背下整个图书馆而是让它在需要的时候去查。Skill 和 Prompt 有什么本质区别很多人第一反应是Skill 不就是一个很长的 Prompt 吗写详细点不就行了不一样差别很大。我们从三个维度来看发现性Prompt 需要用户主动提供。你每次要用就得自己把 Prompt 粘贴进去。Skill 不一样Agent 可以根据你的任务描述自动匹配到合适的 Skill你不需要知道它叫什么名字。执行性Prompt 本质上是告诉 AI 做什么但执行过程是 AI 自由发挥的。Skill 内部有结构化的 Workflow每一步要做什么、怎么做、不能做什么全都有明确规定。复用性Prompt 是一次性的散落在对话历史里下次遇到同样的任务你还得从头写。Skill 是独立的模块一次定义到处复用还能持续迭代优化。举个具体例子用 Prompt 的方式补充单元测试你需要写“帮我给这个函数补充单元测试要用 Jest 框架要覆盖边界情况要检查覆盖率要……”——每次都要重复容易遗漏结果不稳定。用 Skill 的方式你只需要说帮我补充单元测试Agent 识别到这是一个测试相关任务自动加载 test-driven-development Skill按照里面定义好的流程执行理解代码 → 设计测试场景 → 编写测试代码 → 验证覆盖率。结果一致流程稳定不用每次解释。为什么需要它三个架构级的痛点上面说的是表层体验。从工程架构的角度看Agent Skills 解决的是三个更深层的问题。痛点一巨型提示词灾难很多团队的第一反应是把所有业务规则、操作流程、边界条件全写进系统提示词。结果是上下文越来越长几千 Token 变成几万 Token。这不只是钱的问题。当提示词超过模型能高质量处理的范围会出现一个现象叫注意力丢失Lost in the Middle——中间部分的指令模型大概率会忽略。越长的 Prompt指令遵循能力越差。痛点二执行能力和专业知识脱节现在的 Agent 系统通常配了很多工具能执行代码、能读写文件、能调 API。但拥有工具不等于知道如何专业地使用工具。给 Agent 一个能执行 SQL 查询的工具它能查。但它知道针对你这张五百万行的宽表应该怎么写查询吗知道如何做多步关联验证吗知道数据异常了该怎么回退吗这些操作智慧工具给不了必须单独注入。痛点三企业级可靠性缺失生产环境有一个基本要求相同输入相同输出。但依赖动态生成的提示词系统行为会有大量随机性。今天跑正确明天换个措辞就跑歪了。工程化系统需要确定性。需要把专家的隐性知识转换成模型可以稳定执行的标准操作流程。这三个痛点指向同一个缺失缺少一种可插拔的领域专家大脑机制。 Agent Skills 填的就是这个空。Agent 是怎么决定调用哪个 Skill 的这是一个很多人想搞清楚的问题我说一句话Agent 是怎么判断要不要调用 Skill调用哪个的整个决策流程分五步第一步识别任务类型。 Agent 先判断你的请求是什么性质的任务——测试相关文档处理代码审查这一步相当于分类。第二步判断是否需要 Skill。 不是所有任务都需要 Skill。Python 是什么语言这种问题直接回答就好不需要任何流程。判断标准是这个任务是否需要结构化的多步骤执行是否有明确的验证标准第三步语义匹配。 如果判断需要 SkillAgent 会在所有可用 Skill 的描述description里做语义搜索找到最匹配的那一个。第四步注入并执行。 找到 Skill 后把 Skill 的完整内容注入到系统提示词Agent 按照里面的 Workflow 一步步执行。第五步整合输出。 Skill 执行完成结果返回给你。这背后有一个精妙的设计——渐进式信息披露。系统启动时只加载所有 Skill 的元数据名字和描述每个大约一百个 Token。等到识别到具体任务才加载完整的 SKILL.md几千 Token。如果任务还需要外部参考资料才在执行过程中按需加载可能几万 Token。这种设计让 Agent 能知道几百个 Skill 的存在但只在真正需要的时候才学习具体内容。既保持了广度又控制了成本。Skill 长什么样从外到内拆解理解了调用机制我们来看 Skill 本身的结构。从三个层次来看第一层使用者视角黑盒对用户来说Skill 就是我说一句话Agent 按某套流程处理然后给我结果。不需要知道里面是什么。第二层文件夹视角打开一个 Skill 的目录通常长这样my-skill/├── SKILL.md # 必需核心文件├── scripts/ # 可选可执行脚本├── references/ # 可选参考文档├── assets/ # 可选静态资产└── templates/ # 可选输出模板只有 SKILL.md 是必须的其他都是按需添加。第三层SKILL.md 的内部结构一个典型的 SKILL.md 长这样---name: test-driven-developmentdescription: 在实现任何新功能或修复 Bug 时使用必须在编写实现代码之前调用---# 测试驱动开发## Goal引导使用 TDD 方法论来实现具体功能。## Workflow1. 理解需求阅读功能描述识别验收标准2. 设计测试用例列举测试场景按优先级排序3. 测试先行用项目指定框架实现测试确保初始失败4. 实现代码编写最小代码使测试通过5. 重构在不改变行为的前提下提升代码质量## Constraints- 绝对不能在写测试之前写实现代码- 代码覆盖率最低要求 80%- 每个测试必须独立、可重复运行结构很清晰frontmatter 是路由的入口body 是执行的指南。description 字段尤其关键它直接决定了这个 Skill 会不会在合适的时机被找到。写好和写差的区别很大根据复杂度不同Skill 分三种类型简单型只有一个 SKILL.md3-5 步线性流程比如生成 Git 提交信息。五分钟就能写完。多步骤工作流型仍然只有 SKILL.md但 Workflow 有分支逻辑5-10 步比如 TDD 开发流程。资源依赖型SKILL.md 加上外部资源目录适合需要参考文档、执行脚本、使用模板的复杂任务。代码落地两种框架的完整实现理论说完了来看代码。我们用一个具体任务串起来实现一个天气查询 Skill分别用 OpenAI SDK 和 LangChain 两套框架落地。先定义这个 Skill---name: get-weatherdescription: 获取指定城市的天气信息。在用户询问天气、气温或出行建议时使用。---# 获取天气信息## Goal根据用户询问提供准确的天气信息。## Workflow1. 从用户请求中提取城市名称2. 获取该城市当前天气数据温度、天气状况、湿度、风速3. 以自然对话口吻返回结果4. 如需对比多城市分别获取后整合展示## Constraints- 默认使用摄氏度- 只提供当前天气不做长期预测- 空气质量差时主动提醒## Examples用户北京今天天气怎么样回答北京今天晴天25°C空气质量良好适合出行。核心引擎架构两套框架共用同一套三层架构SkillRegistry加载所有 Skill ↓SkillRouter根据用户输入选择 Skill ↓SkillExecutor注入 Skill 文档并执行方案一OpenAI SDK 版本import os, re, jsonfrom pathlib import Pathfrom typing import Dict, List, Optional, Tuplefrom dataclasses import dataclassfrom openai import OpenAIfrom dotenv import load_dotenvload_dotenv()client OpenAI( api_keyos.getenv(DEEPSEEK_API_KEY), base_urlos.getenv(DEEPSEEK_BASE_URL, https://api.deepseek.com))dataclassclass SkillMetadata: name: str description: str file_path: str full_content: Optional[str] Noneclass SkillRegistry: 扫描目录加载所有 Skill 文件 def __init__(self, skills_dir: str): self.skills_dir Path(skills_dir) self.skills: Dict[str, SkillMetadata] {} self._load_all_skills() def _parse_skill_file(self, file_path: Path) - Optional[SkillMetadata]: with open(file_path, r, encodingutf-8) as f: content f.read() # 提取 YAML frontmatter match re.search(r^---\s*\n(.*?)\n---, content, re.DOTALL) ifnot match: returnNone frontmatter match.group(1) name_match re.search(rname:\s*(.), frontmatter) desc_match re.search(rdescription:\s*(.), frontmatter) ifnot name_match ornot desc_match: returnNone return SkillMetadata( namename_match.group(1).strip(), descriptiondesc_match.group(1).strip(), file_pathstr(file_path), full_contentcontent ) def _load_all_skills(self): skill_files ( list(self.skills_dir.glob(*.skill)) list(self.skills_dir.glob(*.md)) ) for f in skill_files: skill self._parse_skill_file(f) if skill: self.skills[skill.name] skill def get_all_skills_summary(self) - str: return\n.join( f- {s.name}: {s.description} for s in self.skills.values() )class SkillRouter: 调用 LLM根据用户输入选择合适的 Skill def __init__(self, registry: SkillRegistry): self.registry registry def route(self, user_input: str) - Optional[str]: prompt f你是一个 Skill 路由器。根据用户输入选择最合适的 Skill。可用 Skills{self.registry.get_all_skills_summary()}用户输入{user_input}只返回 Skill 名称没有合适的返回 NONE。 response client.chat.completions.create( modelos.getenv(DEEPSEEK_MODEL, deepseek-chat), messages[{role: user, content: prompt}], temperature0, max_tokens50 ) skill_name response.choices[0].message.content.strip() return skill_name if skill_name in self.registry.skills elseNoneclass SkillExecutor: 加载完整 Skill 文档注入系统提示词后执行 def __init__(self, registry: SkillRegistry): self.registry registry def execute(self, skill_name: str, user_input: str) - str: skill self.registry.skills.get(skill_name) ifnot skill: returnfSkill {skill_name} 不存在 system_prompt f你现在要执行以下 Skill{skill.full_content}严格按照 Workflow 执行遵守所有 Constraints直接返回结果。 response client.chat.completions.create( modelos.getenv(DEEPSEEK_MODEL, deepseek-chat), messages[ {role: system, content: system_prompt}, {role: user, content: user_input} ], temperature0.7 ) return response.choices[0].message.contentclass AgentSkillsEngine: 系统入口协调 Registry / Router / Executor def __init__(self, skills_dir: str): self.registry SkillRegistry(skills_dir) self.router SkillRouter(self.registry) self.executor SkillExecutor(self.registry) def process(self, user_input: str) - Tuple[str, Optional[str]]: skill_name self.router.route(user_input) ifnot skill_name: return抱歉没有找到合适的 Skill 处理这个请求。, None result self.executor.execute(skill_name, user_input) return result, skill_name def list_skills(self) - List[str]: return list(self.registry.skills.keys())调用方式engine AgentSkillsEngine(skills_dir./skills)result, skill engine.process(北京今天天气怎么样)print(f回复{result})print(f使用 Skill{skill})result, skill engine.process(对比北京和长沙的天气)print(f回复{result})方案二LangChain 版本LangChain 版本在架构上完全一致换成 LCELLangChain Expression Language的写法用 | 操作符串联各组件from langchain_openai import ChatOpenAIfrom langchain_core.prompts import ChatPromptTemplatefrom langchain_core.output_parsers import StrOutputParserclass SkillRouter: def __init__(self, registry): self.registry registry self.llm ChatOpenAI( modelos.getenv(DEEPSEEK_MODEL, deepseek-chat), api_keyos.getenv(DEEPSEEK_API_KEY), base_urlos.getenv(DEEPSEEK_BASE_URL, https://api.deepseek.com), temperature0 ) self.prompt ChatPromptTemplate.from_messages([ (system, 你是一个 Skill 路由器。{skills_summary}规则只返回 Skill 名称没有合适的返回 NONE。), (human, {user_input}) ]) # LCEL 链提示词 → 模型 → 解析输出 self.chain self.prompt | self.llm | StrOutputParser() def route(self, user_input: str) - Optional[str]: result self.chain.invoke({ skills_summary: self.registry.get_all_skills_summary(), user_input: user_input }) skill_name result.strip() return skill_name if skill_name in self.registry.skills elseNoneclass SkillExecutor: def __init__(self, registry): self.registry registry self.llm ChatOpenAI( modelos.getenv(DEEPSEEK_MODEL, deepseek-chat), api_keyos.getenv(DEEPSEEK_API_KEY), base_urlos.getenv(DEEPSEEK_BASE_URL, https://api.deepseek.com), temperature0.7 ) self.prompt ChatPromptTemplate.from_messages([ (system, 执行以下 Skill{skill_content}严格按照 Workflow 执行直接返回结果。), (human, {user_input}) ]) self.chain self.prompt | self.llm | StrOutputParser() def execute(self, skill_name: str, user_input: str) - str: skill self.registry.skills.get(skill_name) ifnot skill: returnfSkill {skill_name} 不存在 return self.chain.invoke({ skill_content: skill.full_content, user_input: user_input })LangChain 版本和 OpenAI SDK 版本的逻辑完全相同差别只是表达方式。如果你的项目里已经在用 LangChain 的生态直接接入就好如果是新项目两种都可以OpenAI SDK 版本更轻量。怎么选Skills、Function Calling、MCP 的边界用了这么久有一个绕不开的问题这三个东西什么时候用哪个先理清各自的定位Function Calling代码级函数调用。你定义函数签名AI 决定什么时候调用它调用后你处理结果。执行是确定的代码写什么就跑什么。MCPModel Context Protocol协议级能力接入。标准化的接口协议让 AI 能接入各种外部系统数据库、文件系统、第三方服务。解决如何连接的问题。Agent Skills语义级能力模块。用 Markdown 描述做什么、怎么做、不能做什么AI 按照描述执行。解决如何专业地完成的问题。判断用哪个看这几个维度确定性要求高不高 金融交易、数据库写入、触发支付——这些场景不允许任何随机性必须用 Function Calling。给定相同输入一定要得到相同输出。需不需要快速迭代 如果你还在验证阶段需求每周都在变Agent Skills 的优势很明显。改 Markdown 比改代码快也不需要重新部署。等流程稳定了再考虑要不要换成 Function Calling。团队里有没有非技术人员 产品经理、运营想定义工作流但不会写代码——Agent Skills 是唯一的选项。描述清楚流程和规则就能用起来。需不需要跨平台复用 同一套能力要在多个 AI 系统里用MCP 的标准化协议价值才体现出来。如果只在一个系统里用MCP 的开发成本未必值得。实际项目里这三个通常是组合使用的高层工作流用 Skills底层精确操作用 Function Calling跨系统集成用 MCP。 不是非此即彼是各司其职。生产环境里最容易踩的四个坑最后说一些真正上线之后才会遇到的问题。坑一路由瘫痪——Skills 互相打架当你的 Skill 库积累到几十个如果各个 Skill 的 description 语义重叠Agent 就会开始选择困难。用户说处理这个文件Agent 在 file-processor、document-analyzer、data-extractor 之间反复横跳。解法每个 Skill 的 description 要有清晰的边界而且要加负向触发器——明确写出本 Skill 不处理 X 类任务。比如description: | 当用户需要提取文本或处理 PDF 结构时使用。 不用于处理纯文本文件或代码仓库扫描。坑二上下文隐性膨胀Skill 里定义了读取 references/ 目录下的文档但没有限制读取量。执行时 Agent 把整个目录的内容全加载进来几万 Token 一下就打满了。解法在 SKILL.md 里明确限制“每次最多读取 5000 Token使用 grep 过滤后再读取不要全量加载。”坑三description 写成了说明书新手最常见的错误把 description 写得很详细一段话解释背景、功能、使用场景、注意事项。结果适得其反——description 太长太复杂路由器反而判断不准了。description 要短、精、关键词密度高。一两句话清晰说明触发时机和核心能力。坑四Skill 过了保质期Skill 里引用了某个外部接口的格式接口升级了Skill 没更新。或者团队的代码规范变了Skill 里的标准没跟上。这种静默降级很隐蔽——系统不报错但结果越来越偏。解法建立定期审计机制。每隔一段时间人工检查 Skill 的 Workflow 和 Constraints 是否还与实际情况对齐。最后对于正在迷茫择业、想转行提升或是刚入门的程序员、编程小白来说有一个问题几乎人人都在问未来10年什么领域的职业发展潜力最大答案只有一个人工智能尤其是大模型方向当下人工智能行业正处于爆发式增长期其中大模型相关岗位更是供不应求薪资待遇直接拉满——字节跳动作为AI领域的头部玩家给硕士毕业的优质AI人才含大模型相关方向开出的月基础工资高达5万—6万元即便是非“人才计划”的普通应聘者月基础工资也能稳定在4万元左右。再看阿里、腾讯两大互联网大厂非“人才计划”的AI相关岗位应聘者月基础工资也约有3万元远超其他行业同资历岗位的薪资水平对于程序员、小白来说无疑是绝佳的转型和提升赛道。如果你还不知道从何开始我自己整理一套全网最全最细的大模型零基础教程我也是一路自学走过来的很清楚小白前期学习的痛楚你要是没有方向还没有好的资源根本学不到东西下面是我整理的大模型学习资源希望能帮到你。扫码免费领取全部内容最后1、大模型学习路线2、从0到进阶大模型学习视频教程从入门到进阶这里都有跟着老师学习事半功倍。3、 入门必看大模型学习书籍文档.pdf书面上的技术书籍确实太多了这些是我精选出来的还有很多不在图里4、AI大模型最新行业报告2026最新行业报告针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。5、面试试题/经验【大厂 AI 岗位面经分享107 道】【AI 大模型面试真题102 道】【LLMs 面试真题97 道】6、大模型项目实战配套源码适用人群四阶段学习规划共90天可落地执行第一阶段10天初阶应用该阶段让大家对大模型 AI有一个最前沿的认识对大模型 AI 的理解超过 95% 的人可以在相关讨论时发表高级、不跟风、又接地气的见解别人只会和 AI 聊天而你能调教 AI并能用代码将大模型和业务衔接。大模型 AI 能干什么大模型是怎样获得「智能」的用好 AI 的核心心法大模型应用业务架构大模型应用技术架构代码示例向 GPT-3.5 灌入新知识提示工程的意义和核心思想Prompt 典型构成指令调优方法论思维链和思维树Prompt 攻击和防范…第二阶段30天高阶应用该阶段我们正式进入大模型 AI 进阶实战学习学会构造私有知识库扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架抓住最新的技术进展适合 Python 和 JavaScript 程序员。为什么要做 RAG搭建一个简单的 ChatPDF检索的基础概念什么是向量表示Embeddings向量数据库与向量检索基于向量检索的 RAG搭建 RAG 系统的扩展知识混合检索与 RAG-Fusion 简介向量模型本地部署…第三阶段30天模型训练恭喜你如果学到这里你基本可以找到一份大模型 AI相关的工作自己也能训练 GPT 了通过微调训练自己的垂直大模型能独立训练开源多模态大模型掌握更多技术方案。到此为止大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗为什么要做 RAG什么是模型什么是模型训练求解器 损失函数简介小实验2手写一个简单的神经网络并训练它什么是训练/预训练/微调/轻量化微调Transformer结构简介轻量化微调实验数据集的构建…第四阶段20天商业闭环对全球大模型从性能、吞吐量、成本等方面有一定的认知可以在云端和本地等多种环境下部署大模型找到适合自己的项目/创业方向做一名被 AI 武装的产品经理。硬件选型带你了解全球大模型使用国产大模型服务搭建 OpenAI 代理热身基于阿里云 PAI 部署 Stable Diffusion在本地计算机运行大模型大模型的私有化部署基于 vLLM 部署大模型案例如何优雅地在阿里云私有部署开源大模型部署一套开源 LLM 项目内容安全互联网信息服务算法备案…扫码免费领取全部内容3、这些资料真的有用吗这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理现任上海殷泊信息科技CEO其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证服务航天科工、国家电网等1000企业以第一作者在IEEE Transactions发表论文50篇获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。资料内容涵盖了从入门到进阶的各类视频教程和实战项目无论你是小白还是有些技术基础的技术人员这份资料都绝对能帮助你提升薪资待遇转行大模型岗位。这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】