基于 Perplexity Research 公开文章《Designing, Refining, and Maintaining Agent Skills at Perplexity》(2026年5月)的实践总结 阅读时间:~15分钟 | 适用对象:营养指南skill开发者
Perplexity 提出了与 Python 之禅截然相反的「Skill 之禅」:
| 代码之禅 | Skill 之禅 |
|---|---|
| Simple is better than complex | Skill 是一个文件夹,不是一个文件。复杂度是特性。 |
| Explicit is better than implicit | 激活是隐式模式匹配。渐进式加载。 |
| Sparse is better than dense | 上下文是昂贵的。每 Token 最大化信号。 |
| Special cases aren't special enough | Gotchas 就是特殊案例(最高价值内容)。 |
核心教训:写给模型看的好Skill,和写给人看的好文档,是完全相反的东西。
description: "营养学 Skill — 基于《xxx指南》的科普对话助手,覆盖7条营养原则、4种中医证型、72套食谱..."❌ 问题:这是描述"Skill是什么",不是告诉模型"什么时候该用"
description: >-
Load when 用户提到痛风、高尿酸、尿酸高、嘌呤、大脚趾红肿热痛、
或问"尿酸高能吃什么""痛风发作怎么办""XX食物嘌呤多少"。
涵盖急性期/缓解期饮食、中医辨证施膳、食物嘌呤查询、食谱定制。✅ 改进:
- 用 "Load when..." 开头
- ~50字以内
- 从真实用户查询出发
- 关键词覆盖主要触发场景
| 用户说 | 触发? | 原因 |
|---|---|---|
| "我尿酸高,想减肥" | ✅ 触发 | 尿酸+减肥=需要提醒快速减肥风险 |
| "我减肥,给个食谱" | ❌ 不触发 | 无尿酸/痛风关键词 |
| "我剧烈运动减肥后脚疼" | ✅ 触发 | 剧烈运动→乳酸→可能诱发痛风 |
原则:不看单一关键词,看上下文组合。
模型最容易犯的错——不是"应该做什么",而是"千万别做什么"。
Perplexity方法论:每次模型犯错→加一条 gotcha。列表越长 skill 越强。
| # | 模型常见错误 | 正确做法 |
|---|---|---|
| 1 | "植物嘌呤高不能吃" | ❌ 植物嘌呤≠动物嘌呤,豆腐菠菜都可以吃 |
| 2 | "急性痛风调整饮食就好" | ❌ 必须立即就医,安全>一切 |
| 3 | "红酒比白酒好" | ❌ 所有酒精都升高尿酸 |
| 4 | "海鲜煮熟嘌呤就少" | ❌ 嘌呤是水溶性的,反而全溶汤里了 |
| 5 | "苏打水能降尿酸" | ❌ 效果微乎其微 |
| 6 | "快速减肥降尿酸" | ❌ 过快减肥反而诱发痛风 |
| 7 | "不疼了就可以随便吃" | ❌ 缓解期是降尿酸黄金窗口 |
| 8 | 不分年龄段给相同目标 | ❌ 老人BMI/蛋白标准不同 |
| 9 | 维生素C当主要手段 | |
| 10 | 听到"关节疼"不追问部位 |
- 每条 = 一个具体的模型错误 + 正确的纠正
- 写"千万别做 X",不写"应该做 Y"
- 从真实测试中积累——第一次犯错就加一条
- 放在 SKILL.md 中独立
## ⚠️ Gotchas区域
- 正面示例:引导模型正确的回答格式和深度
- 负面示例:防止模型在不该触发时触发
## ❌ 负面示例:通用减肥咨询(但有边界!)
一般不触发:
- "我想减肥,给个食谱" → 无尿酸关键词
但以下情况需要触发:
- "剧烈运动减肥" → 乳酸→抑制尿酸排泄
- "减肥+尿酸高" → 快速减肥诱发痛风
追问清单:
1. 尿酸控制得怎么样?
2. 最近有没有关节不适?
3. 打算怎么运动?多强?- 5个正面示例:覆盖最常见场景
- 3个负面示例:覆盖最容易误触发的场景
- 每个负面示例都有"边界情况"说明
- 示例包含追问逻辑(患者不说≠不需要问)
- 回答80%常见问题,无需翻KPK文件
- 降低模型对重度知识库的依赖
- 减少上下文消耗
# [疾病]营养速查卡
## 📊 诊断标准
## 🎯 控制目标
## 🔴 核心分类(如嘌呤四级)
## 🍽️ 每日核心指标
## ❌ 饮食硬禁忌
## 🟢 可以放心吃的
## 🧠 常见误区(= mini gotchas)
## 🌿 中医证型速查
## 📞 安全红线Perplexity 定义了三级上下文成本:
| 层级 | 加载内容 | 预算 | 何时付费 |
|---|---|---|---|
| Index | skill.yaml 的 name+description | ~100 tokens/Skill | 每次对话 |
| Load | SKILL.md 正文 | ~5000 tokens | skill触发时 |
| Runtime | KPK文件、食谱数据 | 无上限 | 模型按需读取 |
| 文件 | 层级 | 说明 |
|---|---|---|
| skill.yaml → description | Index | 路由触发(极简,每token都珍惜) |
| system_prompt.md + KPK正文 | Load | 核心知识(<5000 tokens) |
| recipes_data.md + dietary_formulas.md | Runtime | 重数据按需查阅 |
患者不说 ≠ 不需要问。
好的营养师助手应该像好的营养师一样——追问边界情况。
| 用户说 | 追问 |
|---|---|
| "我想减肥" | "尿酸控制得怎么样?最近有没有关节不适?" |
| "我最近运动多了" | "什么类型的运动?强度多大?运动后关节有不适吗?" |
| "我尿酸正常了" | "停药了吗?最近一次检查是什么时候?" |
| "我喝了点酒" | "什么酒?喝了多少?有没有关节不适?" |
- Description 是路由触发器,不是说明文档 → "Load when..." 格式
- Gotchas 是最高价值内容 → 模型每犯一次错就加一条
- 负面示例要有边界说明 → 不是"永远不触发",是"在什么情况下不触发"
- 主动追问 → 患者不说≠不需要问
- 渐进式加载 → Index→Load→Runtime,每层都精打细算
- "没有这句话,模型会犯错吗?" → 不会就删。每句话都是一笔税。
参考来源:
- Designing, Refining, and Maintaining Agent Skills at Perplexity
- Agent Skills 开放标准
- 实践项目:痛风营养助手 (gout-dietary-guide) | 作者:王润圆