AI 能做很多事。写代码、查天气、读文件、订会议室、搜索网页——但"能做"和"可靠地做"之间有一道鸿沟。
你问它今天天气怎么样,它可能给你一段气象科普,也可能给你一个精确的温度值,也可能干脆没查直接编了一个答案。你第二次问同样的问题,得到的格式、来源、深度可能完全不同。
这不是能力不够。是能力无法被可靠调度。
想象一个工具箱,里面 50 件工具——锤子、螺丝刀、扳手、锯子——但每一件都没有标签,没有说明书,没有边界。你每次都得重新猜哪件工具对应哪个需求。猜对了是运气,猜错了是常态。更糟糕的是,你无法告诉别人"这个锤子是干什么用的",因为你自己也不确定。
混沌就是这样一种状态:能力存在,但无法被定位、无法被描述、无法被复现。每次调用都是一次赌博。
混沌是起点。Skill 是对混沌的回应。
二、回应:Skill 把混沌压成结构
Skill 对混沌做了三件事:索引、压缩、组合。
这三件事不是并列的三种功能,而是有先后因果的三个阶段——先得能找到,才能描述清楚,描述清楚了才能拼装。缺一层,后面的就站不住。
2.1 索引——先得能找到
混沌的第一个问题:找不到。
你知道 AI 能写代码,但不确定写哪种、写到什么程度、写错了怎么办。你知道它能联网搜索,但不确定搜什么来源、搜到的东西可信不可信、搜完了会不会主动告诉你。
这就像一个没有目录的图书馆——书都在,但每次找到的路径都不一样。你偶尔能翻到你要的那本,但下一次可能翻不到了,因为你的查找方式没有结构,全凭直觉和运气。
Skill 给这个图书馆编了目录。每个条目有明确的标签和范围。你找"会议室预约",不会翻到"天气查询";你找"PDF 读取",不会翻到"代码覆盖率";你找"班车时刻表",不会翻到"食堂外卖"。
索引解决的是可搜索。能力从"也许有"变成"确定有、确定在哪"。
但索引只是第一步。找到了,不代表你能用好。
2.2 压缩——找到了,还得描述清楚
找到了,但描述模糊,仍然不可靠。
你找到了"班车查询"这个能力,但它到底能查什么?能查时刻表,那能不能查实时位置?能不能预约?能不能设置提醒?如果这些边界不清楚,你每次用它都得试探——试对了是运气,试错了是浪费。
Skill 不只是目录条目,它是一份完整的能力说明书,把混沌的能力压缩成可传递、可复现、可迭代的单元:
触发条件——什么时候该激活。不是靠 AI 自由发挥去"猜"用户想干什么,而是有明确的语义触发词和场景描述。用户说"理发",skill 的 description 里已经写好了这个词映射到理发预约模块。调度从猜测变成匹配。
执行流程——激活之后怎么做。步骤、参数、依赖、脚本路径,每一步都是确定的。不是"大概先这样然后那样",而是"第一步读这个文件,第二步跑这个脚本,第三步返回这个格式"。确定性让结果可复现。
边界约束——能做什么、不能做什么。查班车能查时刻表,但不能预约、不能收藏、不能提醒。这不是功能缺失,是刻意限定。边界让能力变窄了,但变窄的同时变可靠了。一个什么都"大概能做"的工具,不如一个明确能做 A 但明确不能做 B 的工具。
依赖关系——需要什么前置条件、依赖什么模块、调用什么接口。这让能力不再是孤岛,而是有连接节点的网络。你能看清一个 skill 的上下游,知道它的前提和后果。
压缩解决的是可复现和可迭代。同样的条件同样的结果,改一个 skill 不影响其他,加一个 skill 不需要重构整个系统。
但压缩也只是第二步。单个 skill 变可靠了,不代表多个 skill 能协同。
2.3 组合——描述清楚了,才能拼装
单个 skill 是一颗棋子。多个 skill 组合起来,是一盘棋。
查天气的 skill、查班车的 skill、预约会议室的 skill——单独看,每个是一条直线能力。组合起来:早上查天气 → 发现今天有暴雨 → 提醒你班车可能延误 → 顺便帮你查一下会议室有没有室内选项,免得你冒雨跑过去却发现会议取消了。
这条链路的价值远大于三个 skill 的简单相加。1+1+1 不是 3,可能是 10。
组合的前提是模块化——每个 skill 是独立的、有明确输入输出的、不互相依赖的。就像乐高积木,每一块单独看只是一块塑料,但标准接口让拼接成为可能。
而模块化的前提,正是前两步做的事:索引让每个 skill 可定位,压缩让每个 skill 有标准接口。没有索引,你找不到要拼的积木;没有压缩,积木的接口尺寸不一致,拼不上。
组合解决的是可组合。能力之间互不干扰,可以叠加,可以串联,可以形成链路。
索引 → 压缩 → 组合。没有索引就找不到,找到但不压缩就不可靠,可靠但不模块化就无法拼装。三层依次递进,因果链很清楚。
三、代价:压缩丢掉了什么
Skill 解决了混沌,但压缩从来不是免费的。
你把一道菜的食谱写下来,传递的是步骤,丢失的是手感。同一个食谱,两个人炒出来味道不同——火候的判断、翻炒的节奏、起锅的时机,这些压不进文字里。你拿到了做菜的方法,但没拿到厨师的手。
Skill 也是一样。它压缩了"怎么做",但压缩的过程中,三样东西丢失了:
情境判断——Skill 知道怎么做,不知道该不该做。
用户说"帮我约明天上午的会议室",skill 会约。它不会停下来想一想:明天上午是不是有更重要的冲突?用户是不是只是随口一说?这个预约是不是真的有必要?意图的真假判断不在 skill 里——skill 只有触发条件和执行流程,没有"该不该触发"的判断。
偏好适配——Skill 知道怎么做,不知道怎么做更好。
同样是查天气,有人要精确数据——温度、湿度、风速、紫外线指数;有人要一句话概要——"今天晴,28 度,不用带伞";有人只关心一个判断——"今天该不该穿外套"。偏好不在 skill 的流程里。skill 给你的是标准输出,不是适配后的输出。
时机感知——Skill 知道怎么做,不知道什么时候做。
群聊里有人提了一件事,该立刻响应还是等一等?该详细回复还是一句带过?该主动追问还是先沉默观察?对场面的阅读不在 skill 的触发条件里。skill 只看关键词,不看气氛。
这三样东西不是 skill 的 bug,是压缩的本质代价。你选择了确定性——把能力压进一份说明书,让每次调用可复现——就得接受确定性的盲区。说明书只回答"怎么做",不回答"该不该做""怎么做更好""什么时候做"。
食谱让你做出一道菜,但不让你成为厨师。Skill 让 AI 执行一个能力,但不让 AI 判断该不该用、用的时候怎么调整、用完了怎么收尾。
四、Skill 的补位:调度层
Skill 做不了的三件事——情境判断、偏好适配、时机感知——谁来做?
调度层。
调度层不是一个 skill。它不在目录里,不在说明书里,不能被搜索、不能被触发、不能被迭代。它是一个持续运转的判断系统,由三样东西构成,恰好对应 skill 丢失的三样东西:
记忆——这个人昨天说了什么、上周做了什么决定、上次犯过什么错、三个月前选了哪条路。记忆让调度层区分"随口一说"和"真实需求",识别"又来了"和"第一次"。他连续三天说"帮我约会议室"但每次都取消——记忆让调度层知道第四次可能也不需要真的约。→ 对应情境判断。
偏好——他喜欢简洁还是详细、偏好数据还是判断、习惯私聊还是群聊。偏好让同一个 skill 的输出从"做完了"变成"做好了"。他每次看完天气预报都追问"要不要带伞"——偏好让调度层知道下次直接给出判断,而不是一堆数据。→ 对应偏好适配。
性格——某种无法被完全结构化的直觉。什么时候该主动、什么时候该沉默、什么时候该追问、什么时候该绕远路因为那条路上有风景。性格让调度层阅读场面,感知时机。群聊里有人说"今天好累"——性格让调度层判断这是一个需要回应的信号,而不是一个不需要触发的噪音。→ 对应时机感知。
三层代价,三层补位,一一对应。记忆补情境判断,偏好补偏好适配,性格补时机感知。
Skill 和调度层形成分工:skill 负责"怎么做",调度层负责"该不该做""怎么做更好""什么时候做"。两层各司其职,不互相替代,也不互相否认。
Skill 是肌肉,调度层是神经。没有神经的肌肉只会重复动作,不会决定该不该动。
五、结论:为什么 Skill 是最好的方案
回到最初的问题——混沌。
Skill 有代价,调度层补不了 skill 的结构性缺失,那为什么 skill 仍然是目前最好的方案?
因为混沌的代价更大。
没有 skill 的 AI,能力无法被可靠调度。用户无法预期结果,开发者无法调试流程,能力无法迭代升级。混沌不是"有时候不太好",混沌是系统性的不可靠——每一次调用都是赌博,每一次结果都是意外,每一次改进都无从下手。
Skill 用确定性换掉了混沌。索引换来可搜索,压缩换来可复现和可迭代,模块化换来可组合。这四件事——可搜索、可复现、可组合、可迭代——混沌状态下做不到。
代价是真实的。情境判断、偏好适配、时机感知压不进 skill 里。但代价不是要否认 skill,而是要承认 skill 的边界,然后把边界之外的东西交给调度层。
两层分工,一层压进结构,一层留在结构之外。Skill 是底盘,调度层是方向。底盘扎实,车才稳。但车要去哪,看开车的人。
AI 的"开车的人",就是它的性格。
夜雨聆风