注釈
こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiast Community on Facebookへようこそ!他の愛好家と一緒に、Raspberry Pi、Arduino、ESP32の世界により深く入り込みましょう。
参加する理由
専門家サポート: 購入後の問題や技術的な課題を、コミュニティと私たちのチームの助けを借りて解決します。
学習と共有: ヒントやチュートリアルを交換して、スキルを向上させましょう。
限定プレビュー: 新製品の発表や先行プレビューに早期アクセスできます。
特別割引: 最新製品を特別割引でお楽しみいただけます。
季節限定キャンペーンとプレゼント: プレゼント企画やホリデーキャンペーンに参加しましょう。
👉 一緒に発見し、創造する準備はできましたか? [こちら] をクリックして、今すぐ参加しましょう!
7. AI音声アシスタント
このレッスンでは、Fusion HAT+ を 音声中心のAIアシスタント に変えます。 提供されたコードを使用すると、ロボットは ウェイクワードを待機 し、 Voskで音声を文字起こし し、 OpenAIのLLMへ送信 し、 Piper TTSで音声応答 を行います。
開始前に
以下の準備が完了していることを確認してください:
1. Piper のテスト — Piper の音声が正常に動作する(例:「Hello」を再生できる)。
プログラムの実行 — 使用する言語で Vosk STT が動作する(例:
en-us)。5. オンラインLLMへの接続 — OpenAI APIキー を
secret.pyにOPENAI_API_KEYとして保存済み。Fusion HAT+ に マイク と スピーカー が正しく接続されている。
安定したネットワーク接続(LLMはオンラインサービス)。
サンプルの実行
cd ~/ai-lab-kit/llm/
sudo python3 voice_assistant.py
コードで使用される構成:
LLM: OpenAI (
gpt-4o-mini)TTS: Piper (
en_US-ryan-low)STT: Vosk (
en-us)ウェイクワード:
"hey buddy"キーボード入力: 有効 (任意の手動入力)
画像モード: 有効 (
WITH_IMAGE=True)— 将来的に画像を扱う場合はマルチモーダル対応LLMが必要
動作の流れ:
アシスタントがウェイクフレーズ付きのウェルカムメッセージを表示します。
「hey buddy」 を待機します。
ウェイク後、音声が文字起こしされます(Vosk → テキスト)。
テキストが OpenAI(gpt-4o-mini) に送信され、応答が生成されます。
生成された回答が Piper (
en_US-ryan-low)で音声再生されます。
実行例
You: Hey Buddy
Robot: Hi there!
You: What’s the capital of Italy?
Robot: The capital of Italy is Rome.
コード
from fusion_hat.voice_assistant import VoiceAssistant
from fusion_hat.llm import OpenAI as LLM
from secret import OPENAI_API_KEY as API_KEY
llm = LLM(
api_key=API_KEY,
model="gpt-4o-mini",
)
# Robot name
NAME = "Buddy"
# Enable image, need to set up a multimodal language model
WITH_IMAGE = True
# Set models and languages
LLM_MODEL = "gpt-4o-mini"
TTS_MODEL = "en_US-ryan-low"
STT_LANGUAGE = "en-us"
# Enable keyboard input
KEYBOARD_ENABLE = True
# Enable wake word
WAKE_ENABLE = True
WAKE_WORD = [f"hey {NAME.lower()}"]
# Set wake word answer, set empty to disable
ANSWER_ON_WAKE = "Hi there"
# Welcome message
WELCOME = f"Hi, I'm {NAME}. Wake me up with: " + ", ".join(WAKE_WORD)
# Set instructions
INSTRUCTIONS = f"""
You are a helpful assistant, named {NAME}.
"""
va = VoiceAssistant(
llm,
name=NAME,
with_image=WITH_IMAGE,
tts_model=TTS_MODEL,
stt_language=STT_LANGUAGE,
keyboard_enable=KEYBOARD_ENABLE,
wake_enable=WAKE_ENABLE,
wake_word=WAKE_WORD,
answer_on_wake=ANSWER_ON_WAKE,
welcome=WELCOME,
instructions=INSTRUCTIONS,
)
if __name__ == "__main__":
va.run()
コードの解説
OpenAI(..., model="gpt-4o-mini")— このレッスンでは OpenAI を唯一のLLMとして使用します。NAME/WAKE_WORD— アシスタント名をカスタマイズできます(例:「Buddy」「hey buddy」)。WITH_IMAGE=True— アシスタントの画像モードを有効化します(ここでは画像入出力ロジックは含まれていません)。TTS_MODEL="en_US-ryan-low"— 応答音声として使用する Piper の音声モデル。STT_LANGUAGE="en-us"— 音声認識に使用する Vosk の言語設定。KEYBOARD_ENABLE=True— デバッグ時に手動テキスト入力を可能にします。WELCOME/INSTRUCTIONS— 起動メッセージとアシスタントの人格(システムプロンプト)。va.run()— wake → listen → LLM → speak のループ処理を開始します。
他のLLMまたはTTSへの切り替え
いくつかの設定を変更するだけで、他の LLM、TTS、STT 言語へ簡単に切り替えることができます:
対応しているLLM:
OpenAI
Doubao
Deepseek
Gemini
Qwen
Grok
1. Piper のテスト — Piper TTS が対応する言語を確認できます。
プログラムの実行 — Vosk STT が対応する言語を確認できます。
切り替える場合は、コードの初期化部分を変更するだけです:
from fusion_hat.llm import Gemini as LLM
llm = LLM(api_key="YOUR_KEY", model="gemini-pro")
# Set models and languages
TTS_MODEL = "en_US-ryan-low"
STT_LANGUAGE = "en-us"
トラブルシューティング
ロボットがウェイクワードに反応しない
マイクが正常に動作しているか確認してください。
WAKE_ENABLE = Trueになっていることを確認してください。発音に合わせてウェイクワードを調整してください。
周囲のノイズを減らし、はっきりと発話してください。
スピーカーから音が出ない
TTSモデル名(例:
en_US-ryan-low)を確認してください。Piper または Espeak を手動でテストしてください。
スピーカー接続と音量を確認してください。
APIキーエラーまたはタイムアウト
secret.py内のキーを確認してください。ネットワーク接続が安定しているか確認してください。
使用しているLLMモデル(例:
gpt-4o-mini)が利用可能か確認してください。
ウェイクワードは動作するが応答がない
STT言語設定が発音と一致しているか確認してください。
モデルが正しくダウンロードされているか確認してください。
デバッグログを出力して STT が動作しているか確認してください。
TTSは動作するがLLMの応答がない
APIキーが有効か確認してください。
モデル名およびLLM設定を確認してください。
インターネット接続を確認してください。