SKILL 认知

从 Prompt 到 Skill Engineering:AI 能力为什么需要工程化

2026-07-232 min readSKILL工程化
ai
摘要

当一段 Prompt 开始依赖项目资料、调用工具、处理失败并接受回归检查,它已经在承担软件模块的责任。Skill Engineering 要做的,是把这些藏在聊天框里的责任重新摆回工程结构中。

从 Prompt 到 Skill Engineering:AI 能力为什么需要工程化

先看一段很常见的 Prompt:

text
1请审查这次代码变更,找出 bug、安全风险和不符合规范的地方, 2按严重程度输出问题,并给出修改建议。

第一次用,多半还行。

第二次发现它不知道项目规范,于是把规范贴进去。第三次发现它审错了范围,又补一句“只看当前分支与 main 的差异”。后来还得告诉它哪些目录不要碰、结论必须带代码位置、没有证据不要报问题。

Prompt 就这么越写越长。

再往后,它需要自己读取 Git diff、查仓库里的规范文件、运行测试。检测到安全问题时只能报告,不能直接改;遇到无法确定的基线要停下来问人;规则更新以后,旧案例还得重新跑一遍。

到了这一步,我们维护的还是 Prompt 吗?

文件形式也许还是 Markdown,里面装的东西已经很像一个软件模块:有输入,有依赖,有执行顺序,有权限边界,也有验收办法。继续把它当成“提示词技巧”,后面的维护会越来越别扭。

一、Prompt 越写越长,只是表面问题

长 Prompt 不一定差。复杂任务本来就需要更多上下文。麻烦在于,一段文本开始同时承担几种不同责任,而且这些责任彼此牵连。

还是前面的代码审查:

  • “只检查本次 diff”是在限定输入范围;
  • “先读取仓库规范”是在声明依赖;
  • “高风险问题必须给出证据”是在规定验收条件;
  • “不要直接修改代码”是在控制副作用;
  • “找不到比较基线就询问用户”是在处理失败分支。

它们挤在同一个 Prompt 里,模型能不能理解是一回事,人能不能长期维护是另一回事。

阿魏把混在 Prompt 里的工程责任逐项拆开

删掉一句规则,会影响哪些场景?换了项目,哪些内容需要替换?工具执行失败以后,后续步骤还应不应该继续?修改完成,拿什么证明旧能力没有退化?

单次对话不需要回答这些问题。准备复用和交付,就绕不开了。

这也是 Prompt Engineering 与 Skill Engineering 的分水岭。前者关心怎样把当前意图说清楚;后者开始接手一项能力的完整维护责任。

二、Skill 只是把藏起来的责任摆到明面上

不同平台对 Skill 有不同的文件格式和加载方式,这些先放一边。格式会变,工程责任不会。

在这个系列里,我更愿意把 Skill 理解成一项有名字、有边界的 Agent 能力。它至少要让维护者看清几件事:

  • 用户给了什么,什么情况下应该启动;
  • 执行时依赖哪些知识、文件和工具;
  • 哪些判断交给模型,哪些步骤交给代码;
  • 哪些操作会产生副作用,谁有权确认;
  • 什么算完成,失败时停在哪里;
  • 修改之后,怎样检查原来的行为。

这份清单没有多少新概念。写过后端服务的人,可以把它看成接口、依赖、流程、权限和测试;做过前端组件的人,也会关心 props、状态、副作用和回归。Agent 换了一套运行环境,并没有获得免做工程设计的特权。

Skill 的作用,就是给这些责任一个明确的容器。

Prompt 仍然在里面。它负责告诉模型如何判断、如何表达。项目规范可以放进参考资料,固定格式交给模板,机械检查交给脚本,读文件和写系统通过工具完成。执行顺序、暂停条件和失败处理则由工作流程约束。

阿魏把 Prompt、资料、脚本和工具装进有边界的 Skill 机箱

所以,Skill 并不神秘。它只是拒绝再让一段 Prompt 假装自己能包办所有事情。

三、几个容易混在一起的东西

Prompt、工具、Skill 和 Agent 应用经常被混用,因为用户看到的入口可能都是一句自然语言。对开发者来说,区分它们最省事的办法,是看各自负责哪一层。

对象主要负责一个简单例子留给上一层处理的事
Prompt描述当前任务和判断要求“检查这段代码里的并发问题”依赖管理、完整流程、回归测试
工具完成一个具体动作读取 diff、运行测试、提交评论为什么调用、何时停止、结果怎么判断
Skill封装一项可复用能力按仓库规范完成一次代码审查产品交互、跨能力编排、长期业务状态
Agent 应用交付完整任务体验研发助手、客服系统、内容工作台具体能力可以继续下沉给 Skill 和工具

它们没有替代关系。

一个 Skill 里面通常会有 Prompt,也可能调用多个工具。一个 Agent 应用可以根据任务选择不同 Skill。至于普通代码,该写还得写:输入输出确定、规则明确的工作,交给代码往往更便宜,也更稳。

把 Skill 放在中间这一层很重要。做得太薄,它只是换了文件名的 Prompt;做得太厚,它又会吞掉界面、业务状态和一堆无关能力,最后长成一个没人敢动的“大 Skill”。

四、判断有没有工程化,只看一件事

不要先看目录里有没有 SKILL.md,也不要数拆了多少个文件。问一个开发者更熟悉的问题:

改完以后,你敢不敢发?

敢发,通常意味着几件具体的事:

  • 知道这次改动落在哪项责任上;
  • 知道哪些调用场景可能受影响;
  • 手里有几个能重跑的输入样例;
  • 能检查关键约束有没有失效;
  • 出问题时能定位到指令、资料、脚本、工具还是流程。

阿魏完成样例、约束和故障定位检查后放行 Skill

这些条件不要求一步到位。刚开始,一个 Skill 可能只有清楚的职责说明和几条测试样例。等任务变复杂,再加入参考资料、脚本和更严格的流程。工程结构应该跟着真实问题长,没必要先造一座空城。

反过来,一份几千行的“超级提示词”,哪怕偶尔表现很好,只要没人说得清改动影响,也没有办法回归验证,它就很难成为可维护的能力。

Skill Engineering 的起点不是某种文件格式,而是承认 Agent 能力也要进入软件生命周期:需求会变,依赖会变,行为会退化,版本之间需要解释,修改之后需要证据。

至于什么样的需求值得付出这套成本,下一篇再具体讨论。临时任务用 Prompt 很舒服,确定性任务可能一段代码就够了。别因为手里有锤子,看什么都像 Skill。