共计 2016 个字符,预计需要花费 6 分钟才能阅读完成。
百度 Skill 核心概念解析
百度 Skill 是基于百度 DuerOS 平台的智能对话技能开发框架,它允许开发者构建能够处理语音或文本交互的智能应用。简单来说,就像给智能音箱或语音助手安装一个 ” 小程序 ”。

- 意图(Intent):用户想要完成的操作,比如 ” 查询天气 ”
- 槽位(Slot):意图需要的参数,比如查询天气时需要 ” 城市 ” 和 ” 日期 ”
- 对话模型:定义用户可能说的话和系统如何响应的规则
开发环境准备与账号配置
- 注册百度开发者账号
- 访问 百度 AI 开放平台 注册
-
完成实名认证(必需步骤)
-
创建 DuerOS 技能应用
- 进入 DuerOS 开发者控制台
-
点击 ” 创建新技能 ”
-
安装开发工具
- Python 3.6+ 环境
- 安装 Baidu-DuerOS SDK:
pip install dueros-bot
技能创建流程分步详解
1. 定义技能基本信息
- 技能名称:简洁明了,如 ” 天气预报小助手 ”
- 调用名称:用户唤醒技能时说的短语
- 技能类型:选择 ” 自定义技能 ”
2. 配置意图和槽位
在 DuerOS 控制台中:
- 创建 ”QueryWeather” 意图
- 添加槽位:
- city:城市名称
- date:查询日期(可设置默认值为今天)
- 添加用户可能说的话:
- “{city}的天气怎么样 ”
- “ 查一下 {date}{city} 的天气 ”
3. 开发处理逻辑
创建 weather_skill.py 文件:
from dueros.bot import Bot
from dueros.card import TextCard
import requests
class WeatherBot(Bot):
def __init__(self, request_data):
super(WeatherBot, self).__init__(request_data)
def on_intent(self):
# 获取意图名称
intent_name = self.get_intent_name()
if intent_name == 'QueryWeather':
# 获取槽位值
city = self.get_slots('city')
date = self.get_slots('date') or '今天'
# 调用天气 API (示例使用和风天气)
weather_info = self.query_weather(city)
# 构造响应
card = TextCard(f'{date}{city}的天气:{weather_info}')
return {
'card': card,
'outputSpeech': f'{date}{city}的天气情况是{weather_info}'
}
def query_weather(self, city):
# 这里应替换为实际的天气 API 调用
# 示例代码仅作演示
return '晴,25℃,东南风 3 级'
# 主处理函数
def handler(event, context):
bot = WeatherBot(event)
return bot.run()
完整示例:天气预报技能开发
上述代码实现了一个简单的天气预报技能。关键点说明:
- 继承
dueros.bot.Bot基类 - 重写
on_intent方法处理不同意图 - 使用
get_slots获取用户提供的参数 - 通过
TextCard和outputSpeech构造响应
实际开发中,你需要:
- 替换
query_weather方法中的模拟数据,接入真实天气 API - 添加错误处理(如城市不存在的情况)
- 考虑添加多轮对话支持
调试与部署指南
本地测试
- 安装 ngrok 用于内网穿透:
npm install -g ngrok ngrok http 8000 - 运行技能服务:
python weather_skill.py - 在 DuerOS 控制台配置测试 URL
线上部署
推荐部署方式:
- 百度云函数(CFC):
- 上传代码 zip 包
- 设置触发器为 HTTP 触发器
-
获取访问 URL
-
自有服务器:
- 需要 HTTPS 支持
- 确保服务器在中国大陆(响应更快)
常见问题与解决方案
新手常见错误
- 槽位未设置必填:导致获取不到必要参数
-
解决:在意图配置中标记必填槽位
-
响应格式错误:DuerOS 要求特定 JSON 格式
-
解决:始终使用 SDK 提供的响应构造方法
-
超时问题:技能响应超过 5 秒
-
解决:优化 API 调用,添加缓存机制
-
测试环境与正式环境差异:
- 解决:使用完全相同的代码部署
其他常见问题
Q: 为什么我的技能无法被唤醒?
A: 检查调用名称是否设置正确,避免使用常见词汇
Q: 如何处理用户说的城市不在服务范围内?
A: 在代码中添加城市校验逻辑,返回友好提示
进一步学习资源
总结
通过本文,你应该已经掌握了百度 Skill 开发的基本流程。从环境搭建到技能发布,关键是要理解意图 - 槽位的交互模型,以及如何正确处理请求和构造响应。天气预报示例虽然简单,但包含了所有核心概念。接下来,你可以尝试开发更复杂的技能,比如支持多轮对话的订餐服务或知识问答系统。
开发过程中遇到问题时,不要忘记查阅官方文档和社区讨论。百度 Skill 生态正在快速发展,现在正是入门的好时机。
