Realtime APIを利用することで、従来よりもリアルタイムに近い応答速度で会話を楽しむことができます。OpenAI Realtime API 及び Gemini Live APIに対応しています。
Realtime APIを有効にするために次の設定を行います。
・YAMLファイル(3種類)を作成しSDカードに保存(※)
・ビルド&書き込み
※ AtomS3RはSDカード非対応のため、SPIFFSにYAMLファイルを書き込みます。書き込み方法はこちらを参照ください。
SDカードフォルダ:/yaml
ファイル名:SC_SecConfig.yaml
Wi-FiパスワードとAPIキー(aiservice)を設定します。STTとTTSは使用しないため設定不要です。
wifi:
ssid: "********"
password: "********"
apikey:
stt: "********" # ApiKey of SpeechToText Service (OpenAI Whisper/ Google Cloud STT 何れかのキー)
aiservice: "********" # ApiKey of AIService (OpenAI ChatGPT / Gemini)
tts: "********" # ApiKey of TextToSpeech Service (VoiceVox / ElevenLabs / OpenAI 何れかのキー)
SDカードフォルダ:/app/AiStackChanEx
ファイル名:SC_ExConfig.yaml
LLMとして「0:ChatGPT」または「3:Gemini」を選択します。
enableMemory=true にすると長期記憶(SPIFFSに要約を記録)が有効になります。
長期記憶に関する詳細は基本的な使用方法の 3.パーソナライズ を参照ください。
llm:
type: 0 # 0:ChatGPT 1:ModuleLLM 2:ModuleLLM(Function Calling) 3:Gemini
enableMemory: true # true で長期記憶を有効化
SDカードフォルダ:/yaml
ファイル名:SC_BasicConfig.yaml
サーボの種類、ポート等を設定をします。サーボを使わない場合は省略して問題ありません。
servo:
pin:
# ServoPin
# Core1 PortA X:22,Y:21 PortC X:16,Y:17
# Core2 PortA X:33,Y:32 PortC X:13,Y:14
# CoreS3 PortA X:1,Y:2 PortB X:8,Y:9 PortC X:18,Y:17
# Stack-chanPCB Core1 X:5,Y:2 Core2 X:19,Y27
# When using SCS0009, x:RX, y:TX (not used).(StackchanRT Version:Core1 x16,y17, Core2: x13,y14)
x: 33
y: 32
center:
# SG90 X:90, Y:90
# SCS0009 X:150, Y:150
# Dynamixel X:180, Y:270
x: 90
y: 90
offset:
# Specified by +- from 90 degree during servo initialization
x: 0
y: 0
servo_type: "PWM" # "PWM": SG90PWMServo, "SCS": Feetech SCS0009
下図のように、VSCode(Platformio)のGUIで"env:m5stack-xxx-realtime"を選択してビルド&書き込みを実行します。
① M5Coreを起動してアバターが表示されたあと、吹き出しの文字が"Connecting..."から"Please touch"に変わります。
② M5Core画面の上部(アバターの額のあたり)をタッチすると吹き出しが"Listening..."に変わり、リアルタイム会話を開始します(もう一度タッチするとリアルタイム会話を停止します)。
AtomS3Rは画面自体が物理ボタンになっているため、画面中央を少し強めに押し込んでください。
③ 30秒以上会話が無い状態が続くとリアルタイム会話を終了し、吹き出しが"Please touch"に戻ります。
M5Core画面の中央付近をタッチするとサーボによる動作の停止、再開ができます。
Function Callingと、Function Callingを応用して実装したMCPも使用可能です。Function Callingはデフォルトで時計、アラーム機能が有効になっており、「今何時?」や「3分のアラームをセットして」という要求に応えることができます。MCPはLinux PCでMCPサーバを起動し、YAMLで接続先MCPサーバの設定をする必要があります。詳細はこちらを参照ください。
VOICEVOX等(※)のTTSを組み合わせることで、お好みの声に変更することができます(ただし、応答の遅延は若干増えます)。
※動作確認はVOICEVOXとAquesTalkで行っています。デバイス毎の対応状況は次の通りです(SRAM容量などによる制約)
デバイス VOICEVOX AquesTalk Core2 × 〇 CoreS3 〇 〇 AtomS3R × ×
Note:
技術的には、Realtime APIの出力をストリーミングのテキストのみに設定し、「。」、「?」、「!」の区切り文字を受信したタイミングでTTSに渡しています。TTSで発話しながら次の区切り文字までのテキストを受信することで、次のテキストの発話までの遅延を抑えています。
platformio.iniの[realtime_api]セクションのbuild_flagsにDREALTIME_API_WITH_TTSを追加してビルド、書き込み。
[realtime_api]
build_flags =
-DREALTIME_API
-DREALTIME_API_WITH_TTSSDカードの/app/AiStackChanEx/SC_ExConfig.yaml で使用したいTTSを設定。
動作確認はVOICEVOXとAquesTalkで行っています。AquelTalkを使用する場合は別途こちらに記載しているセットアップも必要です。
tts:
type: 0 # 0:VOICEVOX 1:ElevenLabs 2:OpenAI TTS 3:AquesTalk 4:ModuleLLM
model: "" # VOICEVOX, AquesTalk (modelは未対応)
#model: "eleven_multilingual_v2" # ElevenLabs
#model: "tts-1" # OpenAI TTS
#model: "melotts-ja-jp" # ModuleLLM (日本語) ※モデル指定なしの場合は英語
voice: "3" # VOICEVOX (ずんだもん)
#voice: "AZnzlk1XvdvUeBnXmlld" # ElevenLabs
#voice: "alloy" # OpenAI TTS
#voice: "" # AquesTalk (voiceは未対応)
