
Agent Skills 最近讨论度很高但很多文章一上来就贴代码反而把最关键的思路丢了。简单说Agent Skills 就是给 AI Agent 准备的一组可复用技能模块把某一个具体任务的做法、步骤、输入输出格式和示例提前写清楚让 Agent 在需要的时候按这套流程执行。它解决的真正问题不是“AI 能不能做”而是“AI 能不能稳定地做、按规范地做、换个人也能复现地做”。这篇适合两类人一类是刚接触 Agent 开发、只会写 Prompt 的初学者另一类是已经在跑项目但觉得 Agent 输出不稳定想给任务加上标准作业流程的开发者。文章会按“是什么、怎么用、怎么造、怎么排查”这个顺序展开。如果你愿意动手普通笔记本配一个 Python 环境就能开始不需要一开始就上大显存或复杂框架。先说结论Agent Skills 的难点不在写代码而在把任务拆清楚、把边界描述准、把验证做扎实。下面直接进入正题。1. 搞懂 Agent Skills 之前先把几个概念放对位置很多人在学 Agent Skills 时卡住不是因为操作多难而是因为对“Skill 到底解决什么”没有概念。你需要先理解一个技能模块内部有什么再理解它和 Tool、Agent、Prompt 有什么区别。1.1 一个技能通常长什么样一个 Agent Skill 通常会包含以下几部分只是不同框架的落地方式不太一样触发条件这个技能在什么场景下被调用输入大概是什么类型。使用说明告诉模型这个任务要按什么步骤执行哪些环节不能跳过。输出模板结果应该是什么结构比如 Markdown 段落、JSON 字段、表格还是纯文本。参考示例给一两个输入输出样例让模型照着格式来。资源文件可能是一份参考文档、关键词表、规则说明甚至是一个可以调用的脚本路径。你把它理解成“给 Agent 的一本岗位手册”就行。手册里写清楚什么时候接这个活、接到活之后先做什么再做什么、最后交付什么格式。这和随手写一段“帮我整理一下”完全不同。Prompt 是一句话吩咐Skill 是一整套可复用的作业流程。我见过不少人把技能写成一个大而全的说明书结果模型抓不住重点。真正好用的技能反而很“窄”。比如“把会议记录转成结构化纪要”是一个技能“总结产品文档”是另一个技能。混在一起触发和调用的效果都会变差。1.2 Skill、Tool、Agent 到底是什么关系相关的热搜词里有“ai skills和agent的区别”这一步需要说清楚。为了让对比更清楚我直接用四个常见概念来拆。概念角色举例Prompt一句话或一段指示“帮我把这篇文章改成口语化”Skill面向具体任务的技能包包含步骤、规则、示例“把文章按检查清单改成口语化并输出修改说明”Tool可执行的函数或外部接口搜索、计算器、SQL 查询、文件读写Agent调度者负责理解任务并选择技能和工具接收需求后决定调用哪个技能、哪些工具你可以把 Agent 看成大脑Skill 是肌肉记忆或标准作业手册Tool 是手和脚。Agent 不一定要用 Skill也可以直接靠 Prompt 完成简单任务Skill 通常不独立运行而是由 Agent 在任务中调用。这个区别很重要。不要把一切功能都做成 Skill也不要把所有逻辑都塞进一个 Agent 的提示词里。我的经验是简单且一次性的任务先写 Prompt高频且流程稳定的任务才值得做成 Skill需要多步骤决策、动态选择下一步的任务再考虑交给 Agent 编排。1.3 什么场景该用 Agent Skills适合用 Agent Skills 的任务有几个明显特征高频重复几乎每周都会遇到。流程稳定做法不会天天变。有明显边界输入和输出都能描述清楚。需要多人统一标准不能每次让模型自由发挥。典型的例子包括会议纪要整理、客户反馈分类、代码审查、文档格式转换、招聘简历初筛。最近也常看到有人讨论 Agent Skills 用在人文社科混合方法研究辅助上比如整理文献、给访谈文本做初步编码、把质性材料按主题归类。这个方向是可行的但要注意它只能辅助整理不能替代人工复核更不能把模型输出直接当成研究结论。不适合的场景也有。低频一次性任务、需要精确数字计算的场景、涉及关键业务决策且没有任何人工复核机制的场景都不适合一上来就做成 Skill。把简单问题复杂化是刚开始接触 Agent 开发时最容易犯的错。2. 从“会用”开始先让现成技能跑起来学会用 Agent Skills最忌讳的是从头造轮子。先找一个别人写好的技能在自己的环境里跑起来你才会知道文件结构、描述写法、调用方式分别起什么作用。这个过程通常花不了太长时间但能把后面造技能的坑提前踩掉一半。2.1 环境准备普通笔记本也能起步先说明一点不是所有 Agent Skills 都要依赖大模型本地推理。很多技能本身只是一套指令和流程文件真正干活时调用的是 API或者调用本地的轻量脚本。所以普通笔记本完全可以起步。我建议准备以下环境具体版本以你使用的 Agent 框架要求为准Python 3.10 或更高版本这是目前最常见的建议基线。一个支持 Agent 开发的框架或平台最好支持“skills 目录”这种组织方式。可选的 API Key用于调用模型服务如果你用本地模型则需要额外准备显存和推理环境。Git用于管理技能文件和后续版本对比。常见环境不需要 GPU。只有当你要跑本地语言模型或者要处理大量文档解析时GPU 和大内存才有实际意义。低配置能跑代表可以学习但不代表适合直接跑批量任务这一点后面还会细说。如果你的框架支持 skills 目录目录结构通常会是这样skills/ summarize_meeting/ SKILL.md examples/ example_input.txt example_output.md这是一个很常见的组织方式。每个技能放在独立子目录里主描述文件通常叫 SKILL.md 或 skill.yaml里面写清触发条件、步骤和输出要求examples 目录放一对输入输出样例。具体名称可能会因框架不同而不同但思路是一致的把“规则”和“例子”放在一起Agent 才能参照执行。2.2 第一次调用单条任务验证环境准备好之后先别急着改技能。找一个人家写好的现成技能把它放进 skills 目录再启动你的 Agent 调试环境。我一般会先用一条最小样例跑通而不是一上来就把真实业务数据全部塞进去。最小样例的意思是输入内容短、字段干净、结果最容易判断。拿会议纪要技能举例你可以先复制一段两三百字的虚构会议记录让它生成结构化纪要然后看输出是否正常。这里给一个调用流程示意具体语法以你的框架为准# 伪代码示意重点是理解调用顺序 skill load_skill(skills/summarize_meeting) result agent.run( task整理会议纪要, input_textxxx, skills[skill] ) print(result.output)你要关注的不只是“有没有返回结果”还要看三点返回内容是否完整有没有中途截断。输出格式是否符合技能里定义的模板。日志里有没有隐藏报错比如文件读取失败、路径不存在、依赖缺失。没有报错不等于合格。很多技能第一次能跑通但格式不对、字段缺失这类问题只有人工看一眼输出才能发现。2.3 要不要一开始就追求并发和多任务我的建议很直接不要急着开并发。很多初学者把技能文件复制下来后就直接批量跑几十条任务结果要么接口限流要么内存占用过高要么输出目录乱成一团。更麻烦的是一旦失败你连是技能问题、输入问题还是资源问题都分不清。正确顺序应该是单条任务跑通确认输入、输出、日志都正常。小批量跑 5 条观察单条耗时、资源占用、输出格式一致性。确认稳定后再扩展到 20 条甚至更多。每一步都要记录数据单条任务平均耗时多少峰值内存多少失败率多少。没有这些数据后面做生产化配置时只能靠猜。注意这里不要一上来就开最大并发先用一条样例确认输入、输出和日志都正常。低配置机器能跑一条不代表能同时跑二十条。3. 自己动手造一个 Skill从需求到第一个版本当你跑通过几个现成技能接下来的关键一步是“造”。这个阶段最容易出现的错误是把需求定得太宽结果写出来的技能既不精准也不好测试。造技能是一个产品设计过程不是写代码过程。第一步不是打开编辑器而是先想清楚你究竟要解决哪个具体任务。3.1 选题找“高频、稳定、有边界”的任务判断一个任务适不适合做成自己的第一个 Skill我通常看三个标准高频你或团队是不是经常做这件事。稳定这件事的流程是不是基本固定而不是每次都不一样。有边界输入和输出能不能用一段话描述清楚。比如“把产品需求改写成结构化任务清单”这是好选题。输入是产品需求文本输出是任务项编号、负责人、优先级、验收标准的清单。输入和输出都很清晰。再比如“写市场分析报告”这个就不适合做成第一个技能。范围太宽“市场分析”在不同场景下可以指竞品分析、用户分析、渠道分析、趋势分析输出结构也会完全不一样。你硬要做最后会得到一个什么都想干、什么都干不精的怪物技能。我建议新手从文档处理类任务开始因为这类任务输入输出好控制也不依赖外部工具调试起来快。等观察几次调用效果后再尝试涉及外部查询、代码执行或数据库读取的复杂技能。3.2 设计触发条件和输入输出格式定好任务后第一步是写描述文件里的“触发条件”和“输入输出”。这两段写不好模型很可能在需要调用技能时根本没想起来或者在不需要调用时强行调用。下面是一个示例仅用于展示常见写法name: meeting_summarizer description: 适用于把会议录音转写文本整理成结构化会议纪要的场景。 输入应为会议转写纯文本输出为包含会议主题、结论、待办事项三个部分的 Markdown 文档。 如果输入不是会议相关文本不要调用本技能。 inputs: transcript: string outputs: summary: markdown注意 description 里写了两类信息什么时候用什么时候不用。这比只写“整理会议纪要”要准确得多。模型判断是否调用技能时靠的主要就是这段描述它不是一个可选字段而是技能的入口条件。输入输出格式也要写具体比如“输入是纯文本”“输出是 Markdown”“待办事项必须以‘- [ ]’开头”。这些细节越具体输出越稳定。3.3 编写核心流程和步骤描述文件里最核心的部分是操作步骤。这一步不能写得太抽象否则模型只是“看起来会做”实际输出仍然五花八门。我建议把步骤写成一个有顺序、有条件的操作手册而不是一段口号。示例结构如下第一步读取输入的会议转写文本判断是否包含会议主题、参会人、讨论内容和结论。第二步如果信息缺失用“未提及”标记不要自己编造。第三步将内容拆成“会议主题”“关键结论”“待办事项”三个部分。第四步待办事项需要提取负责人字段没有明确负责人时统一写“待确认”。“如果……则……”这种条件句很有用。它把专业判断固化到技能里。比如文献整理技能可以写“如果文本中存在明显的观点冲突用‘存疑’标记而不是强行合并。”访谈文本编码技能可以写“当受访者表达与上一轮主题明显不一致时单独新建编码节点。”这些规则来源于你对任务的理解。你越熟悉实际业务流程越能把规则写细。这也是为什么很多成熟技能不是程序员写的而是业务专家和工程师一起写的。3.4 用测试样例迭代不要期望一次写好写完第一个版本后不要直接上真实数据。准备 3 到 5 条覆盖不同情况的测试用例逐条跑并记录每一条的输出问题。测试用例要有梯度。比如文本编码辅助技能用例 1一段结构清晰的访谈文本看它能否正确识别主题。用例 2一段含多个主题混杂的文本看它能否拆分。用例 3一段明显信息缺失、前后矛盾的内容看它是否按规则标记“存疑”。跑完一遍后把问题归类。常见的改进方向有三个补充示例模型经常从示例里学格式比从规则里学更快。收紧描述如果经常在不该调用时被调用就把“不适用场景”写得更明确。增加兜底如果遇到信息缺失就编造就明确加上“无法判断时输出暂缺不要自行补充”。我第一次造技能时也抱着“一次写好”的心态最后发现根本不现实。技能会随着测试样例的变化不断改版。把“测试-记录-修改-再测试”循环跑起来才是正常状态。4. 把 Skill 从“能跑”变成“好用”参数判断与生产化自己造出一个能跑的最小版本之后紧接着的问题是怎么让它稳定、可复用、能交给别人用甚至能扛住批量任务。这个阶段不解决技能就永远停留在“本地实验”级别。4.1 加约束和兜底不是写得越泛越好能跑的技能只是起点好用的技能必须处理“边界外层”的情况。什么叫边界外层最典型的是输入缺失、格式不符合预期、任务内容超出技能范围。我在写技能时会强制加入以下兜底输入不符合要求时直接返回“输入格式不支持”而不是强行处理。当信息不足时输出“信息缺失待补充”不要编造。当任务超出范围时明确说“该任务不适用本技能”并简单说明原因。输出模板固定禁止模型自由发挥结构。加约束的目的是减少不确定性。但这不等于把规则写死到失去灵活性。如果你发现技能经常输出“无法处理”那通常不是约束太少而是输入预处理或触发条件没有设计好。要回到上一章去调整触发条件和输入格式。还有一个容易忽略的点技能文件里写的输出示例要和你的真实需求保持一致。如果示例是 JSON但实际业务需要 Markdown模型很容易跟着示例走产出一堆你无法解析的结构。4.2 批量任务命名、重试、日志当技能要处理批量任务时输出命名、失败重试和日志就变成最关键的问题而不是模型本身。输出命名要包含任务 ID 和时间戳例如output/meeting_20250118_001.md为什么不能只叫 output.md因为批量任务一旦中途失败你无法判断最后哪个任务真正写入了也无法快速定位哪条输出对应哪条输入。把命名规则提前定好能省下大量排查时间。失败重试也不能靠“重跑一遍”解决。更稳妥的做法是记录已完成任务列表重启后跳过已完成项。对失败任务设置固定重试次数比如 2 次。重试之间加等待时间避免短时间内反复请求相同接口导致限流。把失败原因写入日志不要让任务静默失败。日志至少要记录以下内容时间戳 任务ID 调用的技能名 输入摘要 耗时 结果状态只看结果状态还不够。如果 20 条任务全部成功但每条输出都跑偏日志里是看不出来的。所以还需要人工抽检输出内容而不是只看“成功”两个字。4.3 效果评估怎么判断一个技能合格不同任务的评估标准不一样但可以从几个通用维度去看。下面是我常用的一套判断思路你可以参考维度怎么看参考标准成功率连续跑 20 条样本记录成功完成任务的数量建议先达到 90% 以上再考虑生产化稳定性同一输入多次运行输出格式和内容是否一致核心字段不应出现随机缺失耗时单条任务从输入到返回的平均耗时记录基线批量时关注是否明显增长质量人工抽检输出的完整度、准确性、格式符合度每次抽检 10% 到 20%发现问题立即定位我不建议只看一两条效果就下结论。同一个技能可能在样例 A 上表现完美在样例 B 上完全跑偏。拿一组覆盖正常情况和边缘情况的样本去评估才能看出真实水平。注意不要因为一条输入输出特别漂亮就认为技能已经合格。连续样本上的稳定性比单条样本的惊艳更重要。4.4 版本管理与迁移技能不是写一次就永久不变的。当你开始修改规则、补充示例、调整输出模板时最好用 Git 管理整个 skills 目录。每次改动留一个提交信息比如“增加访谈文本编码兜底规则”“修复输出模板中待办事项格式”。版本管理还有一个作用当你更新技能后发现问题可以快速回滚到上一个可用版本。没有版本管理你只能在文件里手工改回来一旦文件被覆盖就彻底丢失。同时要注意依赖变化。技能里如果引用了本地脚本、第三方库或外部工具升级框架或库版本时一定要重新跑一遍测试样例确认兼容性。原始材料没有给出明确版本建议落地时请你以当前环境的实际依赖为准。5. 常见问题与排查清单最后一部分我整理一下自己实际使用时最常遇到的问题和排查链路。这些问题看起来各不相同但大多数时候都出在几个固定环节。5.1 技能根本没有被调用症状你给 Agent 的任务明明符合技能场景但它没有调用这个技能自己直接回答了。排查顺序先看描述文件里的 description 写没写清“什么时候用什么时候不用”。再看触发条件和实际输入是否匹配比如技能要求输入纯文本但你提供的是文件路径。检查 Agent 一次能加载的技能数量。如果技能太多模型可能会漏选。检查任务的上下文有没有被压缩或截断导致模型看不到技能描述。最常见的修复方式是改 description把“适用于什么输入”写得更具体。不要只在 description 里写“这是一个会议纪要整理技能”还要写“当用户提供会议录音转写文本时使用本技能输出结构化纪要如果用户要求聊天不要使用本技能”。5.2 运行时报错路径、依赖、权限依次排查报错不一定是模型问题大多数时候是运行环境问题。我的排查顺序固定如下先看异常栈的末尾确认是哪个文件、哪一行报错。再确认技能目录路径是否正确文件名是否和配置里一致。检查输入文件编码常见的是 UTF-8 与 GBK 混乱导致读取失败。检查依赖包版本特别是框架升级后旧技能可能用了不兼容的写法。最后检查目录写权限输出文件无法创建时经常报错在最后的保存环节。如果只是本地学习前两步基本能解决 80% 的问题。很多人一报错就怀疑模型能力实际上技能文件放错目录或路径写错更常见。5.3 输出质量不稳定先检查输入和示例症状技能能跑通但每次输出质量忽高忽低格式也可能不一致。排查顺序先看输入是否干净。如果输入带有大量无关格式、超长前缀、错误编码模型很容易被带偏。再看技能里有没有足够示例。示例不足时模型只能凭字面理解规则格式自然不稳定。检查输出模板是否明确。只写“返回 Markdown”是不够的最好把具体结构写出来。检查兜底规则是否完善。信息缺失时模型如果必须“给出答案”就更容易编造。我见过很多“质量不稳定”的例子最后发现罪魁祸首是输入里混杂了大量噪音内容。比如会议转写文本前面带有系统时间戳、角色标记缺失模型需要花很多精力去猜测输出自然不稳定。5.4 什么时候不建议用 Agent Skills了解什么时候不用和了解怎么用一样重要。如果你的任务只需要一段 Prompt 就能完成没必要单独建技能。如果任务是精确数值计算应该用代码或计算器而不是让模型推算。如果你是做一次性任务做完就再也不用了建技能就是额外维护成本。还有一种情况也要谨慎任务本身高度依赖实时信息、需要频繁变化规则或者需要很强的人工判断。这时候技能只能做初步辅助不能自动执行完整流程。我自己的判断标准是如果一个任务能稳定重复 5 次以上并且每次的步骤都差不多才值得做成 Agent Skill。否则我更愿意直接把 Prompt 写清楚而不是给项目额外增加一个技能文件。最后再说一句。如果你现在刚接触 Agent Skills我的建议别急着写一个全能技能。先把别人写好的技能跑通再套你自己的需求改一个最小版本最后再考虑批量、评测和版本管理。这个方向真正落地时最该盯住的不是概念背得熟不熟而是输入格式、资源占用、失败重试和输出一致性。把这些稳住技能才不是纸面上的框架而是能每天复用的工具。