クラウドなしで、自分だけのSiriをローカルおよびオンデバイスで構築する
(thehyperplane.substack.com)- LLM APIやクラウドに依存せず、オンデバイスで動作する個人向け音声アシスタントを自分で作る方法
- このアシスタントは自然言語を理解し、個人用の関数呼び出しを実行し、完全にローカルで動作するため、完全なプライバシー保護が可能
- そのために、LLaMA 3.1モデルをLoRA方式でファインチューニングし、Whisperを使って音声をテキストに変換したうえで、それをコマンドとして解釈し、デバイス上で直接実行する
- プロジェクトはデータセット生成 → ファインチューニング → 音声インターフェース接続 → テストとデプロイで構成され、それぞれを扱う5部構成の無料ミニ講座として提供される
- 「オンデバイス実行 = 単純」という誤解に注意を促し、ローカルでもMLOps的な思考と徹底した品質管理が不可欠であることを強調
なぜ今、ローカル音声アシスタントを作るべきなのか?
- ChatGPTとの対話は便利だが、単純な命令までクラウドに送るべきだろうか?
- 自分のデバイスにモデルが直接インストールされていれば、速度、プライバシー、制御権のすべてを確保できる
- とくに医療、法務、社内ツールなど機密性の高い環境で有用
全体アーキテクチャ概要
プロジェクト構成要素
- 音声認識 (Whisper) → テキストに変換
- LLM (LLaMA 3.1) → コマンドを解釈
- 関数実行器 →
lock_screen()のような実際の機能を実行
Part 1: アーキテクチャとMLOpsの考え方
ローカルでもMLOpsが必要な理由
- モデルドリフト、プロンプトの変化、データセットの信頼性、デバッグ用ログ不足といった問題が存在
- 「ローカルだけで十分だ」という考えは危険であり、体系的なアプローチが必要
オンライン開発 vs オフライン実行
- 開発(ファインチューニング、データ生成)はクラウドで実施し、実行はローカルで動作
- この過程を明確に分離し、体系的に管理することがMLOpsの核心
データセット生成 (Dataset Generation Flow)
- 単なるプロンプト収集ではなく、構造化された関数呼び出しパターンと対話型リクエスト構造の設計
- 多様な表現、意図、失敗ケースを網羅する高品質なデータセットを生成
重要ポイント
lock_screen()→ 「画面をロックして」のような多様な自然言語表現を含める- 自動検証エンジンによって、出力が意図した形式かどうかを確認
ファインチューニング (Instruction Tuning for Function Calling)
- 正確なコマンドマッピングのために、小型モデルをSFT方式でファインチューニング
- Unsloth、W&B、GGUF形式の書き出しなど実務向けツールを活用
目標
- LLaMA 3.1 8Bをローカルで動作可能な4bitモデルへ変換
- Raspberry Piまで対象にできる軽量化を目指す
モデル接続と実際の実行
- Whisperで音声入力をテキストへ変換
- ファインチューニング済みLLMがコマンドを解釈
- ローカルAPIの関数実行器(
lock_screen(),get_battery_status()など)と接続
結果
- リアルタイム音声アシスタントとして動作可能
- ネットワーク不要、個人情報流出なし、完全なユーザー制御が可能
オフライン段階におけるリスク管理
- さまざまなデバイス、OSでのテストが必要
- ログ収集システムの構築が必須(opt-in形式で手動提出)
- 正式リリース前にストレステストとユーザーフィードバックで問題を早期発見
今後の計画
- 次回の講座では関数呼び出し用データセット生成の実践を行う
- 自然言語コマンド → API呼び出しマッピングを学習する専用データセットを構造的に構築
- スクレイピング禁止、プロンプトベースのシミュレーションと自動検証データのみを使用
結論
- ローカルAIシステムはシンプルに見えても、安定性と品質にはより高い水準の管理が求められる
- クラウドログやホットフィックスに依存しないため、より高い信頼性と責任感が必要
- そのために、MLOps的な考え方と構造的設計を最初から適用すべき
> 「プライバシー重視、ローカルファーストの本物のAIアシスタントを作る時代が来た」
> 次回は実際のコマンド-関数マッピング用データセット生成の実践を始める。
2件のコメント
3.1は英語以外のユーザーには使いづらく、3.3や4なら韓国語もいけそうですが、オンデバイスで動かすなら英語以外は少なくとも32B以上でないと意味があるレベルにならないことを考えると、まだ厳しそうです…
Hacker Newsのコメント
whisperの小さいモデルをローカルで使った経験は期待外れだった。この程度のユースケースで十分な品質を得られた人がいるのか気になる。自分のマイクが良くなかったのかもしれないlargeモデルを GPU で使っていて、速度も速く本当によく動く。ただし、一度に認識できるのは1言語だけという点には注意が必要で、指定しなければ自動検出になる。小さいモデルはそのぶん性能が足りず、主に英語しか対応していないことが多い。私にとってはlargeが最高の性能を出すが、実用的な速度を出すには GPU ハードウェアが必須だ。faster-whisperやinsanely-fast-whisperと組み合わせても同じollamaで Qwen 0.6B モデルは問題なく動かせたが、それ以外のモデルは遅すぎて実用的なユーザー体験ではなかった