更新时间:2025-04-25 10:43:28下载pdf
情绪感知技术是人工智能领域的一个关键挑战,它旨在通过和用户交互,自动检测和识别人类的情绪状态,如快乐、悲伤、愤怒等。准确的情绪识别可以帮助系统做出更加恰当的响应,提高用户体验。
Wukong AI 硬件开发框架支持情绪感知技术,开发者可以获取每次交互的情绪,并根据情绪的类型,实现一些自定义的表情、动作等,以提高交互体验和实现一些特殊的功能。
情绪作为一种 SKILL
,在和大模型交互的时候,作为文字信息内容,以 JSON
字符串的形式下发自动返回。如果要感知情绪,需要在初始化的时候注册文本内容回调,并且在文本内容回调函数里对文字信息进行解析,并表达出来。
具体 JSON
字符串的格式如下:
{"bizId":"skill-........emo","bizType":"SKILL","eof":1,"data":{"code":"emo","skillContent":{"emotion":["NEUTRAL"]}}}
接收到模型返回的情绪,可以通过表情、动作来表达,这些表达方式,用户可以自行定义。
STATIC OPERATE_RET _parse_skill(ty_cJSON *skill)
{
ty_cJSON *node, *skill_content;
const CHAR_T *code;
// parse code
node = ty_cJSON_GetObjectItem(skill, "code");
code = ty_cJSON_GetStringValue(node);
if (!code)
return OPRT_OK;
TAL_PR_DEBUG("skill code: %s", code);
skill_content = ty_cJSON_GetObjectItem(skill, "skillContent");
if (s_chat_cbc.tuya_ai_chat_custom) {
s_chat_cbc.tuya_ai_chat_custom(code, skill_content, s_chat_cbc.user_data);
}
if (strcmp(code, "emo") == 0) {
// detect emo
// TBD...
}
return OPRT_OK;
}
STATIC OPERATE_RET _ai_agent_txt_cb(AI_TEXT_TYPE_E type, CHAR_T *data, INT_T len)
{
ty_cJSON *json, *node;
// {"bizId":"asr-1741763201372","bizType":"ASR","eof":1,"data":{"text":"这是ASR文本!"}}
// {"bizId":"nlg-1741763173046","bizType":"NLG","eof":0,"data":{"content":"这是NLG响应文本!","appendMode":"append","finish":false}}
// {"bizId":"skill-........emo","bizType":"SKILL","eof":1,"data":{"code":"emo","skillContent":{"emotion":["NEUTRAL"]}}}
if ((json = ty_cJSON_Parse(data)) == NULL) {
return OPRT_OK;
}
// parse bizType
node = ty_cJSON_GetObjectItem(json, "bizType");
const CHAR_T *bizType = ty_cJSON_GetStringValue(node);
// parse eof
node = ty_cJSON_GetObjectItem(json, "eof");
BOOL_T eof = ty_cJSON_GetNumberValue(node);
// TAL_PR_DEBUG("bizType: %s, eof: %d", bizType, eof);
if (eof && strcmp(bizType, "ASR") == 0) {
node = ty_cJSON_GetObjectItem(json, "data");
_parse_asr(node);
} else if (strcmp(bizType, "NLG") == 0) {
node = ty_cJSON_GetObjectItem(json, "data");
_parse_nlg(node, eof);
} else if (eof && strcmp(bizType, "SKILL") == 0) {
node = ty_cJSON_GetObjectItem(json, "data");
_parse_skill(node);
}
ty_cJSON_Delete(json);
return OPRT_OK;
}
STATIC OPERATE_RET __ai_demo_init(VOID)
{
OPERATE_RET rt = OPRT_OK;
AI_AGENT_CFG_T ai_agent_cfg = {0};
ai_agent_cfg.biz_code = TY_BIZCODE_AI_CHAT,
ai_agent_cfg.output.text_cb = _ai_agent_txt_cb;
TUYA_CALL_ERR_RETURN(tuya_ai_agent_init(&ai_agent_cfg));
return rt;
}
STATIC OPERATE_RET __ai_demo_text_input(VOID)
{
tuya_ai_input_start();
tuya_ai_text_input("考试又没及格!", strlen("考试又没及格!"));
tuya_ai_input_stop();
}
在开发过程遇到问题,可以到 TuyaOS 开发者论坛 联网单品开发版块 发帖咨询。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈