技能(skill)的存在是为了从一个随机系统中"驯服"出确定性。可预测性——代理(agent)每次运行都采取相同的 流程——是根本的美德。
调用
两种选择:
- 模型调用(model-invoked) 的技能保留了 description,因此代理可以自主触发它。它会贡献于 上下文负载(context load)。
- 用户调用(user-invoked) 的技能将 description 从代理的可及范围中剥离:只有你,键入它的名字,才能调用它。零上下文负载,但消耗 认知负载(cognitive load)。
只有当代理必须自行触及该技能时,才选择模型调用。
编写 description
一个模型调用的 description 承担两项工作——说明这个技能是什么,并列出应触发它的 分支(branches)。
- 把技能的引导词(leading word)前置
- 每个分支只对应一个触发条件。 那些只是为同一个分支换个名字的同义词都是 重复(duplication)。
- 删除已经存在于正文中的身份描述。
信息层级
一个技能由两种内容类型构成——步骤(steps) 和 参考(reference):
- 技能内步骤(In-skill step)——
SKILL.md 中一个有序的动作,是首要层级。
- 技能内参考(In-skill reference)——
SKILL.md 中一条按需查阅的定义、规则或事实。
- 外部参考(External reference)——被推出
SKILL.md、放入独立文件中的参考。
何时拆分
粒度(Granularity) 是指你把技能划分得多细:
- 按调用拆分——当你有一个独特的 引导词 时,拆分出一个 模型调用 的技能。
- 按序列拆分——当后续仍未完成的步骤会诱使代理草草完成手头那一步时,拆分这一串 步骤。
修剪
让每个含义都保留在 单一事实来源(single source of truth) 中。检查每一行是否 相关(relevance)。然后逐句搜寻 无效操作(no-ops)。
引导词
引导词(leading word) 是一个紧凑的概念,它已经存在于模型的预训练之中,代理在运行该技能时会借助它来思考。
失败模式
- 过早完成(Premature completion)——在一个步骤真正完成之前就结束它
- 重复(Duplication)——同一个含义出现在不止一个地方
- 沉积(Sediment)——因为"添加"感觉更保险而沉淀下来的陈旧层次
- 蔓延(Sprawl)——技能纯粹太长了
- 无效操作(No-op)——模型本来就会默认遵守的一行