共计 2018 个字符,预计需要花费 6 分钟才能阅读完成。
为什么 Skill 开发值得学习
如今语音助手已经深入日常生活,从查询天气到控制智能家居,背后都依赖 Skill(技能模块)实现具体功能。作为开发者,掌握 Skill 开发意味着能创造更自然的交互体验——比如让用户直接说 ” 明天需要带伞吗 ” 就能获得降雨概率,而不是机械地点击天气 APP。

理解 Skill 的三大核心组件
-
意图(Intent):用户说话的真正目的,例如 ” 查询天气 ”” 设定闹钟 ”。就像餐厅点单时,服务员要理解你是想 ” 下单 ” 还是 ” 退菜 ”
-
话语样本(Utterance):同一意图的不同表达方式。比如查询天气可能有 ” 今天会下雨吗 ”” 北京气温多少 ” 等多种说法
-
槽位(Slot):意图中的关键参数。就像订餐时需要知道 ” 菜品名称 ” 和 ” 数量 ”,天气查询需要提取 ” 城市 ” 和 ” 日期 ”
用一个实际例子说明:当用户说 ” 上海后天温度怎么样 ”,系统会识别为 WeatherQuery 意图,并提取 city: 上海 和date: 后天 两个槽位值。
实战:开发天气查询 Skill
准备开发环境
- 安装 Node.js 14+ 和 VS Code
- 注册 AWS 账号并开通 Lambda 服务
- 在 Alexa 开发者控制台创建新 Skill,选择 ” 自定义 ” 类型
定义交互模型
在 Alexa 技能控制台创建以下意图和样本:
# WeatherQuery 意图
utterances:
- {city}今天天气
- {city}明天会下雨吗
- 查下 {date} 的天气
slots:
- city (AMAZON.City)
- date (AMAZON.DATE)
编写业务逻辑
创建 Lambda 函数处理请求,核心代码如下:
const axios = require('axios');
// 天气 API 调用(示例用 OpenWeatherMap)async function fetchWeather(city, date) {
try {
const apiKey = process.env.WEATHER_API_KEY; // 安全存储密钥
const response = await axios.get(`https://api.openweathermap.org/data/2.5/forecast?q=${city}&appid=${apiKey}`
);
// 过滤指定日期的预报
return response.data.list.find(item =>
item.dt_txt.includes(date)
);
} catch (error) {console.error('API 调用失败:', error);
throw new Error('获取天气信息时出现问题');
}
}
// 意图处理器
exports.handler = async (event) => {
const intent = event.request.intent;
if (intent.name === 'WeatherQuery') {
const city = intent.slots.city.value;
const date = intent.slots.date.value || '今天';
try {const weatherData = await fetchWeather(city, date);
return {
version: '1.0',
response: {
outputSpeech: {
type: 'PlainText',
text: `${date}${city}的天气是 ${weatherData.weather[0].description}`
}
}
};
} catch (error) {
// 错误恢复机制
return {
response: {
shouldEndSession: false,
reprompt: {text: '抱歉没听清,请再说一次城市和日期'}
}
};
}
}
};
部署与测试
- 将代码打包为 ZIP 上传到 Lambda
- 在 Alexa 控制台配置 Lambda ARN
- 使用模拟器测试对话流程:
- 用户:” 查询北京明天天气 ”
- Skill:” 明天北京的天气是晴间多云 ”
生产环境避坑指南
数据安全
- 永远不要在代码中硬编码 API 密钥
- 使用 AWS Systems Manager 的 Parameter Store 存储敏感信息
- 为 Lambda 配置最小必要权限原则
性能优化
- 启用 Lambda Provisioned Concurrency 预防冷启动
- 对天气 API 响应添加缓存层(如 Redis)
- 使用 Alexa 的 Progressive Response 先返回等待提示
多语言支持
- 为每种语言创建独立的交互模型
- 在 Lambda 中根据
request.locale切换响应文案 - 注意日期 / 数字的本地化格式差异
下一步学习方向
- 如何利用用户历史数据实现个性化推荐(比如常查城市自动优先)
- 使用 NLU 上下文理解更复杂的查询(如 ” 比昨天热吗 ”)
- 通过 A / B 测试优化对话流程设计
开发第一个 Skill 就像学骑自行车——开始可能需要辅助轮(模板代码),但很快就能自由探索。当听到用户自然地说出你设计的对话时,那种成就感绝对值得付出。现在就去 Alexa 控制台点击 ” 创建技能 ” 开始你的旅程吧!
正文完
