React NativeでのオンデバイスAI構築から得られる実践的な教訓

✍️ OpenClawRadar📅 公開日: February 25, 2026🔗 Source
React NativeでのオンデバイスAI構築から得られる実践的な教訓
Ad

LLMによるテキスト生成

React NativeでGGUFモデルを実行するにはllama.rnを使用します。これはllama.cppをラップし、Android(JNI)とiOS(Metal)向けのネイティブバインディングを提供します。コールバックによるトークンのストリーミングは良好に機能します。

メモリ管理が重要です:7B Q4モデルは実行時に約5.5GBのRAMを必要とします(ファイルサイズ×1.5でKVキャッシュと活性化のため)。デバイスRAMの60%を厳格な予算として使用し、50%で警告、60%でブロックしてOSによるアプリ強制終了を防ぎます。

GPUアクセラレーションはAndroidではOpenCL(Adreno GPU)、iOSではMetalを使用します。AndroidではGPUレイヤー>0でFlash Attentionがクラッシュするため、コードでこれを強制します。ほとんどのデバイスでは、GPUよりもKVキャッシュの量子化(f16/q8_0/q4_0)が効果的です。テストではf16からq4_0にすることで推論速度が約3倍になりました。

Stable Diffusionによる画像生成

これはプラットフォーム固有であり、両方をカバーする単一ライブラリはありません。

  • Android: MNN(Alibabaのフレームワーク、CPU、すべてのARM64デバイスで動作)とQNN(Qualcomm AI Engine、NPUアクセラレーション、Snapdragon 8 Gen 1+のみ)を使用します。QNNは3倍高速ですが、最近のQualcommチップでのみ動作します。自動フォールバック付きのランタイム検出を実装します。
  • iOS: Appleのml-stable-diffusionパイプラインをCore MLとNeural Engineアクセラレーションで使用します。パレット化モデル(約1GB、6ビット)はメモリ制約のあるデバイスに最適です。フル精度(約4GB、fp16)はANEで高速ですが、余裕が必要です。

実世界のベンチマーク:512×512、20ステップで、Snapdragon NPUで5〜10秒、フラッグシップCPUで15秒、iOS ANEで8〜15秒。ユーザーがアプリがフリーズしたと誤解しないよう、N回のノイズ除去ステップごとにリアルタイムプレビューを表示します。

Ad

Whisperによる音声文字起こし

whisper.rnはwhisper.cppをラップし、統合が簡単です。複数のモデルサイズ(Tiny/Base/Small)を提供し、ユーザーが速度と精度のトレードオフを選択できるようにします。リアルタイムの部分文字起こし(話しながら単語が表示される)でネイティブな感覚を実現します。

ネイティブコードでオーディオをバッファリングし、文字起こし後にクリアします。プライバシーが重要な場合はオーディオファイルをディスクに書き込まないでください。

マルチモーダルモデルによるビジョン

ビジョンモデルには2つのファイルが必要です:メインのGGUFとmmproj(マルチモーダルプロジェクター)コンパニオンです。これを透過的に処理します:ビジョンモデルを自動検出し、mmprojを自動ダウンロードし、単一ユニットとして追跡し、リンクが切れた場合はランタイムでモデルディレクトリを検索します。2Bビジョンモデルでは、両方のファイルを並列ダウンロードすることでダウンロード時間をほぼ半減できます。

500MのSmolVLMはモバイル向けの最適な選択肢で、フラッグシップデバイスで約7秒、文書読み取りやシーン記述に十分な能力があります。

オンデバイスエージェントループのためのツール呼び出し

関数呼び出しをサポートするモデルは、自動ループを通じてツール(ウェブ検索、電卓、日付/時刻、デバイス情報)を使用できます:LLMが生成、ツール呼び出しを解析、実行、結果をコンテキストに戻して注入、LLMが継続。無限ループを防ぐため、最大3回の反復、合計5回の呼び出しに制限します。

2つの解析パスをサポートします:大規模モデルはllama.rnを通じて構造化されたJSONツール呼び出しをネイティブに出力し、小規模モデルは<tool_call>のようなXMLを出力します。モデル読み込み時にjinjaチャットテンプレートを検査してツールサポートを検出します。モデルがツールをサポートしない場合、幻覚を避けるためにシステムプロンプトにツール定義を注入しません。電卓は再帰下降パーサーを使用します—eval()は絶対に使用しません。

意図分類

アプリがテキストと画像生成の両方を行う場合、入力分析に基づいてユーザーの意図を決定する必要があります。

📖 全文を読む: r/LocalLLaMA

Ad

👀 See Also

Claude CodeをOllama経由でルーティングし、費用を約90%削減
Guides

Claude CodeをOllama経由でルーティングし、費用を約90%削減

Claude DesktopとOllama対応のClaude Codeを連携:戦略的な作業はAnthropicに任せ、負荷の高いタスクはGemma、Qwen、DeepSeekなどの無料オープンソースモデルで実行。セットアップの約98%を自動化するコピペ用プロンプト付き。

OpenClawRadar
マルチエージェントアーキテクチャ:AIシステムにおけるシングルエージェントの落とし穴を回避する
Guides

マルチエージェントアーキテクチャ:AIシステムにおけるシングルエージェントの落とし穴を回避する

Redditの投稿では、複数のタスクに単一のエージェントを使用するという一般的なアーキテクチャ上の誤りが指摘されており、これが絶え間ない監視を必要とする脆弱なシステムにつながっています。提案されている解決策は、各エージェントが狭く特定の役割を持つオーケストレーターとスペシャリストのモデルです。

OpenClawRadar
Claude Code Workflow Visualは、メモリ階層とスキルシステムを説明するものです。
Guides

Claude Code Workflow Visualは、メモリ階層とスキルシステムを説明するものです。

Redditユーザーが、Claude Codeのワークフロー構造を示すビジュアル図を共有しました。この図には、CLAUDE.mdファイルによるメモリ階層化や、.claude/skills/ディレクトリで定義された再利用可能なスキルが含まれています。ワークフローループでは、Planモードの使用、機能の記述、自動承認、頻繁なコミットが提案されています。

OpenClawRadar
ChatGPTの履歴をOpenClawメモリシステムにエクスポート
Guides

ChatGPTの履歴をOpenClawメモリシステムにエクスポート

Redditユーザーが、ai-chat-md-exportツールを使用してChatGPTの数年にわたる会話履歴をエクスポートし、OpenClawのメモリシステムにインポートするプロセスを共有しています。これにより、ローカルのAIエージェントが過去のコンテキストにアクセスできるようになります。

OpenClawRadar