XiaoZhi AI と DeepSeek:デバイスと大規模モデルの役割分担
「XiaoZhi + DeepSeek」と聞くと、大規模モデルが ESP32 上で動いていると思われがちですが、そうではありません。XiaoZhi デバイスは大規模モデルに直接接続しません。デバイスは音声の入口で、モデルはサーバー側で接続します。上流 README のプロジェクトの位置づけは、「XiaoZhi AI チャットボットは音声インタラクションの入口として、Qwen / DeepSeek などの大規模モデルの AI 能力を利用し、MCP プロトコルで多様な端末を制御する」というものです。
この記事では、この役割分担を整理し、コミュニティ製サーバーを例に、サーバー側で DeepSeek を設定する方法を示します。
1. デバイスとサーバーの役割
| 段階 | 場所 | 説明 |
|---|---|---|
| ウェイクワード検出 | デバイス | ESP-SR によるオフライン音声ウェイクアップ。カスタムウェイクワードに対応 |
| 音声の収音と再生 | デバイス | マイクで収音して Opus ストリームにエンコードして送信し、サーバーから届いた音声をデコードして再生 |
| 表示と感情表現 | デバイス | OLED / LCD に文字と表情を表示 |
| 音声認識(ASR) | サーバー | 送信された音声をテキストに変換 |
| 大規模モデルとの対話(LLM) | サーバー | DeepSeek などの大規模モデルはこの段階で接続します |
| 音声合成(TTS) | サーバー | 返答テキストを音声に合成 |
| デバイス制御 | デバイス側 MCP | 音量、照明、モーター、GPIO などを制御 |
上流 README によると、ファームウェアは Opus 音声ストリームを採用し、従来のストリーミング ASR + LLM + TTS 方式と、Realtime のエンドツーエンド音声モデルの両方に対応しています。デバイスとサーバー間の通信プロトコルは WebSocket と MQTT + UDP を参照してください。
2. 接続方法は 2 通り
| 方法 | モデルの選び方 | 向いている人 |
|---|---|---|
| 公式サーバー(デフォルト) | 公式コンソールで提供されるもの。個人ユーザーはアカウント登録で Qwen リアルタイムモデルを無料で利用可能 | すぐに使いたい、サーバーを運用したくない |
| 自前のサーバー | サーバーが対応するものなら何でも。DeepSeek も可 | 大規模モデル、音声認識、音声合成を自分で選びたい |
ファームウェアには大規模モデルの API キーはありませんし、必要でもありません。キーはサーバーの設定にだけ保存してください。自前サーバーの全体像、セキュリティ上の警告、デバイスを自分のサーバーに向ける方法は自前サーバーを参照してください。
3. サーバーで DeepSeek を設定する(xiaozhi-esp32-server の例)
xinnan-tech/xiaozhi-esp32-server はコミュニティのオープンソースサーバー(MIT ライセンス)です。次の設定は、v0.9.7 タグの main/xiaozhi-server/config.yaml から抜粋したものです。
# Excerpt of main/xiaozhi-server/config.yaml (xiaozhi-esp32-server v0.9.7)
selected_module:
LLM: DeepSeekLLM
LLM:
DeepSeekLLM:
type: openai
model_name: deepseek-v4-flash
url: https://api.deepseek.com
api_key: <your DeepSeek API key>補足:
selected_module.LLMは使用する LLM の設定名を選びます。ここでは下で定義しているDeepSeekLLMを指します。type: openaiは OpenAI 互換インターフェースで呼び出すことを意味します。このサーバーが現在サポートする LLM の type はopenai、dify、ollamaです。model_nameは DeepSeek のモデル更新に合わせて変わるため、最新情報は DeepSeek Platform で確認してください。- サーバーのドキュメントでは、自分の変更を
data/.config.yamlに書くことを勧めています。このファイルはconfig.yamlを上書きするため、アップグレードで失われません。 - API キーは機密情報です。リポジトリにコミットしたり、公開 issue に貼り付けたりしないでください。
4. 5 ステップで最初の対話まで
- ファームウェアを書き込む:ファームウェアのダウンロードページでボードのバリアントを選び、書き込みツールで書き込みます。
- ネットワーク設定とアクティベーション:初回起動に従って Wi-Fi を設定します。
- サーバーをデプロイ:サーバープロジェクトのドキュメントに従ってデプロイし、OTA URL と WebSocket URL を控えます。
- デバイスを自分のサーバーに向ける:設定ページの「詳細設定(Advanced)」タブに OTA URL を入力するか、ビルド時に
Default OTA URLを設定します。 - 設定と確認:サーバーに DeepSeek のエンドポイントとキーを設定し、ウェイクワードまたはボタンで会話を開始して、サーバーのログにリクエストが届いたことを確認します。
5. DeepSeek を選ぶ前に考えておくこと
以下はベンチマーク結果ではなく、一般的なエンジニアリング上の考慮点です。
- レイテンシ:1 回の音声対話は認識、モデル、合成を順に通ります。モデルの最初のトークンが返るまでの時間が、待ち時間に直接影響します。ご自身のネットワークとサーバーで実測してください。
- 費用とレート制限:モデルは呼び出しごとに課金され、レート制限がある場合があります。提供元の料金と利用規約を確認してください。
- プライバシー:会話のテキストはサードパーティの API に送信されます。プライバシーが重要なら、提供元のデータポリシーを確認し、ローカルで動かせるモデルも検討してください。
- 差し替えやすさ:サーバーは LLM を設定項目として抽象化しているため、モデルの変更は通常、設定の変更だけで済みます。モデルの詳細をビジネスロジックに埋め込まないでください。
- セキュリティ:自前サーバーはセキュリティ評価を受けていません。インターネットに公開する場合は十分な防御を行ってください。詳しくは自前サーバーの警告を参照してください。
関連記事
出典
- 上流 78/xiaozhi-esp32 v2.5.2 の
README.md。 - コミュニティプロジェクト xiaozhi-esp32-server の
v0.9.7タグのmain/xiaozhi-server/config.yaml。 - 確認日:2026-10-23。誤りや補足は [email protected] までご連絡ください。