技能测试与调试

技能写好了,但在发布到技能市场之前,需要经过充分的测试和调试。本文教你如何系统化地测试技能、排查问题、确保质量。

测试流程

本地安装 → 功能测试 → 边界测试 → 异常测试 → 修复 → 重新测试 → 发布

第一步:本地安装测试

将技能包安装到 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

← 配置参数设计 | manifest.json Schema 参考 →