上一节我们讲了 Shell Engineering 的五种形态,其中形态四——「代码骨架 + Skill」——是应用最广、也最值得深入探讨的一种。
这一节我们就把形态四讲清楚。核心回答两个问题:第一,为什么纯 Skill 不够,必须有代码骨架?第二,和传统的程序安装包相比,我们交付给用户的东西到底有什么不一样?
4.1 这一节讲的就是形态四
上一节列了五种形态,其中第四种叫「代码骨架 + Skill」。
为什么单独拿一节出来讲?因为这种形态最常用。
纯 Skill 太轻,稍微复杂一点的业务就稳不住。 完整应用又太重,投入接近传统开发,很多场景没必要。
形态四夹在中间——既有代码的稳定和效率,又保留了大模型的灵活和智能。绝大多数业务系统,最后都会落到这个形态上。
4.2 纯 Skill 为什么不稳
如果你做过稍微复杂一点的 Skill,大概率会遇到这些问题。
每一步都要"想",想就可能出错
一个流程如果有 10 个步骤,每一步都让大模型读 Skill、理解、决策,那每一步都有概率跑偏。
每一步 90% 的准确率,10 步乘下来,整体就只剩 35% 了。中间只要有一步走偏,后面就全乱套了。
同一件事,这次这么做,下次那么做
大模型有随机性。同样的输入、同样的 Skill,两次执行的路径可能不一样。
有时候它会"灵机一动",走一条你没预料到的路,结果就翻车了。你没法保证每次行为一致。这种不确定性放在企业环境里就更加危险了,企业是绝对接受不了不确定性的。
出了问题很难排查
代码出 bug 了,打个断点、加个 log,一步一步追,总能找到问题在哪。
Skill 执行出问题了,你只能读对话历史,猜它当时怎么想的。排查起来全靠猜测。
简单操作也烧 Token
就一个简单的文件移动和重命名,大模型也要先理解需求、确认路径、然后调用工具。
光这一堆推理就烧掉几千个 Token。明明一行命令就能搞定的事。
这些问题的根源是一样的:该用代码的地方,我们用了自然语言推理。
4.3 形态四的核心思路:代码做骨架,Skill 做灵魂
那怎么解决?可以把流程中固定的、确定性的部分,用代码固化下来,做成一个个函数和工具;把需要判断、理解、创意的部分,留给 Skill 和大模型。
这就是形态四的核心思路:代码做骨架,Skill 做灵魂。
但这里有一个关键点,很多人一开始会忽略:Skill 不只是"做判断",它还要"做编排"。
Skill 的两种用法
Skill 在整个系统里,有两种截然不同的用法:
第一种:直接用大模型做理解,不需要任何代码。 比如提取一篇文章的中心思想、判断一段文本属于什么主题、评估某个方案的质量好不好。这些事情你根本不需要写 Python 函数,Skill 直接让大模型读文本、想、给出结论就完了。代码在这里没有存在的意义,大模型天然就擅长做这个。
第二种:想清楚之后,编排 Python 工具来执行。 比如用户丢进来一个 URL,Skill 先判断这个 URL 要不要处理、是更新已有内容还是新建条目,想清楚之后,再依次调用 extract_article() 提取正文、compute_hash() 算哈希去重、save_to_feishu() 写入飞书。这一串工具怎么组合、什么顺序、什么时候该调哪个,都是 Skill 想清楚之后决定的。
+---------------------------------------------------
| 你的 Shell(壳)
|
| Skill 的两种用法:
|
| 用法一:直接理解 用法二:理解 + 编排
| ┌──────────────┐ ┌──────────────┐
| │ 大模型直接思考 │ │ 大模型先思考 │
| │ 得出结论 │ │ ↓ │
| │ 结束 │ │ 调用 Python │
| └──────────────┘ │ 工具执行 │
| │ ↓ │
| │ 拿到结果, │
| │ 继续思考或结束 │
| └──────────────┘
|
| Python 代码:一个个独立的工具函数
| 每个函数做一件确定的事
| 不负责思考,不负责编排
|
+---------------------------------------------------
|
v
+------------------------
| 超级 Agent(内核)
+------------------------
用一句话概括:Skill 是脑,代码是手。 有些时候,脑想想就直接给出答案了;有些时候,脑想清楚之后,指挥手去干活。但无论如何,做决定的都是脑,不是手。
这也是为什么我们说"代码做骨架,Skill 做灵魂":骨架撑起身体结构,灵魂决定怎么行动。
4.4 提升有多大
不用精确数字,从几个维度感受一下:
- 稳定性:原来 10 步全靠大模型,现在 8 步用代码固化,稳定性可能提升一个数量级
- 速度:代码执行是毫秒级的,大模型推理要几秒几十秒,整体快 3 到 10 倍很正常
- Token 消耗:省掉了大量"我现在该干什么"的中间推理,只保留了真正需要智能的地方。
- 可维护性:代码的部分可以写测试、可以 CI、可以 debug,和纯 Skill 比是天壤之别
把确定性的东西下沉到代码,就把"不可控"的部分压缩到了最小。剩下需要大模型判断的地方,都是真正需要智能的地方。
4.5 形态四的交付物长什么样
关于交付物,是我思考最多的问题。 Shell Engineering 的交付物 远比传统软件的交付物要复杂很多。传统的交付物,无非就是代码(业务代码 Python、java) + 环境(MySQL、文件系统)。
但 Shell Engineering 是基于超级 Agent 的,如何在这个基座上交付”可复用“的程序是一个比较复杂的问题。
我们在第 10、第 11 章在深刻讨论这个问题,这涉及到以下几个概念&技术之间的关系:
- Hermes 或 Pi Agent 提供通用的理解、规划、工具调用和任务编排能力。
- Codex或者 Claude Code 负责去做开发,生产确定性的,不变的业务,然后将代码嫁接到 Hermes 上。
- Skill 提供语义理解和流程编排
- SDD 把业务规则、数据结构、流程和验收条件写清楚,让系统不是凭一次对话的感觉运行。
- OpenSpec 让这些规则可以版本化、变更、验收和回溯,而不是散在聊天记录和某个作者的脑子里。
4.6 ■ 学点英语
| 中文 | English | 音标 | 说明 |
|---|---|---|---|
| 代码骨架 | Code Skeleton | /koʊd ˈskelɪtn/ | 负责流程、接口和执行结构的基础代码 |
| 技能编排 | Skill Orchestration | /skɪl ˌɔːrkəˈstreɪʃən/ | 按任务需要组合多个 skill 协同工作 |
| 控制流 | Control Flow | /kənˈtroʊl floʊ/ | 程序执行步骤和分支的组织方式 |
| 职责分离 | Separation of Concerns | /ˌsepəˈreɪʃən of kənˈsɜːrnz/ | 把不同职责拆到不同模块中的设计原则 |