このドキュメントでは、インテリジェントハードウェア上でリアルタイム対話型 AI アプリケーションを構築する方法について説明します。
シナリオの説明
リアルタイム対話型 AI は、スマートウェアラブル、コンパニオンロボット、スマートホームデバイスなど、高品質で低遅延の AI インタラクションを必要とするデバイス向けに、完全なハードウェア統合ソリューションを提供します。このソリューションは、開発者が対話型 AI を迅速にテストしてインテリジェントハードウェアに統合し、AI を標準機能にするのに役立ちます。AI トイ、教育用ハードウェア、コンパニオンデバイス、ウェアラブルパーソナルアシスタント、ホーム音声アシスタントなど、さまざまなシナリオに適しています。
前提条件
現在、
Jieli AC791およびEspressif ESP32-S3チップがサポートされています。他のチップのサポートをリクエストするには、チケットを送信してください。リアルタイム対話型 AI を有効化し、エージェントを作成します。詳細については、「音声通話とビデオ通話のクイックスタート」をご参照ください。
インテリジェントハードウェアのライセンスをリクエストします。詳細については、ビジネス担当者にお問い合わせください。
統合手順
Espressif ESP32-S3
インタラクションフロー
ソースコードのダウンロード
ソースコードをダウンロードするには、GitHub のオープンソースプロジェクトをご参照ください。
環境の構成
ESP-ADF 開発環境をセットアップするには、Espressif Audio Development Framework ガイドをご参照ください。
デモの実行
Espressif の公式サイトの指示に従って開発環境をセットアップします。このデモにはオーディオ 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デモのソースコードをローカルマシンにクローンします。
Kconfig.projbuildプロジェクト構成ファイルを開き、Wi-Fi、エージェント、およびライセンス情報を入力します。menu "サンプル構成" config WIFI_SSID string "WiFi SSID" default "xxx" help サンプルが接続する SSID (ネットワーク名)。 config WIFI_PASSWORD string "WiFi パスワード" default "xxx" help サンプルが使用する WiFi パスワード (WPA または WPA2)。 ネットワークにセキュリティが設定されていない場合は、空白のままにできます。 config AUDIO_PLAY_VOLUME int "オーディオ再生音量" 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 アプリケーションキー (警告: 開発およびテスト専用)" 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 "ライセンスプロダクト ID を入力します。取得するにはビジネス担当者にお問い合わせください。" default "xxx" config LICENSE_AUTH_CODE string "ライセンス認証コードを入力します。取得するにはビジネス担当者にお問い合わせください。" default "xxx" config LICENSE_DEVICE_ID string "デバイスシリアル番号" default "xxx" endmenu重要RTC_APP_KEY は、開発段階でのテスト用にローカルでトークンを生成するために使用されます。本番バージョンでは、RTC_APP_KEY を埋め込まないでください。代わりに、サーバーでトークンを生成し、クライアントに配信する必要があります。詳細については、「ARTC 認証トークンを生成する」をご参照ください。インテリジェントハードウェアのシナリオでは、生成されたトークンを Base64 でエンコードする必要はありません。JSON の結果を直接配信できます。
デモプロジェクトをコンパイルしてフラッシュするには、ESP-IDF プログラミングガイドをご参照ください。
デモを実行します。モニタリングウィンドウには、初期化、ボタンイベントリスナーのセットアップ、および Wi-Fi 接続のログが表示されます。「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
エラーの説明
デモを実行した後に次の証明書の有効期限エラーが発生した場合、通常は Wi-Fi 接続が不安定で、ネットワークタイムプロトコル (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このデモを実行するときは、安定した Wi-Fi 接続があることを確認してください。たとえば、別のホットスポットに切り替えてみてください。このデモの Wi-Fi 接続ロジックは単純な例です。本番環境では、Wi-Fi の切断を処理し、再接続が成功した後に時刻を再同期するメカニズムを実装する必要があります。
Jieli AC791
インタラクションフロー
ソースコードのダウンロード
ソースコードをダウンロードするには、GitHub のオープンソースプロジェクトをご参照ください。
環境の構成
Jieli AC791 シリーズ開発ボードの開発環境をセットアップするには、Jieli 開発環境インストールガイドをご参照ください。
デモの実行
Jieli SDK をローカルマシンにクローンします。
デモのソースコードを Jieli SDK の `apps/demo` フォルダにクローンします。クローンしたフォルダの名前を
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ファイルを開き、Wi-Fi の SSID とパスワードを変更します。// ネットワーク接続用の Wi-Fi SSID とパスワードを設定します。 #define WIFI_STA_SSID "ssid" #define WIFI_STA_PWD "pwd"artc_aicall_demo.cファイルを開き、ライセンスとエージェントの情報を変更します。// エージェント通話のライセンス情報 #define LICENSE_PRODUCT_ID "xxx" // ライセンスプロダクト ID #define LICENSE_AUTH_CODE "xxx" // ライセンス認証コード #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 アプリケーションキー #define RTC_APP_KEY "xxxx"重要RTC_APP_KEY は、開発段階でのテスト用にローカルでトークンを生成するために使用されます。本番バージョンでは、RTC_APP_KEY を埋め込まないでください。代わりに、サーバーでトークンを生成し、クライアントに配信する必要があります。詳細については、「ARTC 認証トークンを生成する」をご参照ください。インテリジェントハードウェアのシナリオでは、生成されたトークンを Base64 でエンコードする必要はありません。JSON の結果を直接配信できます。
デモプロジェクトをコンパイルします。コンパイル方法については、Jieli の公式ドキュメントをご参照ください。
デモを実行します。デバイスの電源を入れた後、ボタンを押してエージェントと対話できます。
- `K1`: エージェント通話を開始 - `K2`: 通話を切断 - `K3`: エージェントを中断 - `K4`: エージェントへの音声送信を停止 - `K5`: エージェントへの音声送信を再開リアルタイムログを表示するには、シリアルポートに接続し、シリアルポートツールを使用します。