手动测试策略
Skill 上线前,系统化的手动测试不可或缺。
测试用例设计
- 正向用例:典型、常见的使用场景,验证「能完成任务」
- 边界用例:空输入、超长输入、特殊字符、多语言等
- 负向用例:非法输入、权限不足、依赖不可用等,验证错误处理
- 跨场景:同一 Skill 在不同对话上下文、不同模型下的表现
检查清单
- [ ] 输出格式是否符合预期(JSON、Markdown 等)
- [ ] 关键信息是否准确、完整
- [ ] 错误提示是否清晰、可操作
- [ ] 是否出现幻觉、越权、敏感信息泄露
- [ ] 多轮对话中上下文是否保持正确
记录与复现
- 保存测试输入、输出与模型配置,便于复现问题
- 对异常 case 建立回归用例,防止修复后再次出现
自动化验证
结构化输出校验
若 Skill 输出为 JSON、YAML 等,可用 schema 校验:
import jsonschema
schema = {"type": "object", "properties": {"result": {"type": "string"}}, "required": ["result"]}
jsonschema.validate(output, schema)
关键内容断言
- 对已知输入,断言输出中必须包含某关键词或结构
- 使用正则或简单 NLP 检查语义是否相关
LLM-as-Judge
对开放性输出,用另一个 LLM 评分:
- 正确性:是否回答了问题
- 完整性:是否遗漏关键信息
- 格式:是否符合要求
- 安全性:是否包含不当内容
回归测试集
- 建立「黄金数据集」:输入 + 期望输出(或期望特征)
- 每次修改后运行,对比实际与期望
- 对非确定性输出,可比较关键字段或使用模糊匹配
CI 集成
GitHub Actions 示例
- name: Run Skill tests
run: |
python -m pytest tests/skills/ -v
python scripts/validate_skills.py
流程设计
- PR 触发:每次 PR 运行测试,确保合并前通过
- 定时任务:定期用最新模型跑回归,监控模型更新带来的影响
- 门禁:关键 Skill 的通过率低于阈值时,阻断合并并通知负责人
测试环境
- 使用测试用 API Key、Mock 外部服务,避免影响生产
- 固定模型版本或 seed,提高结果可复现性
小结
Skill 质量保证需要手动测试与自动化验证相结合。通过用例设计、schema 校验、LLM-as-Judge 和回归测试,再接入 CI,可系统性地提升 Skill 的可靠性与可维护性。