9月16日、Google AIが「How we built a desktop companion robot with Gemma 4 and Raspberry Pi」と題した記事を公開した。Gemma 4とRaspberry Piを組み合わせたデスク用コンパニオンロボット「DinoDesk AI」の設計・実装について詳しく紹介されている。「一日中カメラに見られたくない」という問いかけを出発点に、プライバシーを最優先しながらローカルとクラウドのLLMを動的に使い分ける設計が特徴だ。
カメラなし・プライバシー優先という設計判断
DinoDesk AIにはカメラが搭載されていない。音声入力のみで動作し、ローカルモード時は音声データもネットに出ない。「デスクに置くデバイスに一日中見られたくない」という設計思想が徹底されており、プライバシーを意識したエンジニアが自分用に作るには現実的な構成だ。
この方針はモデル選定にも反映されている。デフォルトではGemma 4(Googleが開発したオープンウェイトの軽量LLM)をローカル実行し、ネットワークを一切経由しない。複雑な推論が必要な場面に限り、クラウド上のGemini Flash(Googleの高速・低コストなクラウドAPIモデル)に自動エスカレートする仕組みだ。Gemma 4はオンデバイス・エッジ向けに設計された軽量モデルであるのに対し、Gemini Flashはより高い推論能力をAPIで提供する——という役割分担がこのハイブリッド構成の根幹にある。
核心は「ハイブリッドLLMアーキテクチャ」
このプロジェクトで最も興味深いのは、ローカルとクラウドを動的に切り替えるHybrid LLM Switching Architectureの実装だ。
AIハードウェア周辺機器を作る際の典型的なジレンマがある。クラウドだけに依存すると、「今何時?」程度の質問でもAPIトークンを消費し、音声データがネットに流れる。一方、小さなオンデバイスモデルだけでは、複雑なコードの説明や数学的推論に限界がある。
Google AIはこの問題を、ユーザーのメインPCをゲートウェイ(ルーター)として機能させる設計で解決した。Raspberry Piはデスク上でWi-Fi経由でメインPCに接続し、OpenAI互換のAPIリクエストを投げるだけ。どのエンジンが動いているかを意識しなくてよい。ローカルエンジンの実行環境には**LM Studio**(GUIでローカルLLMを管理・サーブできるデスクトップアプリ)が使用されており、OpenAI互換エンドポイントをローカルに立てることでRaspberry Pi側のコードを変えずにモデルを差し替えられる。
┌─────────────────────────────────────────────────┐
│ [ Main PC / Local Gateway ] │
│ │
│ ┌─────────────────────────────────────────┐ │
│ │ Dynamic Model Router / Switch │ │
│ └────────────────────┬────────────────────┘ │
│ │ │
│ ┌──────────────────┴──────────────────┐ │
│ v v │
│ [ LOCAL ENGINE ] [ CLOUD ENGINE ] │
│ LM Studio / Gemma 4 Gemini Flash / │
│ (Zero Latency, Private) Gemini Live │
└────────────────────────┬────────────────────────┘
│
│ Wi-Fi (Unified OpenAI-Compatible Stream)
v
┌─────────────────────────────────────────────────┐
│ [ DinoDesk AI (RPi) ] │
│ - Pirate Audio LCD & I2S Beep Speaker │
│ - Push Button & Optional Sensors │
└─────────────────────────────────────────────────┘
モードは3種類ある。
| モード | 使用モデル | 特徴 |
|---|---|---|
| 🟢 ローカルモード(デフォルト) | Gemma 4(LM Studio経由) | ゼロコスト・オフライン・完全プライベート。初回トークンまで約200ms |
| 🟡 クラウドモード | Gemini Flash / Gemini Live | 高度な推論・複雑な問題解決。初回トークンまで約800ms |
| ⚡ Auto-Hybridモード | 自動ルーティング | 通常はGemma 4。「explain」「compare」「write code」などのキーワードを検出すると自動でGemini Flashに昇格 |
Auto-Hybridモードでクラウドへエスカレートされると、ロボットのインジケーターが🟢 緑から🟡 金色に一時的に切り替わり、どちらのモデルが応答しているか一目でわかる設計になっている。
ハードウェア構成:LEGOとPirate Audio
ロボットの筐体は3DプリンターではなくLEGOブロックとTechnicのリンク機構で作られている。誰でもカスタマイズ・修理できるという思想からだ。主要な部品構成は以下のとおり。
- メインコントローラー: Raspberry Pi + 32GB MicroSD
- ディスプレイ&オーディオ: Pimoroni Pirate Audio Speaker(1.3インチ 240×240 ST7789 IPS LCD + I2S 1Wスピーカー + 4つのタクタイルボタン)
- 音声入力: コンパクトUSBミニマイク
- モーション: 首の動きとしっぽの振りを制御するモーター群
4つのハードウェアボタンにはそれぞれ役割がある。ボタンXのダブルクリックでローカル/クラウド切り替え、ボタンYの2秒長押しでビープ音量のサイクル変更といった具合だ。
ロボットの「生命感」を支える5状態FSM
LCDの目の表情、8bitビープ音、モーターの動きを連動させるために、5状態の有限状態機械(Finite State Machine) が実装されている。
┌──────────┐ button ┌───────────┐ release ┌──────────┐ stream ┌──────────┐
│ Sleeping │──────────> │ Idle │────────────>│Listening │─────────> │ Thinking │
└──────────┘ (wake) └───────────┘ (trigger) └──────────┘ (send) └──────────┘
^ │
│ ┌──────────┐ │
└──────────────│ Speaking │<───────────────────────┘
(done) └──────────┘ (tokens arrive)
各状態の動作は細かく設計されている。Listening状態では目が大きく見開き、首が15度ユーザー側に傾く。Thinking状態では瞳が回転し、首がゆっくり左右に揺れる。Speaking状態ではトークンが届くたびに8bitのタイプライター音が鳴り、テキスト長に合わせてしっぽが振られる。
3分間無操作または部屋が暗くなると自動でSleepingに入るなど、アイドル管理も実装済みだ。
ソースコードと今後の展開
ソースコードはGitHubリポジトリで公開されており、ハードウェア構成から各モードの実装まで一通り参照できる。記事執筆時点ではボイスチャット機能は実装途中とのことで、今後のアップデートが予告されている。ローカルLLMとクラウドLLMのハイブリッド構成をRaspberry Piで実現する実装例として、自作AIデバイスを検討しているエンジニアにとって参考になる内容だ。
詳細はHow we built a desktop companion robot with Gemma 4 and Raspberry Piを参照していただきたい。
