上一节解释了怎样从真实任务和项目资料中提炼方法。现在回到 7.1 的 roll-dice,只回答一个问题:哪些话需要写进给 Agent 的 Skill,哪些话留在给读者的教程里就够了?

Skill 应保留完成任务需要的指令和约定,省去对执行没有帮助的内容。 需要保留的通常是工具选择、执行步骤、项目规则、关键边界条件和输出要求;Agent 已经理解的常识、无关背景和重复说明可以省去。判断时问:删掉这句话,Agent 是否更容易误解任务、遗漏要求或执行出错?不确定时,用实际运行验证。

对应原文是 Spending context wisely 下的 Add what the agent lacks, omit what it knows。本节只改正文的内容取舍,名称、描述、命令和任务都保持一致。

本节分成四个小节,每次完成一个判断:为什么要取舍、哪些信息必须保留、哪些解释可以省去,以及删减后怎样验证。

7.3.1 Skill 正文为什么要做取舍

Skill 被激活时,正文会与对话等内容一起进入模型上下文。判断一句话是否值得放进去,可以先问:删掉它之后,Agent 是否会缺少完成本次任务需要的信息?

上下文中的文字需要共同服务当前任务。项目规则、操作要求和通用背景可能承担不同的作用,接下来分别判断。

7.3.2 哪些信息必须告诉 Agent

这里的“需要的信息”既包括知识,也包括本任务的具体要求。例如模型可能知道怎样生成随机数,却不知道我们要求它实际运行终端命令、使用命令输出作为结果。后者仍要写清楚。

每次想增加内容,先说明它补充的是哪一种信息:

  • 当前任务或项目明确要求的行为;
  • 需要采用的工具、接口或步骤;
  • 执行中已经暴露的理解缺口。

本例需要保留使用随机数命令的要求,以及将面数替换进命令的方法。它们让 Agent 知道这次应怎样执行。

如果新增的是项目约定,也要表达清楚。例如“未指定面数时默认按 d6 处理”表达的是我们选择的默认行为;只有确实希望采用这个约定时,才把它加入正文。这种信息不能仅凭 Agent 的通用知识推断。

7.3.3 哪些解释可以留在教程里

你读 7.1 时需要知道 d20 表示二十面骰子,所以教程保留了这个解释。执行任务的 Agent 通常已经具备这类常识;如果它已经能正确理解,就不必每次调用 Skill 都再读一遍。

加入背景后的版本

7.1 原例已经很短。为了观察取舍,我们在其中文版本里故意加一段背景说明,构造下面的对照版本;这不是一次已经记录的模型失败。

---
name: roll-dice
description: 使用随机数生成器掷骰子。当用户要求掷一次骰子(如六面骰 d6、二十面骰 d20)、掷骰子或生成随机掷骰结果时使用。
---

骰子是有多个面的物体,常用于桌面游戏。
d6 表示六面骰子,d20 表示二十面骰子。

要掷一次骰子,请使用下面的命令,生成一个从 1 到指定面数之间的随机整数。

```bash
echo $((RANDOM % <sides> + 1))
```

```powershell
Get-Random -Minimum 1 -Maximum (<sides> + 1)
```

将 `<sides>` 替换为骰子的面数,例如普通六面骰使用 6,二十面骰 d20 使用 20。

这次多出的只有两句背景。现在逐句判断:

内容对任务起什么作用本例的处理
骰子常用于桌面游戏提供一般背景,没有改变这次操作可从 Skill 省去
d6、d20 的含义解释通常已知的记法教程继续保留;Skill 中先省去并验证
使用随机数命令指定这次必须采用的执行方法保留
根据面数替换占位符将用户输入连接到命令参数保留
Bash 与 PowerShell 两种命令提供不同终端环境的实际写法本例继续保留,按当前环境选择

这里没有要求删除所有常识。若当前模型确实误解骰子记法,解释就有保留价值。需要根据执行情况判断,不能把“模型应该知道”当作验证结果。

删除背景后的完整版本

只移除那两句背景,其余内容不动,得到与 7.1 中文版一致的文件:

---
name: roll-dice
description: 使用随机数生成器掷骰子。当用户要求掷一次骰子(如六面骰 d6、二十面骰 d20)、掷骰子或生成随机掷骰结果时使用。
---

要掷一次骰子,请使用下面的命令,生成一个从 1 到指定面数之间的随机整数。

```bash
echo $((RANDOM % <sides> + 1))
```

```powershell
Get-Random -Minimum 1 -Maximum (<sides> + 1)
```

将 `<sides>` 替换为骰子的面数,例如普通六面骰使用 6,二十面骰 d20 使用 20。

这次修改没有增加新字段、文件或功能。它保留了执行方法与输入对应关系,减少了与本次决策无关的说明。

7.3.4 删减后,怎样确认任务仍能完成

在同样的模型、工具和环境中,分别使用带背景与删背景的版本。每组开启新会话,避免上一组的指令继续留在上下文里。

请求查看执行记录查看结果
“帮我掷一次 d6。”是否按 6 面运行命令是否使用实际输出,结果在 1~6
“帮我掷一次 d20。”是否按 20 面运行命令是否使用实际输出,结果在 1~20

输入时指定当前客户端支持的技能调用入口,可以先检查正文执行。这里暂不把自动触发的好坏混进同一项判断。

表中是待检查的条件,不是已经完成的模型评测。只看最终数字落在范围里还不够:没有终端调用,不能说明 Agent 遵守了这份 Skill 的执行要求。

两版都完成了这些要求,才有依据认为被删除的背景在这些任务中不是必需的。如果出现稳定的理解偏差,再补回解决该偏差的最少信息。

将这个过程用到下一句话:先说明它对任务有什么作用,再决定是否保留,并检查执行结果。7.1 的最小例子已经简洁,不必为了“优化”再强行改写。

这一节的收获是一次具体取舍:给人解释 d20 的文字继续保留在教程中,Skill 保留执行任务需要的指令。

上一节:经验与方法的来源 · 下一节:一份 Skill 应该负责多大的任务