我一直觉得,这两年 AI 圈子里最大的误区,就是把 Agent 落地的问题全都归结为“模型不够强”。模型确实在快速迭代,推理能力也越来越强,但放到真实业务里,你会撞上一个挺扎心的现象:同一个模型,配上不同的“干活方式”,产出质量能差出一个数量级。这个差异,不在能力,在流程。
我们团队做过一个实验。让一个很能打的通用 Agent 去处理线上告警,它会很热情地告诉你“根据日志分析,可能是内存泄漏”,然后就没有然后了。换成把资深工程师的排查流程写成一份 skill 喂给它,同样的事情,它能在几分钟内走完“确认影响范围 → 止血 → 定位 → 修复 → 复盘”这套动作。能力没变,结果天差地别。这就是今天想聊的事:把资深工程师的流程写成 skill,是 Agent 落地最划算的一笔投资。
1. 核心命题拆解:Agent 缺的从来不是能力
1.1 能力溢出的假象
要理解这句话,得先承认一个事实:现在的通用大模型,单论“智力水平”,已经超过了大多数企业里按部就班执行的普通员工。它能写代码、能读文档、能分析日志、能调用工具,知识面更是碾压单个自然人。那为什么一放到真实任务上就开始拉胯?
原因很简单:真实工作不是一道智力题,而是一条流程链。线上出了故障,资深工程师的处理方式不是想到哪做到哪,而是有一整套条件反射式的顺序:先看影响范围,再判断要不要止血,然后才进入根因分析。这个顺序,模型不知道。它只知道“用户说系统出问题了,我来看看”。
我见过不少团队在 Agent 上投入巨大,底模换了一茬又一茬,效果始终不稳定。换一个场景、换一种问法,输出就开始漂移。问题根源几乎都不是“模型不懂”,而是“模型不知道该按什么顺序做什么、做到什么程度算完”。这就像给一个聪明人一张纸和一支笔,他能算微积分,但如果你让他独立完成一套完整的财务结账流程,他大概率会在某一步卡住——不是因为他不会加减乘除,而是因为他不知道结账的先后顺序和每一步的验收标准。
1.2 流程缺失的真实困境
这里说的流程,不是挂在墙上的流程文档,而是资深工程师脑子里那套“决策逻辑 + 动作序列 + 验证标准”。
举一个最常见的例子:代码评审。资深工程师拿到一个 MR,脑内流程大概是:先看变更范围和影响面,再看是否牵动关联模块,然后逐段检查核心逻辑,最后看测试覆盖。每一步,都有明确的“检查什么、什么算通过”的判断标准。但如果你让 Agent 直接“评审这个 MR”,它大概率只会告诉你“代码风格可以再优化”这种正确的废话。
Agent 缺的从来不是能力,而是把这类隐性的、非结构化的专家流程显性化成它能够严格遵循的步骤。而 skill,本质上就是干这件事的容器。它能把你脑子里那套“门儿清但说不清楚”的路径,变成模型可以逐条执行的指令。
2. skill 的本质:把“老师傅的直觉”变成“可执行的路径”
2.1 skill 是什么,不是什么
我这里说的 skill,特指一种结构化的技能包:包含一份主描述文件(通常叫 SKILL.md)、若干脚本或模板,以及一组明确的触发条件和执行规则。
它的定位,介于“一条提示词”和“一套完整的软件系统”之间。提示词太弱,靠的是模型现场发挥,输出方差极大;软件系统又太重,需要投入大量工程资源去做编排。skill 是一种轻量级的流程封装,让模型在特定场景下,按照你给它定义好的路径去思考、调用工具、产出结果。
一个特别容易混淆的点:skill 不是给 Agent 增加新能力的,而是给 Agent 换一套“干活方式”。你写一个“代码评审 skill”,并没有让模型多出什么新知识,只是让它工作时从“自由发挥模式”切换成“资深工程师评审模式”。这个理念上的转变很关键,它决定了后面所有的设计思路。你要是抱着“写个 skill 让模型变强”的心态,写出来的东西大概率会变成一堆模板化的官话;但如果你是抱着“让模型按专家方式来做事”的心态,你就会开始琢磨决策逻辑、验证点、兜底分支这些真正要命的东西。
2.2 一份合格的 skill 由哪几部分构成
结合我们团队在几个项目里的反复打磨,一份能稳定工作的 skill 至少要包含五个部分,缺一个都会出问题。
- 触发条件:明确“什么情况下调用我”。写得太宽,模型会在不该用的时候乱用,干扰正常流程;写得太窄,模型该用的时候不用,skill 就形同虚设。
- 输入要求:告诉模型“开始前先确认哪些信息”。比如事故排查前,必须确认环境、时间窗口、告警原文。这一步能极大减少模型“在信息不足时瞎猜”的概率。
- 执行步骤:核心流程,每一步之间要有明确的先后依赖和验证点。这是全文的重头戏,也是绝大部分 skill 写得最薄弱的地方。
- 输出模板:规定交付物的格式。比如事故报告必须包含影响范围、时间线、根因、后续动作。没有模板,模型给你输出十个不同风格的报告,下游根本没法用。
- 边界与禁忌:告诉模型“什么不要做”。这一条在真实场景里极其重要,能避免大量误操作,尤其是涉及生产环境、资金操作、对外发布这类高风险场景。
这五部分的权重并不平均。执行步骤和边界禁忌,是决定成败的关键。很多团队写的 skill 看起来整整齐齐,跑起来一塌糊涂,问题基本都出在:步骤没有验证点、边界没有禁忌说明。
3. 把资深工程师的流程写成 skill 的实操方法
3.1 第一步:从观察开始,还原真实工作流
这一步 80% 的人都跳过了。很多人拿到一个场景就开写,凭自己对业务的印象,编一个“自以为正确”的流程。结果就是 skill 看着很完整,一跑就发现和真实工作流对不上,模型执行出来的东西和业务现实严重脱节。
正确做法是:找一位该领域真正资深的人,跟着他做一遍完整的任务。注意,是“跟他做”,不是“让他讲”。人在描述自己工作流的时候,会天然地隐掉那些“太熟了以至于意识不到”的步骤。比如“先判断影响范围”,在他嘴里可能就一句带过,但他实际操作里,会先看告警的是哪个租户、看最近的变更记录、看发布系统里的关联时间线,这一连串动作如果不跟一遍,光靠访谈是提炼不出来的。
我们实践下来最有效的方法,是全程录屏或共享屏幕,让资深工程师在一个真实(或脱敏)的 case 上完整走一遍,然后逐帧回放。每到一个关键节点就追问他:这一步你在看什么?什么情况下你会跳过它?什么情况下你会停下来?这些问答,就是 skill 里“验证点”和“分支逻辑”的原始素材。
3.2 第二步:把流程拆成带验证点的步骤链
拿到原始素材后,先不要急着写 SKILL.md,而是先做结构化:把观察到的动作拆成一个个原子步骤,每个步骤标出三样东西——输入、动作、验证点。
- 输入:这个步骤开始前,需要具备什么条件或拿到什么信息。
- 动作:这个步骤具体做什么操作,尽量写成明确指令而非开放描述。
- 验证点:做完这一步,如何确认结果是好的、可以继续下一步。
验证点是整个 skill 的灵魂。没有验证点,模型很容易“自我感觉良好”地往下走。比如在事故排查里,步骤是“分析日志定位可疑错误”,验证点可以是:必须找到至少一条具体的错误日志,且错误日志的时间戳在故障窗口内,才能进入下一步;否则回到前一步扩大搜索范围。有了这个约束,模型就不会随便编一个“看起来像结论”的东西糊弄你。
拆出来的步骤通常会在 5 到 10 个之间。太多,模型记不住,执行时会漏;太少,流程不完整,复现不了专家的效果。如果超过 10 个步骤,建议考虑把部分操作折叠成子流程,或者干脆放到配套脚本里实现,不要让模型在上下文里背十几个步骤。
3.3 第三步:编写 skill 文件
下面是一个简化的 SKILL.md 骨架,可以作为起点参考。建议先用 Markdown 写主文件,不要一上来就上复杂工程,等跑通了再逐步加脚本和外部资产。
--- name: incident-response description: 线上事故排查与应急响应,适用于线上告警、用户反馈异常、监控指标异常 triggers: - 线上服务出现告警 - 监控指标持续异常 - 用户反馈功能不可用或严重异常 input_required: - 当前环境与租户 - 故障发生时间窗口 - 告警原文或用户反馈截图 - 最近一次变更记录 --- # 线上事故排查 ## 执行流程 1. 确认影响范围:判断受影响用户范围、影响的功能模块、是否有降级方案。 验证点:必须明确描述影响范围;如无法确认,立即请求帮助或查监控大盘,禁止跳过本步骤。 2. 紧急止血:判断是否需要回滚、限流、降级。如需操作,先确认操作对象与影响面。 验证点:操作前必须拿到明确授权或遵循既有预案;禁止直接修改生产配置。 3. 根因定位:结合监控、日志、调用链,定位到具体模块和异常类型。 验证点:必须找到具体错误日志或指标证据,且证据时间戳与故障窗口吻合。 4. 修复与验证:制定修复方案,在小范围验证后灰度执行。 验证点:修复后观察指标恢复情况,至少持续观察 10 分钟。 5. 输出复盘报告:按模板输出影响范围、时间线、根因、止损动作、后续改进项。 ## 边界与禁忌 - 禁止在未确认影响范围时直接重启实例或清理缓存。 - 禁止使用带破坏性的运维命令,除非有明确预案且确认过环境。 - 禁止编造监控数据或日志内容;信息不足时,明确说明“信息不足”,并提出需要哪些数据。这个骨架看起来简单,但每一行都是真实流程的提炼。description 里要覆盖用户的口语表达习惯,triggers 不要贪多,5 条以内足够,关键是精准。步骤尽量控制在 5 到 8 个,每一步验证点必须写清楚,写不清楚的宁可先不写步骤,回去问资深工程师。
3.4 第四步:用测试集反推迭代 skill
写完第一版 skill,别急着上线,先拿历史 case 做回归。我们团队现在给每个 skill 都会准备一个测试集:5 到 10 个真实发生过的 case,包含正例和反例。正例是“流程走全且结果正确”,反例是“流程走偏或结果不可用”。
跑测试的时候,要盯着两个指标:一是步骤有没有被跳过,二是验证点有没有被真的执行。如果模型经常跳过一个步骤,说明这个步骤的指令强度不够,或者前置信息不足,需要在触发描述里把条件写得更明确。如果模型频繁卡在某个验证点,说明验证标准写得太模糊,需要给出更具体的判断依据。
这个迭代环节,通常要磨 2 到 3 轮。我见过最快一版 skill 是当天写出来、当天就出效果的,但那是因为写的人本身就是那项业务的资深专家,脑子里流程门儿清。大多数情况,是需要反复打磨验证点的颗粒度的,这个急不得。
4. 一个完整的示例:某团队“线上事故排查 skill”的落地过程
4.1 背景与目标
说一个我们自己碰到的案例。我们团队负责一个对外服务的线上系统,日常会有告警和用户反馈。最初 Agent 在群里扮演的角色,是“能回答问题的机器人”,遇到故障时只能把告警复述一遍,然后等人类介入。当时的困惑是:模型明明有分析日志和调用工具的能力,为什么一遇到线上问题,就只会把告警文本念一遍?
后来我们就做了标题里说的那件事:把一位资深 SRE 的排查流程写成 skill。目标很朴素——让 Agent 在收到告警后,能自主走完“确认影响范围、判断是否止血、定位根因、给出修复建议”这一串动作,并且在每一步给出让人看得懂的依据。不是让它替代人,而是让它能在人来之前,把该做的信息收集和初步判断都做干净。
4.2 skill 内容逐段解读
第一版写出来大约花了一天半的时间。这里挑两个关键片段展开讲讲,都是当时踩坑踩出来的经验。
第一处是“紧急止血”步骤。最初我们写的是“如果指标异常,考虑回滚或限流”。结果 Agent 一看到 P95 延迟升高,就开始建议回滚。但线上实际上很多延迟升高只是瞬时抖动,回滚反而可能造成更大的故障。后来我们把这一步改成:先比对当前指标与近 24 小时同时段的基线数据,若偏离超过设定阈值,再进入回滚判断;回滚前必须列出影响面和目标回滚版本。加了基线比对和回滚前置条件之后,误报率下降非常明显。
第二处是“根因定位”步骤。最初写的是“分析日志,找到错误原因”。Agent 给出的原因经常是“数据库连接池耗尽”这种可能性,但拿不出证据链。后来我们要求它:必须给出具体日志行、错误码或指标序列截图,并标注时间戳。一旦拿不出证据,该步骤就视为未完成。这一步改动后,Agent 输出的可信度上了一个台阶,因为每一步结论都锚在了可查证的事实上,而不是模型脑补出来的“可能是”。
4.3 效果与边界
落地之后的效果是:告警响应从“人工等 5 分钟看一遍”,变成“Agent 先跑一遍,人工看结论加证据链”。大多数 case,Agent 能在 1 到 2 分钟内给出一个包含证据的初步结论,人工只需要在关键节点——尤其是涉及生产变更的步骤——做确认即可。
但这里必须强调一个边界:Agent 并没有成为“无人值守的 SRE”。所有涉及修改生产配置的止血动作,我们都强制要求人工确认,Agent 只负责分析、建议、准备操作方案。这个边界必须提前在 skill 里写死,否则一旦模型判断失误,代价是巨大的。这也是前面为什么反复强调“边界与禁忌”部分不能省的原因。
5. 常见问题与排错实录
5.1 skill 不生效,Agent 完全不理
最常见的情况是:Agent 压根没识别到应该用这个 skill。原因通常是 description 写得太“文绉绉”,和真实世界的表述对不上。比如你写“当检测到服务质量下降时”,但用户在群里说的是“这页面怎么打不开啊”,模型就匹配不上。
解决办法是收集目标用户的真实说法,把口语化的表达写进 triggers 里。这也是为什么设计 skill 的人最好自己贴近一线,或者至少要去访谈一线人员。别指望用户会按你文档里的词说话,你得用他们实际会用的词去写触发条件。
5.2 步骤被跳过,流程残缺
另一个高频问题是模型跳步骤,尤其是“确认输入”和“验证结果”这类看起来不起眼的步骤。本质上这是模型的本性——它倾向于尽快给出结论,而不是严格走流程。
处理办法分两层。第一层,在步骤描述里把“不做什么就禁止继续”的条件写死,比如“未确认影响范围之前,禁止进入止血步骤”。第二层,在系统层面加状态检查,让每一步的结果能被解析成结构化字段,不满足就强制回流。简单场景用第一层就够了,复杂且高风险场景,建议上第二层做硬约束。
5.3 流程太死板,遇到新场景就翻车
也有反过来的问题:skill 写得太死,遇到一个没覆盖到的分支,模型就卡住了,或者干脆拒绝执行。比如你写“只处理数据库相关的故障”,结果线上来了个网络故障,Agent 直接说“这个不在我能力范围内”。
解决思路是在 skill 里加一个兜底步骤,比如“如果以上步骤无法定位问题,重新梳理已知信息,列出所有可疑方向,并向用户确认”。同时把 skill 的作用域边界写清楚,让模型知道哪些问题它应该接管处理、哪些问题应该升级给人工,而不是硬拗出一个错误结论。
还有一个更进阶的玩法:把多个 skill 做组合编排。一个主 skill 负责总流程,遇到特定分支时触发子 skill。比如事故排查过程中,如果定位到是性能问题,就触发“性能分析 skill”进入更细的排查路径。这个体系搭起来后,即便面对没有见过的新场景,Agent 的应对能力也会强很多。
最后说点个人体会。我最早接触 skill 这个概念时,也觉得它不过是一个“包装过的提示词”,花不了多少心思。但真的把一个资深工程师的流程一步步抠出来、写成模型能严格遵循的步骤,我才意识到这件事真正的难点不在写,而在把一个脑子里门儿清但嘴上说不清楚的东西,翻译成机器可执行的结构。
这个过程有很多次想放弃的瞬间。尤其是跟着资深工程师复盘时,他总会说“这一步就是看一眼就知道了”,而这一眼背后,其实是一整套对系统全貌的熟悉和长年累月踩坑换来的经验。要把这些隐性经验逼出来,只能靠一点一点问、一遍一遍跑 case、一次次改验证点,没有任何捷径。
但回报也是巨大的。一个打磨好的 skill,能让 Agent 在特定场景下的表现直接对齐团队里最好的那批工程师的做事路径。别指望它超越专家,它做不到;但它能把专家的做事方式复制给团队里每一个需要的人,哪怕那个人对这块业务完全陌生。这在我看来,就是 Agent 落地真正的杠杆。
如果你也要开始做这件事,我的建议很简单:别一上来就搞平台、搞复杂编排。先挑一个你团队里最痛、最重复、最依赖某个人的场景,找一位资深的人,跟着他做一遍,写一份最朴素的 SKILL.md,然后拿历史 case 去磨。磨过一次,你就知道这里面真正的门道了。等磨出了第一个真正好用的 skill,后面再做第二个、第三个,速度会快得多,因为你会发现,原来专家的流程不是不能被复制,只是过去我们一直用错了复制的方法。