
Perplexity 的前沿 AI 代理产品,建立在封装于模块化 AI 代理技能中的技术诀窍与领域专业知识基础之上。开发高质量技能所需的直觉与最佳实践,与构建传统软件的要求截然不同。
五大 Python 之道 vs 技能之道
| Python 之禅 | 技能之禅 |
|---|---|
| 简洁胜于复杂 | 技能是一个文件夹,而非单个文件。复杂性本身就是特性 |
| 显式胜于隐式 | 激活是隐式模式匹配。采用渐进式披露 |
| 稀疏胜于密集 | 上下文成本高昂。每个令牌都要承载最大信息量 |
| 特例不足以打破规则 | 陷阱就是最重要的特例(它们是价值最高的内容) |
| 如果实现易于解释,那可能是个好主意 | 如果它易于解释,说明模型已经知道了。删掉它 |
技能的四重含义
1. 技能是一个目录
– SKILL.md:前置元数据和核心指令
– scripts/:AI 代理直接运行的代码
– references/:重量级文档,按需条件加载
– assets/:模板、模式和数据文件
– config.json:首次运行用户配置
2. 技能是一种格式
技能名称必须全部为小写字母,描述是路由触发器,告诉模型何时应该加载该技能。
3. 技能是可调用的
AI 代理在运行时加载技能,并非始终捆绑在上下文中。
4. 技能是渐进式的
| 层级 | 加载内容 | 预算 | 支付时机 |
|---|---|---|---|
| 索引 | 每个非隐藏技能的名称和描述 | 每个技能约 100 令牌 | 每个会话、每个用户,始终支付 |
| 加载 | 完整的 SKILL.md 正文 | 约 5000 令牌 | 运行时 |
| 运行 | scripts/、references/、assets/ 中的文件 | 无上限 | 仅当 AI 代理读取时 |
何时需要技能?
需要技能的情况:
– 没有特殊上下文时 AI 代理会出错
– 需要在多次运行中保持极高的一致性
– 知识不在训练数据中或涉及审美判断
不需要技能的情况:
– 模型已经知道如何做的事情(如 git 命令)
– 与大多数请求相关的通用知识
– 变化速度快于维护能力的内容
每个技能都是一种税
"我之所以写了这么长的信,是因为我没有时间把它写得更短。" —— 帕斯卡
核心测试: 没有这条指令,AI 代理会出错吗?如果不是必须存在的,就不能存在。
如何构建技能
步骤 0:编写评估用例
– 真实用户查询
– 已知失败案例
– 邻域混淆场景
步骤 1:编写描述
– 以"当… 时加载"开头
– 目标 50 个词以内
– 描述用户意图,不总结工作流程
步骤 2:编写正文
– 跳过显而易见的内容
– 关注陷阱和负面例子
– 不要写出一系列命令
步骤 3:使用层次结构
– scripts/:确定性逻辑
– references/:按需加载的文档
– assets/:输出模板
– config.json:首次运行配置
步骤 4-5:迭代与发布
陷阱飞轮
| 情况 | 操作 |
|---|---|
| AI 代理失败 | 添加陷阱 |
| 错误加载技能 | 收紧描述,添加负面评估 |
| 应该加载时没加载 | 添加关键词和正面评估 |
| 系统提示变化 | 检查冲突或重复 |
核心要点
- 在技能之前编写评估
- 描述是最难的部分
- 陷阱是价值极高的内容
- 添加新技能可能破坏现有技能
- 每个技能都是一种税