扫地机 Wukong AI 能力

更新时间:2025-11-12 09:42:22下载pdf

本文为您介绍如何在扫地机中集成 Wukong AI 能力,重点介绍如何使用涂鸦提供的接口来实现扫地机的智能交互功能以及音视频数据处理。

功能描述

在集成 Wukong AI 能力后,扫地机可以实现与用户的智能交互,通过音视频数据的分析与处理为用户提供更好的使用体验。系统提供了完整的 AI 交互生命周期管理,包括初始化、预录设置、开始交互及停止交互等功能。

接口及用法说明

AI 能力初始化

tuya_ipc_ai_station_init

功能描述

初始化 AI 站点功能,在使用 AI 能力前必须先调用此接口进行初始化。

接口定义

/**
 * @brief init ai station
 * 
 * @param VOID 
 * 
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h 
 */
OPERATE_RET tuya_ipc_ai_station_init();

返回值

参数 说明
OPRT_OK 表示初始化成功
其他 表示发生错误,具体错误码请参考 tuya_error_code.h

AI 对话初始化

tuya_ipc_ai_chat_init

功能说明

初始化 AI 对话功能,设置事件回调和音频播放回调函数。这是开启 AI 对话功能的基础接口。

接口定义

/**
/**
 * @brief         callback of ai cmd
 * @param[in]     cmd. specifically refer to TUYA_AI_CMD_TYPE_E
 * @param[in]     args. additional data for cmd
 * @return        VOID
 */
typedef VOID (*TUYA_IPC_AI_CMD_CB)(TUYA_AI_CMD_TYPE_E cmd, CONST PVOID_T args);

/**
 * @brief         callback of audio play
 * @param[in]     audio_data. if the AI voice ends, audio_data will be equal to NULL
 * @param[in]     len. len of audio data. if the AI voice ends, len will be equal to 0
 * @return        VOID
 */
typedef VOID (*TUYA_IPC_AI_AUDIO_PLAY_CB)(CONST CHAR_T *audio_data, INT_T len);

/**
 * @brief init ai chat
 * 
 * @param[in] event_cb: ai event cb
 * @param[in] audio_cb: audio play cb
 * 
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h 
 */
OPERATE_RET tuya_ipc_ai_chat_init(TUYA_IPC_AI_CMD_CB event_cb, TUYA_IPC_AI_AUDIO_PLAY_CB audio_cb);

参数说明

参数 说明
event_cb 需要您对接的一些操作命令或者状态
audio_cb 音频播放的回调函数

返回值

参数 说明
OPRT_OK 表示初始化成功
其他 表示发生错误,具体错误码请参考 tuya_error_code.h

开始 AI 交互

tuya_ipc_ai_station_start_act

功能描述

开始当前的 AI 交互会话。调用后,会从 ringbuffer 中取音视频数据发送给云端。

接口定义

/**
 * @brief start a conversation
 * 
 * @param VOID 
 * 
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h 
 */
OPERATE_RET tuya_ipc_ai_station_start_act();

返回值

参数 说明
OPRT_OK 表示初始化成功
其他 表示发生错误,具体错误码请参考 tuya_error_code.h

停止 AI 交互

tuya_ipc_ai_station_stop_act

功能描述

结束当前的 AI 交互会话。调用后,设备会停止向云端发送数据,并开始接受云端返回的数据。云端数据会通过 TUYA_IPC_AI_CMD_CB event_cb, TUYA_IPC_AI_AUDIO_PLAY_CB audio_cb 通知给您。

接口定义

/**
 * @brief stop a conversation
 * 
 * @param VOID
 * 
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h 
 */
OPERATE_RET tuya_ipc_ai_station_stop_act();

返回值

参数 说明
OPRT_OK 表示初始化成功
其他 表示发生错误,具体错误码请参考 tuya_error_code.h

设置音频预录时间

tuya_ipc_ai_set_chat_pre_time

功能描述

设置音频的预录时间。在开始对话后,系统将从 ringbuffer 中获取指定时长的历史音视频数据。

接口定义

/**

@brief set chat pre time duration
@param[in] chat pre time
@return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
*/
OPERATE_RET tuya_ipc_ai_set_chat_pre_time(INT_T pre_time_ms);

参数说明

pre_time_ms:用于设置音频预录时间的长度,以毫秒为单位。例如,设置为 2000 毫秒,即表示回溯 2 秒的音视频数据。

返回值

参数 说明
OPRT_OK 表示初始化成功
其他 表示发生错误,具体错误码请参考 tuya_error_code.h

使用场景

当用户开始对话时,在执行开始交互动作之前调用此接口。

调用 tuya_ipc_ai_station_start_act 接口,Wukong AI 会从 ringbuffer 中获取当前时间往前 pre_time_ms 毫秒的音视频数据,并发送到云端进行处理。

使用流程

以下是 AI 能力使用流程示例:

#include "tuya_ipc_ai.h"
#include "tuya_error_code.h"

// AI 事件回调函数
void ai_event_callback(AI_EVENT_E event, void *args) {
    switch(event) {
        case E_AI_CMD_CHAT_START:
            /*开始对话*/
            break;
        case E_AI_CMD_CHAT_FIN:
            /*结束对话*/
            break;
        // 处理其他 AI 事件...
    }
}

// 音频播放回调函数
void audio_play_callback(const unsigned char *audio_data, unsigned int len) {
    // 处理音频播放逻辑
}

// 初始化 AI 对话功能
void init_ai_chat() {
    OPERATE_RET ret = tuya_ipc_ai_chat_init(ai_event_callback, audio_play_callback);
    if (ret != OPRT_OK) {
        printf("Failed to initialize AI chat: %d\n", ret);
        return;
    }
    printf("AI chat initialized successfully\n");
}
// AI 功能初始化
OPERATE_RET init_ai_features() {
    // 初始化 AI 站点
    OPERATE_RET ret = tuya_ipc_ai_station_init();
    if (ret != OPRT_OK) {
        printf("Failed to initialize AI station: %d\n", ret);
        return ret;
    }
    OPERATE_RET ret = tuya_ipc_ai_chat_init(ai_event_callback, audio_play_callback);
    if (ret != OPRT_OK) {
        printf("Failed to initialize AI chat: %d\n", ret);
        return;
    }
    // 设置 2 秒预录时间
    ret = tuya_ipc_ai_set_chat_pre_time(2000);
    if (ret != OPRT_OK) {
        printf("Failed to set chat pre time: %d\n", ret);
        return ret;
    }

    printf("AI features initialized successfully\n");
    return OPRT_OK;
}

// AI 交互会话管理
void manage_ai_session() {
    // 开始 AI 交互会话
    OPERATE_RET ret = tuya_ipc_ai_station_start_act();
    if (ret != OPRT_OK) {
        printf("Failed to start AI interaction: %d\n", ret);
        return;
    }

    // ... 执行 AI 交互逻辑 ...

    // 停止 AI 交互会话
    ret = tuya_ipc_ai_station_stop_act();
    if (ret != OPRT_OK) {
        printf("Failed to stop AI interaction: %d\n", ret);
        return;
    }
}
int main() {
    // IoT SDK 初始化及上报上线
    // 初始化 AI 功能
    if (init_ai_features() != OPRT_OK) {
        return -1;
    }
    // 管理 AI 会话
    manage_ai_session();

    return 0;
}

常见问题

为什么需要设置预录时间?

预录时间能确保捕获到用户语音指令的完整开始部分,提高识别准确率。

AI 交互会话是否支持并发?

建议同一时间只维持一个 AI 交互会话,以确保稳定性。

为什么没有收到云端的音频数据?

目前云端只支持 PCM 和 Opus 的音频格式,可能是由于放入 ringbuffer 的音频数据编码格式不符合要求。

通过合理使用这些接口,您可以在扫地机中实现完整的 AI 交互能力,提升产品的智能化水平和用户体验。