前言
你已经有了一个能跑的天气 Skill,基础功能实现了。但如果想让 Skill 更智能、更健壮,还需要进阶技巧。
进阶一:更聪明地处理参数
之前的正则 ^(.+?)天气$ 只能匹配"北京天气",但"北京的天气""帮我查一下北京天气"就匹配不了了。
解决方案:多规则 + 语义识别
function extractCity(text) {
const patterns = [
/^(.+?)天气$/,
/^(.+?)的天气$/,
/帮我查一下(.+?)天气/,
];
for (const pattern of patterns) {
const match = text.match(pattern);
if (match) return match[1];
}
return null;
}进阶二:多 API 组合调用
用 Promise.all 并行调用多个 API,显著提升速度:
const [weather, flights, hotels] = await Promise.all([
fetchWeather(city),
searchFlights(city, date),
searchHotels(city)
]);进阶三:Skill 互调
一个 Skill 可以调用另一个 Skill,避免代码重复:
const weather = await openclaw.callSkill("weather", { city: "北京" });进阶四:最佳实践
1. 错误处理
try {
const data = JSON.parse(response);
} catch (error) {
console.error("[skill] 解析失败:", error);
return { success: false, error: "获取数据失败" };
}2. 超时处理
const timer = setTimeout(() => reject(new Error("超时")), 5000);3. 参数校验
if (!params.city || params.city.length > 20) {
return { error: "城市名无效" };
}总结
| 进阶技巧 | 核心价值 |
|---|---|
| 灵活参数 | 覆盖更多用户说法 |
| 多 API 并行 | 提速 |
| Skill 互调 | 代码复用 |
| 错误处理 | 更健壮 |
练习项目:
- 翻译 Skill(⭐ 入门)
- 新闻聚合 Skill(⭐⭐⭐ 进阶)
原创文章,作者:技术老牛,如若转载,请注明出处:https://jishubiji.com/p/928