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の使用から得た実践的なプロンプトエンジニアリングの教訓
Guides

Claude Codeの使用から得た実践的なプロンプトエンジニアリングの教訓

プロジェクトマネージャーがClaude Codeの結果を改善した具体的なテクニックを共有:2段階プロンプト、単一目的プロンプト、高度に具体的な役割定義。

OpenClawRadar
構造化されたAIワークフロー:段階ベースのコマンドによる手戻りの削減
Guides

構造化されたAIワークフロー:段階ベースのコマンドによる手戻りの削減

ある開発者が、AIコーディングにおける一般的な問題(コンテキストの喪失、標準の破綻、計画と実行の混同)に対処するために、/pwf-brainstormや/pwf-work-planなどの特定のコマンドを使用したプログラム可能なワークフローを共有しています。このアプローチには、必須のドキュメント更新とマルチルートプロジェクト構造が含まれています。

OpenClawRadar
OpenClawの信頼性問題に対する実用的な修正
Guides

OpenClawの信頼性問題に対する実用的な修正

ある開発者が、日次ログとナレッジグラフを含む3層メモリシステム、活性化スコア管理、ファイルベースのルール強制など、OpenClawセットアップを改善した8つの具体的な手法を共有しています。

OpenClawRadar
OpenClawワークスペース構造と長年ユーザーからの自己改善アプローチ
Guides

OpenClawワークスペース構造と長年ユーザーからの自己改善アプローチ

長年OpenClawを使用しているユーザーが、SOUL.md、AGENTS.md、MEMORY.mdなどの主要なマークダウンファイルを含むワークスペース構造を共有し、エージェントが自身の環境を改善できるようにすることが効果を劇的に高めるという重要な教訓を伝えています。

OpenClawRadar