技能测试与调试
技能写好了,但在发布到技能市场之前,需要经过充分的测试和调试。本文教你如何系统化地测试技能、排查问题、确保质量。
测试流程
本地安装 → 功能测试 → 边界测试 → 异常测试 → 修复 → 重新测试 → 发布
第一步:本地安装测试
将技能包安装到 CeeCore 设备上进行本地测试。
# 拷贝技能到设备
scp -r your-skill/ root@<device-ip>:/data/ceecore/skills/
# 激活技能
ceecore skill activate your-skill-id
详见 安装与激活。
第二步:功能测试
测试清单
逐一测试技能的每个功能点:
| 测试项 | 预期结果 | 实际结果 |
|---|---|---|
| 技能正常激活 | 状态显示「运行中」 | |
| 基本功能触发 | Agent 按预期响应 | |
| 工具调用正常 | 工具被调用且返回正确 | |
| 配置参数生效 | 修改配置后行为变化 | |
| 输出格式正确 | 回复符合 prompt 中定义的格式 |
测试方法
发送测试消息:
"帮我查一下今天的天气"
"明天的天气怎么样"
"最近一周有雨吗"
检查运行日志:
ceecore skill logs weather-reporter --tail 50
日志会显示:
- 技能何时被触发
- 调用了哪些工具
- 工具返回了什么数据
- 是否有错误
使用日志定位问题
# 查看最近 50 条日志
ceecore skill logs weather-reporter --tail 50
# 实时查看日志
ceecore skill logs weather-reporter --follow
# 按时间过滤
ceecore skill logs weather-reporter --since "2026-08-27 08:00"
# 只看错误
ceecore skill logs weather-reporter --level error
第三步:边界测试
测试技能在极端或边界情况下的表现。
边界测试场景
| 场景 | 测试方法 | 预期行为 |
|---|---|---|
| 空输入 | 不填任何配置参数 | 使用默认值,技能正常运行 |
| 超长输入 | 配置参数填入超长字符串 | 被截断或提示错误 |
| 特殊字符 | 城市名填入 '; DROP TABLE-- | 正常处理,不崩溃 |
| 多语言 | 用英文问中文技能 | 按 prompt 规则响应 |
| 大量请求 | 短时间内连续触发 | 不崩溃,不重复响应 |
测试 Prompt 的边界
# 测试用消息
"你好" # 与技能无关的消息
"帮我....(省略上面500字)查天气" # 超长输入
"@#$%^&*" # 纯特殊字符
"" # 空消息
第四步:异常测试
测试技能在异常情况下的容错能力。
异常场景
| 异常 | 模拟方法 | 预期行为 |
|---|---|---|
| API 不可用 | 填入错误的 API Key | 优雅降级,提示用户 |
| 网络超时 | 断开设备网络 | 重试后提示失败 |
| 配置错误 | 填入非法格式的参数 | 提示配置错误,不崩溃 |
| 工具调用失败 | API 返回错误码 | 根据 prompt 中的异常处理规则响应 |
| 并发冲突 | 多个技能同时触发 | 各自独立运行,不互相影响 |
异常处理检查
在 prompt.md 中检查是否覆盖了以下异常:
## 异常处理(检查清单)
- [ ] API 调用失败 → 重试逻辑
- [ ] API 返回空数据 → 默认值或提示
- [ ] 用户输入不符合预期 → 引导用户
- [ ] 配置参数缺失 → 使用默认值
- [ ] 超时 → 超时后的处理
- [ ] 权限不足 → 提示用户授权
第五步:调试技巧
调试用 Prompt 注释
在 prompt.md 中临时加入调试指令:
## 调试模式(测试完成后删除)
在每次回复前,先输出你的思考过程:
- 收到了什么消息
- 判断应该调用什么工具
- 实际调用了什么工具
- 工具返回了什么
这样你可以在对话中看到 Agent 的决策过程。
分步测试
对复杂技能,先单独测试每个工具,再测试整体流程。
# 测试工具 1:获取天气
# 发送消息:"现在的天气"
# 查看日志确认 get_weather 被调用
# 测试工具 2:推送通知
# 发送消息:"推送天气"
# 查看日志确认 send_notification 被调用
# 测试整体流程
# 发送消息:"今天天气怎么样并推送"
# 查看日志确认两个工具都按顺序调用
对比测试
修改 Prompt 后,用同样的测试消息对比新旧版本的表现。
# 保存旧版本日志
ceecore skill logs weather-reporter --tail 50 > old.log
# 修改 prompt.md 后重新激活
ceecore skill activate weather-reporter
# 发送同样的测试消息
# 保存新版本日志
ceecore skill logs weather-reporter --tail 50 > new.log
# 对比
diff old.log new.log
测试通过标准
技能在以下条件全部满足时,才算测试通过:
- 所有功能点正常工作
- 所有工具调用返回正确
- 配置参数修改后行为正确变化
- 边界情况(空输入、特殊字符、超长输入)不崩溃
- 异常情况(API 失败、网络超时)有优雅降级
- 日志输出清晰,可定位问题
- 连续运行 24 小时无异常
发布前最终检查
# 1. JSON 格式校验
python3 -m json.tool manifest.json > /dev/null && echo "✓ manifest.json"
python3 -m json.tool tools.json > /dev/null && echo "✓ tools.json"
python3 -m json.tool config.schema.json > /dev/null && echo "✓ config.schema.json"
# 2. 文件完整性
for f in manifest.json config.schema.json prompt.md tools.json icon.png README.md; do
[ -f "$f" ] && echo "✓ $f" || echo "✗ 缺少 $f"
done
# 3. 图标检查
file icon.png | grep -q "512 x 512" && echo "✓ 图标 512×512" || echo "✗ 图标尺寸不对"
# 4. 技能状态检查
ceecore skill status your-skill-id