跳转至

Perplexity 内部 Skill 设计指南:四维体系与维护方法论

Ch07.018 Perplexity 内部 Skill 设计指南:四维体系与维护方法论

📊 Level ⭐⭐ | 12.0KB | entities/perplexity-internal-skill-design-guide.md

核心框架:Skill 的四个维度

1. Skill 是目录(hub-and-spoke)

Skill 不仅仅是一个 SKILL.md 文件,而是包含多个文件的目录结构:

skill-name/  
├── SKILL.md           # 前置元数据和指令  
├── scripts/           # Agent 运行的代码(不现场发明代码)  
├── references/        # 厚重的参考文档,按条件加载  
├── assets/            # 模板、架构和数据  
└── config.json        # 用户首次运行时的设置  
枢纽与辐辏(hub-and-spoke)模式:300 个主题 → 归纳为 20 个领域 → 再从 15 个主题中做选择,难度大幅降低。

2. Skill 是格式

SKILL.md 必须同时具备:

  • name:必须全部小写,不能有空格,可用连字符
  • description:这是「路由触发器」(routing trigger),告诉模型在什么时候加载这个 Skill 描述不是说明文档,而是触发开关——写的是「Load when...」而非「This Skill does...」。
    前置元数据字段:

  • depends::层级化 Skill 依赖关系

  • metadata::用于评审和评估

3. Skill 是可调用的

Computer 中的加载过程:
1. load_skill(name="...") 调用
2. Skill 目录复制到隔离执行沙箱
3. 根据 depends: 递归加载所有依赖项
4. 剥离前置元数据,智能体只看到正文内容和附加文件

4. Skill 是渐进式的(三层 token 成本)

层级 成本 说明
索引层 每个 Skill ~100 tokens 名称+描述,对话开始时注入,所有人都为此支付成本
正文层 理想 ≤ 5,000 tokens 完整 SKILL.md,每句话都要有意义
运行时层 0 到 20,000+ tokens 脚本/条件分支逻辑,按需加载
进入索引层的门槛极高——每一个 token 都至关重要,描述必须极其稠密精炼。

什么时候需要 Skill?

✅ 需要 Skill

  • 纠正错误或不一致:Agent 在没有特殊语境的情况下会出错,或需要极高一致性
  • 特定知识或流程:知识耐用但不在模型训练数据中(如企业工作流)
  • 审美品味:模型无法仅从训练数据中学到的判断力(如字体/设计风格)

❌ 不需要 Skill

  • 模型已知的任务:Git 命令序列对人类是好文档,对模型是差 Skill
  • 系统提示词的重复:全局上下文已有的内容无需重复
  • 变化太快的信息:维护速度跟不上变化速度时会导致误判

每个 Skill 都是一份「税」

如果没有这条指令,Agent 会出错吗? 如果答案是否定,这句话就不该存在。每一个 Skill 都是一份「税」——每个会话、每个用户都在为此支付 token 成本。
写一个短小的 Skill 是很难的。5 分钟写完并提交的 Skill 大概率不合格。LLM 自动生成 Skill 效果通常很差——模型目前还无法可靠地编写出能让自己受益的过程性知识。

如何构建 Skill(五步法)

Step 0:先写评测(Evals)

先写评测,再写内容。可从真实用户查询、已知失败案例、易与邻近领域混淆的情况中寻找素材。负面案例(告诉模型什么时候「不该」加载)往往比正面案例更有力量。

Step 1:写好描述(Description)

这是 Skill 中最难写的一行:

  • 必须以「Load when...」开头
  • 目标在 50 个单词以内
  • 描述用户意图,而非总结工作流程

Step 2:编写正文(Body)

给 AI 写工作流 vs 给同事写文档:

  • 跳过显而易见的事:不写具体命令序列(如 git loggit checkout
  • 给出原则而非死板命令:AI 会自己完成细节
  • 专注于「坑」(Gotchas):信号量最高的内容

Step 3:利用层级结构

将条件性/分支逻辑从主文件拆分到子文件夹。多层级结构可处理极复杂 Skill——仔细考虑是做成庞大单体还是拆分为一组有依赖关系的 Skill 集合。

Step 4:迭代

先在没有该 Skill 的主分支上运行,构建核心查询集并运行大量评测。描述中微小的词语变化可能对路由产生巨大影响(包括对其他 Skill 的溢出效应)。

Step 5:发布

正式发布。

如何维护 Skill:Gotchas 飞轮

Skill 应该是「只增不减」的。Gotchas 部分积累的价值最高:
| 场景 | 行动 |
|------|------|
| Agent 在某处失败 | 增加一个 Gotcha |
| Agent 错误加载了该 Skill | 收紧描述 + 增加负面评测案例 |
| Agent 该加载时没加载 | 增加关键词 + 正面评测案例 |
| 系统提示词变化 | 检查冲突或重复 |
你应该把大部分内容追加到 Gotchas 部分,而不是增加更长的指令或修改描述。 从 80/20 进步到 99.9% 甚至 99.99% 的过程中,Gotcha 列表会自然增长。

评测套件(Eval Suites)

  1. 加载与文件读取评测:加载准确率/召回率 + 禁区检查,确保新 Skill 不破坏现有边界
  2. 渐进式加载评测:Agent 是否正确读取附件文件(如金融 Skill 的格式化要求文件)
  3. 端到端任务评测:完整智能体循环 + LLM 作为裁判评分
    关键:必须在不同模型上运行评测(GPT、Claude Opus、Claude Sonnet),因为不同模型处理 Skill 的表现差异很大。

深度分析

Perplexity 的 Skill 设计体系折射出 LLM 应用工程的根本性范式转移——从「代码即逻辑」到「语境即产品」。
四维体系的工程含义:将 Skill 定义为目录/格式/可调用/渐进式,绝非架构师的自说自话,而是工程压力的产物。300 个主题通过 hub-and-spoke 归纳为 20 个领域,再细分为 15 个主题——这种三层层级设计直接对应了 LLM 上下文窗口的结构性约束。索引层的 ~100 tokens 成本看似微小,但在多 Skill 并发的会话中,5 个 Skill 同时加载就意味着 500 tokens 的确定性开销,这解释了为什么 Perplexity 如此强调「进入索引层的门槛极高」。
描述作为路由触发器的设计选择:传统软件中,文档描述「做什么」;Perplexity 中,描述控制「何时加载」。这个区别的深层含义是:LLM 的推理过程不是确定性执行,而是概率性路由——Skill 的价值不在于完整性,而在于被正确调度的频率。描述写「Load when...」而非「This Skill does...」,本质上是将描述当作一个小型分类器,让模型在每个 token 生成前做一次轻量级的路由决策。
Gotchas 的飞轮逻辑与negative learning:最反直觉的设计是「负面案例比正面案例更有力量」。这对应了机器学习中的一个成熟洞察:在分布外(out-of-distribution)场景中,正面示例的召回边界很难定义,而负面示例的 precision 更容易通过排除法建立。Gotchas 本质上是在构建一个关于「误加载」的分布刻画——每一个新的 Gotcha 都是对模型「不该做什么」的显式约束。
Token 税的经济学:每个 Skill 都是一份税——这个说法将工程决策货币化。在传统软件开发中,代码的边际成本趋近于零;但在 LLM 应用中,每一个注入的 token 都参与运算,都消耗注意力,都影响推理延迟。这意味着 Skill 设计的核心优化目标不是覆盖率,而是「每 token 的路由正确率」。

实践启示

对于 Skill 设计者
1. 在动笔之前先构建评测集,尤其是负面案例——告诉模型「何时不该加载」比告诉它「何时该加载」更有力量
2. 描述控制在 50 个单词以内且必须以「Load when...」开头——这是最小化索引层成本的工程实践
3. 正文每句话都必须通过「如果没有这条指令,Agent 会出错吗?」的过滤测试——做不到则删除
4. 优先将条件逻辑和分支写入 Gotchas 而非修改描述——Gotchas 是只增不减的,随着生产环境中的失败案例自然丰富
对于平台架构师
1. 索引层设计决定全局 token 成本——每个 Skill 的描述字段应该被当作「广播信道」来对待,信噪比至关重要
2. 渐进式加载机制是控制成本的关键——运行时脚本层(0-20,000 tokens)应该是高频使用的无状态逻辑,而非低频引用的厚重文档
3. 多模型评测是必要条件——不同模型对 Skill 的路由行为存在显著差异,不能以单一模型的表现推断全平台行为
4. Skill 之间的超距作用是主要风险源——新增 Skill 可能破坏旧 Skill 的表现,需要在 Skill 加载评测中覆盖「邻居干扰」场景
对于团队流程
1. 先写评测再写 Skill 应该是强制流程——没有评测基准的 Skill 就像没有测试用例的代码
2. 5 分钟写完并提交的 Skill 大概率不合格——这应该成为团队的共识基线
3. 迭代应在没有该 Skill 的分支上进行——避免已加载的 Skill 对新描述的评估产生污染

核心要点

  1. 先写评测,再写 Skill:包含负面示例,防止相邻领域技能误加载
  2. 描述是最难的部分:以「Load when...」开头的每一句话都在消耗注意力成本
  3. Gotchas 是极高价值内容:从小处开始,随着智能体犯错不断丰富
  4. 警惕「超距作用」:添加新 Skill 容易破坏原有 Skill 表现,即便没碰过旧代码

关联阅读

  • 原始文章:https://research.perplexity.ai/articles/designing-refining-and-maintaining-agent-skills-at-perplexity
  • Perplexity Internal Skill Design Guide Xiaojianke — 原始文章存档
  • Agent Skill Writing Guide — 低配版 Skill 写作指南(质量较低,仅供参考)
  • Agent Skill Writing Evaluation — Skill 评测相关

相关实体

原文存档