简介:智能体技能普遍采用三层渐进式披露架构,但断言测试全部通过,并不等于技能设计正确。本文对比两类质量保障方案:基于断言的功能测试工具与面向设计盲区的评估精炼工具,从定位偏差、上下文成本、可移植性与职责边界四个维度拆解差异,并给出典型场景、选型建议与使用注意事项,帮你判断技能是“跑得对”还是“设计得对”。
主流智能体开发框架在引入技能(Skill)体系时,做了一个在架构上值得细看的取舍:每个技能是一个可独立加载的目录,内部包含元数据(通常以 YAML 头部信息写在文档开头)、Markdown 指令主体,以及按需加载的参考资料、脚本和模板。这就是业界所说的三层渐进式披露(progressive disclosure)架构,它把上下文工程(context engineering)的核心判断直接落到了工具设计层面:
my-skill/├── skill.md # 头部为元数据(名称、描述),主体为指令├── references/ # 参考文档:任务需要时才加载├── scripts/ # 可执行脚本:按需调用└── templates/ # 输出模板:按需调用
三层分工非常清晰:元数据层只加载名称和描述,供模型在每轮对话中判断当前请求是否与该技能相关,这一层成本常驻,必须极度精简;指令层在技能被激活时载入;资源层在任务确实需要时逐项调用。背后的逻辑很朴素:每个 token 都有成本,多余的加载会挤压对话历史和其他技能的可用空间,降低整体系统的可靠性。
值得注意的是,这种约束并非某一家的独创。另一类定制智能体体系也呈现相似的收敛趋势:单个动作职责专一、接口用标准化描述规范精确约束,而不是给智能体留太多自由发挥的余地。两大体系在核心约束上达成了共识:技能是能力的封装单位,不是提示词的堆砌;好的技能应当职责单一、边界清晰、可组合、可移植。
问题恰恰出在这里:这四种设计品质,是传统断言测试测不出来的。于是业界分化出两类质量保障手段,也就是本文的对比对象。
方案A:基于断言的功能测试与迭代工具。 以某主流框架官方提供的技能创建工具为代表,它提供“创建—测试—迭代”的完整闭环:对同一批任务分别运行“带技能”与“不带技能(基线)”的 A/B 对比,测量任务通过率与 token 消耗,并依据断言结果持续改进。它回答的问题是:技能在已知场景下是否按预期执行。
方案B:面向设计盲区的评估与精炼工具。 以社区中常见的一类技能精炼器为代表,通常通过命令行方式安装,运行在支持技能体系的智能体环境中。它不重复功能验证,而是专门处理断言测试覆盖不到的结构性问题:技能该不该被激活、指令是否冗余、能否跨环境移植、职责边界是否清晰。它回答的问题是:技能的设计本身是否正确。
一句话概括两者关系:方案A证明技能“跑得对”,方案B审视技能“设计得对”。这是两个不同层面的问题,混淆它们会让质量体系出现漏洞。
尽管定位不同,两类方案在以下方面高度一致,这也是它们经常被混为一谈的原因:
方案A的断言回答“给定输入,输出是否符合预期”,是行为层面的问题;方案B的评估回答“这个技能的定位、结构、依赖是否合理”,是结构层面的问题。一个技能可以行为全部正确、结构一塌糊涂,只要测试用例碰不到这些雷,断言照样全绿。
这是最关键的差异。方案A的所有测试都预设“技能已经被正确激活”,计时从激活之后才开始。方案B恰恰质疑激活本身:描述过宽导致无关请求误触发,描述过窄导致真正需要时被忽略。这两种情况在标准测试中通常不会暴露,因为测试用例天然是“预激活”的,写用例的人本来就知道该用这个技能;而生产环境的真实对话分布不会这么配合。
方案A度量结果指标:通过率、失败分布、token 消耗。方案B度量结构指标:描述的触发精度、指令的冗余度、外部依赖的耦合度、技能之间的职责重叠度。前者可以自动判分,后者往往涉及语义层面的判断。
结合实践来看,断言测试至少存在四个盲区,它们正是方案B的存在理由:
# 描述层的定位偏差示意过宽:"帮助用户处理各种文本任务"→ 无关请求也触发,挤占上下文预算过窄:"将 DOCX 文件的第三章标题改为加粗"→ 用户需要同类批量处理时不触发合理:"当用户需要将 Markdown 表格导出为CSV 并校验列类型时,使用本技能"
方案A输出“通过/失败”的二元结果加量化数据,适合嵌入持续集成流水线做回归;方案B输出问题诊断与改进方向,适合设计评审、上线前把关与技能库的长期治理。前者像单元测试,后者像代码评审,成熟团队两者都需要。
| 对比维度 | 方案A:断言式功能测试 | 方案B:设计质量评估与精炼 |
|---|---|---|
| 核心问题 | 已知场景下是否按预期执行 | 定位、结构与依赖是否合理 |
| 前置假设 | 预设技能已被正确激活 | 质疑激活决策本身 |
| 度量内容 | 通过率、token 消耗 | 触发精度、指令冗余、依赖耦合、职责重叠 |
| 定位偏差 | 无法发现(用例预激活) | 主要检测目标 |
| 上下文浪费 | 仅能由消耗偏高间接察觉 | 定位冗余指令并给出精简方向 |
| 可移植性 | 无法发现(测试即本地环境) | 审查外部依赖与调用链耦合 |
| 边界模糊 | 无法发现 | 检查职责重叠与静默降级 |
| 反馈形式 | 通过/失败 + 量化数据 | 问题诊断 + 改进建议 |
| 适用阶段 | 开发验证、持续回归 | 设计评审、上线把关、长期治理 |
| 自动化程度 | 高,可嵌入流水线 | 中,通常需人工复核采纳 |
断言测试与评估精炼不是二选一的竞争关系,而是分层互补的质量体系:方案A守住“技能在已知场景跑得对”,方案B守住“技能在任何场景都设计得对”。前者依托可自动化的断言与 A/B 对比,适合做持续回归的底线;后者补上定位偏差、上下文浪费、可移植性与边界模糊四个结构性盲区,适合做设计层面的把关。技能是能力的封装单位,封装的边界画得对不对,决定了它在上下文经济中的长期成本与可靠性。决策思路可以归结为一句话:先问跑得对不对,再问设计得对不对,前者交给断言,后者交给精炼,两者闭环,才是技能工程的完整答案。