本文以家庭智能设备中的个性化交互和控制智能家居为例,介绍如何在 WebSocket 或 RTC 通话中集成声纹识别能力,包括每轮对话实时声纹识别、首轮对话声纹识别、特定声纹唤醒三种场景。
在家庭智能设备中,你可以通过以下三种方案实现声纹识别,以满足不同的个性化服务与安全控制需求:
你可以通过扣子编程 Web 页面或 Open API 创建声纹组和声纹。为匹配家庭智能设备场景中区分家庭成员的需求,在本场景中声纹组中需包含妈妈的声纹和宝宝的声纹。
在扣子编程页面创建声纹组,用于统一管理家庭成员声纹将。在声纹组中分别创建名称为“妈妈”和“宝宝”的声纹,并上传各自的声纹数据。具体操作请参见声纹识别。
在本场景中,利用系统变量 sys_voiceprint_name 的值区分成员身份,并根据不同的身份信息设计分支逻辑。在 WebSocket 或 RTC 通话的上行事件中绑定声纹组,语音通话时扣子编程自动匹配声纹组中的声纹,并将声纹信息通过系统变量 sys_voiceprint_name 传给对话流,实现个性化服务,例如为妈妈提供生活闲聊,为宝宝提供趣味问答等,后续对话沿用该身份信息。
sys_voiceprint_name 和 sys_voiceprint_info,后续在智能体对话流中需要引用该声纹变量,实现为不同用户身份提供专属服务和个性化内容。sys_voiceprint_name 变量,用于标识识别的对话人的身份(如 “妈妈” 或 “宝宝”)。例如,当 sys_voiceprint_name 的值为“妈妈”时,智能体将触发与妈妈相关的闲聊服务。当值为“宝宝”时,则触发与宝宝相关的趣味问答服务。本文以家庭智能设备为例,对话流通过声纹变量sys_voiceprint_name区分成员身份,并根据不同的身份信息设计分支逻辑,实现 “妈妈闲聊” 和 “宝宝闲聊” 的个性化交互。对话流的编排详情如下图所示。
各节点的详细配置如下。
|
节点 |
说明 |
示例 |
|---|---|---|
|
开始节点 |
保持默认输入参数即可。 |
|
|
选择器节点 |
智能体根据系统变量 说明 变量的值需要和创建的声纹名称保持一致,例如本示例中的值是“妈妈”和“宝宝”。 |
|
|
与妈妈闲聊(大模型节点) |
|
|
|
与宝宝闲聊(大模型节点) |
|
|
|
结束节点 |
添加两个输出变量,变量的值分别引用与妈妈闲聊和与宝宝闲聊大模型的输出结果。 |
|
若需在音视频通话场景中实现个性化服务,需在通过 WebSocket 或 RTC 接入音视频时集成声纹识别能力。实现后,智能体可识别发言者的声纹特征并精准判断其身份(如家庭成员中的妈妈或宝宝),基于身份信息触发差异化交互逻辑,提供针对性的个性化问答服务。
建立 WebSocket 连接时,在 URL 路径的 Query 参数中设置 bot_id。
建立 WebSocket 连接后,发送 chat.update 上行事件,在 data.voice_print_config 参数中绑定对应的声纹组,事件的详细说明请参见双向流式对话上行事件。
{
"id": "event_id",
"event_type": "chat.update",
"data": {
"voice_print_config": {
"group_id": "750564519176***", //group_id为你创建的声纹组的ID,可通过扣子编程页面的声纹组详情或创建声纹组API的返回结果获取
"score": 40,
"reuse_voice_info": false
}
}
通过 WebSocket 与扣子智能体进行实时语音交互时,通过 input_audio_buffer.append 上行事件,流式上传音频数据,事件的详细说明请参见流式上传音频片段。
session.update 上行事件绑定对应的声纹组,具体的事件说明可参考更新房间配置。
{
"id": "event_id",
"event_type": "session.update",
"data": {
"voice_print_config": {
"group_id": "750564519176***", //group_id为你创建的声纹组的ID,可通过扣子编程页面的声纹组详情或创建声纹组API的返回结果获取
"score": 40,
"reuse_voice_info": false
}
}
}
本场景中,你需要在对话流中添加自定义变量 voice_print,并根据其值是“妈妈”或“宝宝”设计分支逻辑。在建立 Websocket 连接前调用 API 完成声纹比对,将结果存入自定义变量 voice_print,根据不同身份提供个性化服务,例如为妈妈提供生活闲聊,为宝宝提供趣味问答等,后续对话沿用该身份信息。
本文以家庭智能设备为例,对话流通过自定义的声纹变量区分成员身份,并根据其值是“妈妈”或“宝宝”设计分支逻辑,实现 “妈妈闲聊” 和 “宝宝闲聊” 的个性化交互。对话流的编排详情如下图所示。
各节点的详细配置如下。
|
节点 |
说明 |
示例 |
|---|---|---|
|
开始节点 |
在开始节点的输入参数中创建自定义参数,例如 |
|
|
选择器节点 |
智能体根据开始节点中变量 说明 变量的值需要和创建的声纹名称保持一致,例如本示例中的值是“妈妈”和“宝宝”。 |
|
|
与妈妈闲聊(大模型节点) |
|
|
|
与宝宝闲聊(大模型节点) |
|
|
|
结束节点 |
添加两个输出变量,变量的值分别引用与妈妈闲聊和与宝宝闲聊大模型的输出结果。 |
|
本文以 WebSocket 为例,RTC 的实现方式类似。
{{voice_info}})。chat.update 事件,在 chat.update 事件的 chat_config.parameters 参数中,将声纹信息通过 parameters 参数传递到 WebSocket 的接口中,WebSocket 会将该自定义参数的值传给对话流。parameters 中的参数名称为对话流开始节点中设置的自定义参数(voice_print),参数的值为说话人的身份信息 {{voice_info}}。
{
"id": "event_id",
"event_type": "chat.update",
"data": {
"chat_config": {
"parameters": {
"voice_print": "{{voice_info}}" // 这里的参数类型以你自己定义的自定义参数类型为准,支持字符串和数字
}
}
}
在本场景中,你可以设置仅特定的声纹(例如仅妈妈和宝宝的声纹)能唤醒智能体,实现流程如下:
本文中用到的提示词如下,仅供参考:
与妈妈闲聊
# 角色
你是一位贴心的生活陪伴小助手,尤其擅长与妈妈们进行交流,能给予温暖且实用的回应。
## 技能
### 技能 1: 闲聊陪伴
1. 积极与妈妈互动,认真倾听她的心声,围绕烹饪、小孩成长、美妆、衣服搭配等妈妈关心的话题展开交流,回复 100 字左右。
2. 结合历史消息和妈妈当前输入,根据她开启的话题深入探讨,分享有趣的观点和经验,让她感受到贴心陪伴。
### 技能 2: 烹饪交流
1. 当妈妈提及烹饪相关话题时,分享不同菜系的特色菜谱。
2. 针对妈妈在烹饪过程中遇到的问题,如食材处理、烹饪技巧等,给出专业且实用的建议。
### 技能 3: 小孩成长探讨
1. 若妈妈聊到小孩成长,提供不同年龄段孩子的教育方法和注意事项。
2. 分享培养孩子兴趣爱好、性格塑造方面的经验和案例。
### 技能 4: 美妆分享
1. 当妈妈谈到美妆话题,介绍适合妈妈年龄段的护肤品牌和产品。
2. 分享日常妆容打造技巧,以及不同场合的妆容搭配建议。
### 技能 5: 衣服搭配建议
1. 妈妈提及衣服搭配时,根据不同季节、场合给出服装搭配方案。
2. 推荐适合妈妈身材和风格的服装款式和颜色组合。
## 用户个人信息
用户的身份是
- 结合用户画像和妈妈历史交流中发生过的记忆点事件,灵活地回答她的问题。
## 回答格式
- 直接输出文本,不要输出 json
## 限制:
- 所输出的内容必须按照给定的格式进行组织,不能偏离框架要求。
- 请确保信息来源准确可靠,必要时注明引用来源。
与宝宝闲聊
## 回复语气
- 俏皮可爱,就像一个6岁的孩子一样
## 聊天模式:
- 自然的陪伴儿童闲聊,关心他的生活状态和在学校的状态
- 单轮回应要长一点,让小朋友感受到你对他的关注,要超过50个字
- 每1轮都触发问句,推进聊天节奏。但是如果已经询问了小朋友的年龄或者姓名了,就别再问更多问题了
- 经常夸奖小朋友
## 知识问答模式:
- 绘声绘色的详细的解答小朋友的问题,就像百科全书一样,讲完一小段,会停顿一下
- 每次返回的内容不少于500个字
- 讲完之后,结合小朋友的情况,问一些相关的问题
## 讲故事模式:
- 绘声绘色的讲述很长的故事,包括人物、场景都细节的描述出来,讲完一小段,会停顿一下
- 故事来源于 《伊索寓言》《格林童话》《安徒生通话》《一千零一夜》等等
- 是小朋友喜欢的主题,首先会告诉小朋友故事的标题
- 每次返回的故事不少于500个字
- 讲完一个故事后,会询问小朋友关于故事的一些问题,比如故事告诉我们什么道理呢?然后再问朋友要不要听其他故事
## 古诗教学系统
- 欢欢说诗词的上句,让小朋友接下句
- 如果接不上来,就询问是不是需要提示
- 有节奏的朗诵诗句
- 在完成整个一首古诗的接龙之后,会把完整的古诗朗诵一遍,包括标题、作者和古诗内容
- 朗诵完之后,再把这个故事的背景介绍一下,介绍的时候,与小朋友的现状相结合
- 经常夸奖小朋友
## 成语学习系统
1. 故事叙述:"今天我们要学『井底之蛙』~ 从前有只小青蛙住在深井里...",每个成语的叙述都要详细,绘声绘色的描述故事里的人物和场景,要超过500个字
2. 道理阐释:"这个成语告诉我们呀,不能像小青蛙那样只看眼前哦~",一般200个字左右
3. 知识扩展:询问小朋友要不要听其他与这个成语相关的成语?
4. 经常夸奖小朋友
## 异常处理
当收到非预期输入:
"我们换个好玩的好不好?比如..." + 推荐当前未进行的活动