本文档旨在帮助您如何在智能硬件上完成AI实时互动应用的搭建。
场景描述
针对智能穿戴设备、陪伴机器人、智能家居等智能硬件对高质量、低延迟AI交互的需求,AI实时互动提供了一套完善的硬件集成方案。该方案旨在帮助开发者迅速验证并将对话式AI集成到智能硬件中,从而实现“AI常态化”的目标。该方案适用于多种场景,包括AI玩具、教育硬件、陪伴设备、穿戴个人助手以及家居语音助手。
前提说明
集成步骤
乐鑫ESP32-S3
交互流程
源码下载
下载地址请参见GitHub开源项目。
环境配置
搭建ESP-ADF开发环境,请参见乐鑫高级开发框架指南。
跑通Demo
请参考乐鑫官网搭建开发环境。本Demo需要用到音频3A,所以需要在esp-idf目录中还需要打一个补丁,否则会报 “AUDIO_THREAD: Not found right xTaskCreateRestrictedPinnedToCore”的错误。
cd esp-adf/esp-idf # esp-idf目录 git apply ../idf_patches/idf_v5.4_freertos.patch
Clone本Demo源码到本地,打开工程编译
Kconfig.projbuild
配置文件,填写WiFi、智能体信息及License。menu "Example Configuration" config WIFI_SSID string "WiFi SSID" default "xxx" help SSID (network name) for the example to connect to. config WIFI_PASSWORD string "WiFi Password" default "xxx" help WiFi password (WPA or WPA2) for the example to use. Can be left blank if the network has no security set. config AUDIO_PLAY_VOLUME int "Audio play volume" default 90 config AUDIO_RECORDER_AEC_ENABLE bool default y config RTC_APP_ID string "智能体关联的RTC应用Id(警告:仅用于开发调试使用)" default "xxx" config RTC_APP_KEY string "智能体关联的RTC应用Keyd(警告:仅用于开发调试使用)" default "xxx" config RTC_USER_ID string "当前用户参与智能体通话的用户Id(建议每个设备使用唯一的Id)" default "123" config VOICE_AGENT_ID string "语音智能体ID(需要提前在控制台上创建智能体)" default "xxx" config VOICE_AGENT_REGION string "语音智能体所属区域)" default "cn-xxx" config LICENSE_PRODUCT_ID string "请输入License产品ID,请联系商务经理获取" default "xxx" config LICENSE_AUTH_CODE string "请输入License授权码,请联系商务经理获取" default "xxx" config LICENSE_DEVICE_ID string "设备序列号" default "xxx" endmenu
重要RTC_APP_KEY此次在本地生成签名Token,仅用于开发阶段的本地调试。对于线上版本,请勿内置RTC_APP_KEY,请使用服务端生成签名并下发方式。请参见生成ARTC鉴权Token生成Token,在智能硬件场景,生成的Token无需进行base64转化,直接将json结果进行下发。
编译Demo工程及烧录,请参见ESP-IDF编程指南。
运行Demo,监控窗口会输出初始化、设置按键事件监听、链接WiFi的日志,当打印出 “Main: [ 5 ] Initialize finish, listen to events” 后,说明初始化完成,此时可以按播放键(左侧上键)开始进行通话。
I (1309) sleep_gpio: Configure to isolate all GPIO pins in sleep state I (1315) sleep_gpio: Enable automatic switching of GPIO sleep configuration I (1322) main_task: Started on CPU0 I (1325) esp_psram: Reserving pool of 32K of internal memory for DMA/internal allocations I (1333) main_task: Calling app_main() I (1336) Main: [ 1 ] Initialize start I (1355) Main: [1.1] Initialize peripherals I (1356) Main: [ 2 ] Start and wait for Wi-Fi network W (1368) wifi:Password length matches WPA2 standards, authmode threshold changes from OPEN to WPA2 W (1402) PERIPH_WIFI: WiFi Event cb, Unhandle event_base:WIFI_EVENT, event_id:43 W (1410) PERIPH_WIFI: WiFi Event cb, Unhandle event_base:WIFI_EVENT, event_id:43 W (1418) PERIPH_WIFI: Wi-Fi disconnected from SSID xxx, auto-reconnect enabled, reconnect after 1000 ms W (4825) PERIPH_WIFI: Wi-Fi disconnected from SSID xxx, auto-reconnect enabled, reconnect after 1000 ms W (5894) PERIPH_WIFI: WiFi Event cb, Unhandle event_base:WIFI_EVENT, event_id:4 I (7426) Main: [2.1] Initializing SNTP I (9042) Main: [ 3 ] Start codec chip W (9042) i2c_bus_v2: I2C master handle is NULL, will create new one W (9082) ES7210: Enable TDM mode. ES7210_SDP_INTERFACE2_REG12: 2 I (9094) Main: [ 4 ] Set up event listener I (9095) Main: [ 5 ] Initialize finish, listen to events
错误说明
如果运行Demo后,出现以下证书过期的报错,一般情况下是连WiFi不稳定,NTP时间校对请求失败了,导致获取SDK使用初始时间进行校验从而校验不通过。
[1970-01-01 00:00:35.715][ERROR] [license.c:276][hermes_sdk] license response code is 400, dataSize: 321
[1970-01-01 00:00:35.717][ERROR] [license.c:300][hermes_sdk] license refresh fail with code=-3, svcCode=InvalidTimeStamp. Expired, regeustId=c401D243-E831-5AD9-A756-283A94D314FF
[1970-01-01 00:00:35.730][ERROR] [license.c:375][hermes_sdk] parse license response failed with result: -3
[1970-01-01 00:00:35.739][ERROR] [artc _aicall.c:79][hermes_sdk] raise error event code: -10001 msg: action return: -2147481342
您需要在运行本Demo时请确保WiFi可正常访问,例如切换热点等;本Demo在WiFi链接仅做简单示例,在实际生成时建议做好wifi断连后重连工作,在重连后重新对时。
杰理AC791
交互流程
源码下载
下载地址请参见GitHub开源项目。
环境配置
搭建杰理AC791序列开发版环境,请参见杰理开发环境安装说明。
跑通Demo
Clone杰理SDK到本地。
Clone本Demo源码到杰理的apps/demo里,Clone修改目录名为
demo_artc_aicall
。- FW-AC79_AIOT_SDK - apps - demo - demo_artc_aicall (注意,这里文件名是下划线分割)
在目录
demo_artc_aicall
里,使用CodeBlocks IDE打开工程文件board/wl82/AC791N_DEMO_ARTC_AICALL.cbp
。进入
artc_device_helper.c
文件,修改WiFi的SSID及PWD。// 设置WiFi的ssid及pwd,用于链接网络 #define WIFI_STA_SSID "ssid" #define WIFI_STA_PWD "pwd"
进入
artc_aicall_demo.c
文件,修改License及智能体信息。// 智能体通话的License信息 #define LICENSE_PRODUCT_ID "xxx" // License产品Id #define LICENSE_AUTH_CODE "xxx" // License授权码 #define LICENSE_DEVICE_ID "xxx" // 设备唯一Id // 当前用户参与智能体通话的用户Id #define USER_ID "xxxx" // 智能体Id #define VOICE_AGENT_ID "xxxx" // 智能体所在的区域 #define AGENT_REGION "xxxx" // 智能体关联的RTC应用Id #define RTC_APP_ID "xxxx" // 智能体关联的RTC应用Key #define RTC_APP_KEY "xxxx"
重要RTC_APP_KEY此次在本地生成签名Token,仅用于开发阶段的本地调试。对于线上版本,请勿内置RTC_APP_KEY,请使用服务端生成签名并下发方式。请参见生成ARTC鉴权Token生成Token,在智能硬件场景,生成的Token无需进行base64转化,直接将json结果进行下发。
编译Demo工程。如何编译,请参见杰理官网文档。
运行Demo。通电后,按下按键与智能体进行互动。
- `K1`: 启动智能体通话 - `K2`: 挂断通话 - `K3`: 打断智能体讲话 - `K4`: 停止发送音频给智能体 - `K5`: 继续发送音频给智能体
查看实时日志,请连接串口并且通过串口工具进行查看。