跳到主要内容

智能体

名词解释

名词解释
Agent智能体,能自主感知、思考、决策、行动的 AI 实体。
ASR自动语音识别(Automatic Speech Recognition)是一种将用户的语音输入转化为文本的技术。
NLG自然语言生成(Natural Language Generation)是一种将结构化数据或者意图转化为自然语言文本的技术。
Skill技能 / 能力模块,一个独立、可插拔、专门干某件事的 AI 功能单元。

功能简述

ai_agent 是 TuyaOpen AI 应用框架中的核心组件,负责与涂鸦 AI 云端服务进行通信。ai_agent 作为中间层,连接本地应用和云端 AI 服务,实现智能对话、语音识别、自然语言理解等功能。

多模态数据输入

  • 音频输入:支持多种多种音频编解码格式

    • PCM:未压缩的原始音频格式,适用于本地处理
    • OPUS:高效的音频编解码格式,适用于网络传输,支持低延迟
    • SPEEX:语音优化的编解码格式,适用于语音通信
  • 文本输入:支持直接发送文本命令或查询到云端

  • 图片输入:支持上传图片数据到云端进行图像识别和分析,适用于视觉问答、图像理解等场景

  • 文件输入:支持上传文件数据到云端,适用于文档处理、文件分析等场景

输出处理

  • 文本回调:处理 ASR、NLG、技能等文本数据

  • 媒体数据回调:处理音频、视频、图片、文件等媒体流

  • 媒体属性回调:获取音频编解码类型等信息

AI 会话事件管理

模块管理 AI 对话的完整生命周期,通过事件回调机制通知应用层:

  • 会话开始事件:当云端开始返回数据时触发,通常用于启动 TTS 播放器,准备接收音频流数据。
  • 会话结束事件:当云端数据发送完成时触发,用于停止 TTS 播放器,完成播放流程。
  • 会话中断事件 :当云端主动中断对话时触发,需要立即停止当前播放,清理资源。常见场景包括用户打断、云端超时等。
  • 会话退出事件 :当对话完全退出时触发,用于清理所有相关资源。
  • 服务器 VAD 事件:云端语音活动检测事件,用于通知应用层云端检测到的语音活动状态。

云端提示音管理

  • 请求云端提示音:根据提示音类型生成对应的提示词(cmd:0 到 cmd:5),AI 根据收到的提示词返回对应的提示音内容。这个需要在平台上对智能体进行配置,在智能体的 Prompt 中注明当 AI 收到 cmd:0 到 cmd:5 时应该返回什么内容

  • 播放云端提示音:收到云端返回的音频数据后调用播放器接口进行播放。

  • 提示音映射表

    告警类型提示词说明
    AT_NETWORK_CONNECTEDcmd:0网络连接成功
    AT_WAKEUPcmd:1唤醒响应
    AT_LONG_KEY_TALKcmd:2长按按键对话
    AT_KEY_TALKcmd:3按键对话
    AT_WAKEUP_TALKcmd:4唤醒对话
    AT_RANDOM_TALKcmd:5随机对话

智能体角色切换

模块支持动态切换 AI Agent 的角色。不同的角色可以具有不同的对话风格、知识库和技能集,适用于多场景应用。

工作流程

初始化

输入处理

输出处理

会话事件管理

云端提示音

回调函数关系图

开发流程

接口说明

初始化

初始化 AI Agent 模块,如果打开了 ENABLE_AI_MONITOR 配置宏,还会初始化监控模块配合 tyutool 上位机可有助于调试。

该初始化必须在 MQTT 连接成功后调用

/**
@brief Initialize the AI agent module
@return OPERATE_RET Operation result
*/
OPERATE_RET ai_agent_init(void);

反初始化

释放 AI Agent 模块占用的资源

/**
@brief Deinitialize the AI agent module
@return OPERATE_RET Operation result
*/
OPERATE_RET ai_agent_deinit(void);

输入文本

发送文本数据给 AI

/**
@brief Send text input to AI agent
@param content Text content to send
@return OPERATE_RET Operation result
*/
OPERATE_RET ai_agent_send_text(char *content);

输入文件

发送文件数据给 AI

/**
@brief Send file data to AI agent
@param data Pointer to file data
@param len File data length
@return OPERATE_RET Operation result
*/
OPERATE_RET ai_agent_send_file(uint8_t *data, uint32_t len);

输入图片

发送图片数据给 AI

/**
@brief Send image data to AI agent
@param data Pointer to image data
@param len Image data length
@return OPERATE_RET Operation result
*/
OPERATE_RET ai_agent_send_image(uint8_t *data, uint32_t len);

播放云端提示音

根据提示音类型生成对应的提示词,用提示词让 AI 生成提示音然后播放。

/**
@brief Request cloud alert from AI agent
@param type Alert type
@return OPERATE_RET Operation result
*/
OPERATE_RET ai_agent_cloud_alert(AI_ALERT_TYPE_E type);

切换智能体角色

/**
@brief Switch AI agent role
@param role Role name to switch to
@return OPERATE_RET Operation result
*/
OPERATE_RET ai_agent_role_switch(char *role);

开发步骤

参考代码

// MQTT 连接事件回调
int __ai_mqtt_connected_evt(void *data)
{
if (!sg_ai_agent_inited) {
// 步骤 3:初始化 AI Agent 模块
TUYA_CALL_ERR_LOG(ai_agent_init());
sg_ai_agent_inited = true;
}
return OPRT_OK;
}

// 初始化函数
OPERATE_RET example_init(void)
{
OPERATE_RET rt = OPRT_OK;

// 初始化音频输入和播放模块
#if defined(ENABLE_COMP_AI_AUDIO) && (ENABLE_COMP_AI_AUDIO == 1)
AI_AUDIO_INPUT_CFG_T input_cfg = {
.vad_mode = AI_AUDIO_VAD_MANUAL,
.vad_off_ms = 1000,
.vad_active_ms = 200,
.slice_ms = 80,
.output_cb = __ai_audio_output,
};
TUYA_CALL_ERR_RETURN(ai_audio_input_init(&input_cfg));
TUYA_CALL_ERR_RETURN(ai_audio_player_init());
#endif

// 订阅 MQTT 连接事件,在连接成功后初始化 AI Agent
TUYA_CALL_ERR_RETURN(tal_event_subscribe(EVENT_MQTT_CONNECTED, "ai_agent_init",
__ai_mqtt_connected_evt, SUBSCRIBE_TYPE_EMERGENCY));

return OPRT_OK;
}

// 使用示例:发送文本
void send_text_to_ai(void)
{
ai_agent_send_text("今天天气怎么样?");
}

// 使用示例:请求提示音
void request_alert(void)
{
ai_agent_cloud_alert(AT_WAKEUP);
}

// 使用示例:切换角色
void switch_role(void)
{
ai_agent_role_switch("");
}