跳到正文
GitHub·· 6 天前AI 评分34

nezumi-ai:Android 上完全离线的本地 AI 聊天应用 v2.4.0

mouse0329/nezumi-ai

AI 导读

nezumi-ai 发布 v2.4.0,这是一款在 Android 上完全离线运行的本地 AI 聊天应用,支持 Gemma 4 2B/4B 与 Gemma 3n 端侧推理,也可切换 Claude、Gemini、OpenAI 兼容 API、LM Studio、Ollama 等云端引擎。

正文

ローカルAIチャットアプリ — Android上で完全にオフラインで動作するAIチャットアプリケーション
オンデバイス推論を軸に、必要に応じてクラウド推論エンジンも選べるハイブリッド構成です。

現在のバージョン: v2.4.0(リリースノート)


概要

nezumi-aiは、インターネット接続なしでも動作するプライベート性の高いAIアシスタントです。以下の特徴があります:

  • オフライン優先: オンデバイス推論ではサーバーへのデータ送信なし
  • マルチモデル対応: Gemma 4 2B (軽量) / 4B (高性能) + Gemma 3n (レガシー) の選択が可能
  • クラウド推論エンジン: Claude / Gemini / OpenAI互換API / LM Studio / Ollama をモデルとして追加し、オンデバイス推論と切り替えて利用可能
  • GPU/CPU/NPU(対応機種のみ)切り替え: 端末のハードウェア最適化による高速化
  • マルチモーダル入力: カメラ・ギャラリーからの画像、動画、音声、テキストファイルをAIに読み込ませられる
  • 画像生成機能: 独自開発の画像生成エンジン「Nezumi Kiln」による高速画像生成(SD1.5, img2img対応。SDXLも試験的に動作)
  • ドキュメント変換: Markdown ⇔ Word (.docx) / Excel (.xlsx) / PDF の相互変換
  • チャット履歴管理: Room DBで会話履歴を永続化
  • 高度なツールコール: AIが画像生成、アラーム設定、Web検索、ページ取得、メモリ保存などのツールを自律的に呼び出し
  • MCP クライアント対応: Streamable HTTP / SSE の Model Context Protocol サーバーを登録し、プリセットごとに紐付けて外部ツールを呼び出せる
  • 多言語UI: 日本語 / 英語のUI切り替えに対応
  • VOICEVOX 音声読み上げ: 端末内で日本語音声を合成。標準話者は「ずんだもん / ノーマル」。音声モデルはモデルダウンロード機構で進捗表示付きに取得できます(利用規約とクレジット表記)

必要環境

項目 最小値 推奨値
Android Version 12 (API 30) 14+ (API 34+)
RAM 6GB 8GB以上
ストレージ 4GB 8GB以上
GPU/NPU 任意 Adreno / Mali 推奨、NPUはSnapdragon搭載機で追加対応

クラウド推論エンジン(Claude / Gemini / OpenAI互換API / LM Studio / Ollama)を使う場合は、上記に加えてインターネット接続とAPIキー(またはローカルサーバーのURL)が必要です。


インストール

ビルド環境

  • JDK: 21
  • Android SDK / NDK: 30.0.14904198(app/build.gradle.ktsのndkVersion参照)
  • Gradle: 9.3.1(Gradle Wrapper同梱、手動インストール不要)
  • Kotlin: 2.3.20(Gradleプラグイン経由で自動解決)

ビルド手順

# 1. リポジトリをクローン
git clone https://github.com/mouse0329/nezumi-ai.git
cd nezumi-ai

# 2. llama.cpp サブモジュールを初期化
git submodule update --init --recursive app/src/main/vendor/llama.cpp

# 3. local.properties を設定
# (SDK, NDK, 署名情報を設定 - 詳細は下記参照)

# 4. Gradleでビルド
./gradlew assembleDebug      # Debug APK
./gradlew assembleRelease    # Release APK (署名設定必須)

既にクローン済みでllama.cppだけ後から取得したい場合

git submodule update --init --recursive app/src/main/vendor/llama.cpp

を忘れると app/src/main/vendor/llama.cpp が空のままとなり、llama_bridge ターゲットのビルドがスキップされます(CMake側で警告を出しつつ他のターゲットは継続します)。

画像生成(MNN)を開発する場合

MNN本体は大きいため、通常のアプリビルドでは取得されません。Nezumi KilnやMNNのネイティブビルドを行う場合にだけ初期化してください。

git submodule update --init --recursive third_party/MNN

local.properties の設定

sdk.dir=/path/to/Android/sdk
ndk.dir=/path/to/Android/ndk

# リリース署名設定(オプション)
STORE_FILE=/path/to/keystore.jks
STORE_PASSWORD=your_keystore_password
KEY_ALIAS=key_alias
KEY_PASSWORD=your_key_password

主な機能

1. チャット機能

  • リアルタイムストリーミング表示
  • テキスト・画像・動画・音声・テキストファイルの複合入力
  • セッション分岐対応
  • インラインツールコールカード表示(ツール呼び出しの経過・結果を吹き出し内に表示)

2. モデル設定

  • Gemma 4 2B: 軽量・高速(低スペック端末推奨)
  • Gemma 4 4B: 高精度・高性能(ハイエンド端末推奨)
  • Gemma 3n E2B / E4B: レガシーモデル(互換性維持)※廃止予定
  • クラウドモデル: Claude / Gemini / OpenAI互換API / LM Studio / Ollama を登録・切り替え可能

3. 画像生成機能

  • Nezumi Kiln: MNNバックエンドによる自社開発の高速画像生成エンジン(SD1.5, img2img対応。SDXLも試験的に動作)
  • 自動バックエンド選択: GPU→CPU の自動フォールバック(OpenCL / CPU を利用)
  • AI自動生成: AIがツールとして画像生成を呼び出し(ユーザー承認制、生成前にモデル・ステップ数の確認ダイアログを表示)

4. 推論バックエンド切り替え(LLM)

  • NPU: Snapdragon QNNによる超高速・低消費電力推論(LiteRT-LM)
  • GPU: 高速推論(互換性は端末依存)
  • CPU: 互換性重視(速度は低い)
  • クラウド: Claude / Gemini / OpenAI互換API / LM Studio / Ollama への切り替え
  • 自動フォールバック: NPU/GPU失敗時にCPUに自動切り替え

5. ツールコール

  • 現在時刻・バッテリー・アラーム・タイマー・フラッシュライト
  • 画像生成、メモリ検索・保存
  • ウェブ検索、ページ取得(HTML→Markdown変換)
  • ドキュメント変換(Markdown ⇔ Word/Excel/PDF)
  • MCPサーバー経由の外部ツール呼び出し

6. チャット履歴

  • 会話履歴の永続化(Room DB)
  • セッション削除・編集機能
  • セッション削除時のアタッチメント自動クリーンアップ

システム構成と技術詳細

nezumi-aiは、高度なローカル推論を実現するために最適化された多層アーキテクチャを採用しています。(拡張し続けたら勝手にできた)

アーキテクチャ概要

nezumi-ai アーキテクチャ図

v2.3.0時点の構成(クラウド推論エンジン、Nezumi Kiln、MCPクライアント、Safety & Media Layerを含む)。

主要な推論エンジン

本アプリは、モデルの特性や利用環境に合わせて以下のエンジンを使い分けるハイブリッド構成となっています。

  1. GGUFエンジン (llama.cpp)
    • 用途: 汎用的なGGUF形式モデル(Gemma 4 2B/4Bなど)の実行。
    • 特徴: JNI経由でllama.cppを直接制御。適応的GPU層数、サンプラーキャッシングなどの高度なネイティブ最適化が施されています。
  2. LiteRT-LMエンジン (Google LiteRT)
    • 用途: Gemma 3nなどのTFLite形式モデルの実行。
    • 特徴: Googleのlitertlmライブラリを活用。特にSnapdragon搭載端末において、QualcommのAIスタックを通じたNPUアクセラレーションをサポートし、低消費電力かつ高速なレスポンスを実現します。
  3. クラウド推論エンジン
    • 用途: Claude / Gemini / OpenAI互換API / LM Studio / Ollama への接続。
    • 特徴: オンデバイスでは扱いきれない大規模モデルや、既存のセルフホスト環境をそのまま利用できます。
  4. Nezumi Kiln(画像生成エンジン)

セーフティ & メディア管理

プライバシーと安全性を両立させるための専用レイヤーを備えています。

  • コンテンツフィルタリング: PromptFilterによる不適切なプロンプトの遮断。
  • 画像セーフティチェック: ImageSafetyCheckerによる生成画像のNSFW判定。不適切な場合は自動的にブロックまたはぼかし処理(Blur)を適用します。
  • セキュアなメディア保存: MessageMediaStoreとFileProviderを組み合わせ、生成されたメディアをアプリ専用領域に安全に永続化します。
  • プライベートIPバリデーション: MCP・Web取得など外部への HTTP リクエスト時に、意図しない内部ネットワークへのアクセスを防止します。

設定の永続化と管理

PreferencesHelperを通じて、モデルパラメータ(Steps, CFG, Backend等)やUI設定をSharedPreferencesに即座に反映・永続化します。これにより、ユーザーごとに最適化された推論環境を維持します。


開発ストーリー:技術的こだわり

nezumi-aiは、単なるチャットアプリではなく、Androidデバイスの限界に挑むプロジェクトとして開発されています。

  • ネイティブライブラリの最適化: Android 15 以降を見据え、すべてのネイティブライブラリを最新の実行環境に合わせて最適化。VOICEVOX ランタイムを含め、全モジュールが最新の Android 端末で動作します。
  • NPUの真価を引き出す: モバイルGPUだけでなく、NPU(Neural Processing Unit)を積極的に活用することで、スマートフォンの発熱を抑えつつ、デスクトップ級のAI体験を提供することを目指しています。
  • プライバシー・ファースト: オンデバイス推論を選ぶ限り、すべての推論、フィルタリング、保存プロセスをローカルで完結させることで、ユーザーのデータがデバイスの外に出ることは一切ありません。クラウド推論エンジンを使う場合のみ、選択したプロバイダーにデータが送信されます。
  • OpenCL ノイズ問題との格闘: 画像生成エンジン Nezumi Kiln で、GPU (OpenCL) 実行時に「中央だけ色がまとまり、周辺がランダムノイズ化した画像」が生成される問題に長期間取り組みました。チューニングヒューリスティック・演算精度 (FP16 オーバーフロー)・セッション解放タイミング・キャッシュ混在など複数の容疑者を一つずつ切り分けた結果、最終的な真因は MNN の OpenCL バックエンド (low memory モード) が、int8 量子化された重みを int4 として解釈してしまい、読み込みビット幅が半分にズレてテンソルの後半が未初期化メモリで計算されていた ことでした。数値的にはもっともらしい値が出るため NaN 検知をすり抜ける性悪なバグで、多段の診断コメントが mnn-sd-engine/src/mnn_session.cpp に記録されています。この切り分けの過程で得られた知見 (VAE の FP16 オーバーフロー対策、解像度別カーネルキャッシュ、クロスアテンションの NaN 検知など) はすべて現行コードに還元されています。

チームメッセージ

「プライバシーを守りながら、あなたの創造性を解き放つ。nezumi-aiは、手のひらで未来を動かすAIアシスタントです!」


開発状況

  • 現在のバージョン: v2.3.3(リリースノート一覧)
  • 主要コンポーネント:
    • UI/UX: Jetpack Compose
    • データベース: Room
    • 推論エンジン: llama.cpp (GGUF), LiteRT-LM (TFLite), クラウド (Claude / Gemini / OpenAI互換 / LM Studio / Ollama), Nezumi Kiln (画像生成, MNN)
    • LLMモデル: Gemma 4 (2B/4B), Gemma 3n (E2B/E4B) + 各種クラウドモデル
    • 画像生成: Stable Diffusion 1.5 (Nezumi Kiln)、SDXLは試験対応

VOICEVOX音声読み上げについて

VOICEVOX 音声読み上げは 有効 です。ランタイムの互換性問題は解決済みのため、アプリ内に注意書きは表示していません。

  • 標準話者: ずんだもん / ノーマル(0.vvm / styleId 3)
  • 音声モデルの取得: LLM モデルと同じ ModelDownloadWorker 経由で取得します。 進捗バー・通知・バックグラウンド継続・中止に対応しています。
  • OpenJTalk 辞書: 音声モデルの取得と同じフローで、未取得のときだけ続けてダウンロードします。

クレジット表記: 生成した音声を公開・配布する場合、VOICEVOX を利用した旨と話者ごとのクレジット表記が必要です。 アプリの「設定 › モデル › 音声読み上げ」および「設定 › ライセンス」から確認できます。 本アプリのカタログには、クレジット表記のみで商用・非商用ともに利用可能な音声ライブラリのみを収録しています。 詳細は docs/VOICEVOX_TERMS.md を参照してください。

詳細な開発計画については docs/ARCHITECTURE.md を参照してください。


依存ライブラリ

Core Frameworks

  • Jetpack Compose: Modern UI toolkit
  • AndroidX Navigation: アプリ内ナビゲーション
  • Room: ローカルデータベース

AI/ML

  • MediaPipe Tasks: オンデバイスML実行
  • TensorFlow Lite / LiteRT: 軽量推論エンジン
  • llama.cpp (via JNI): LLM推論コア
  • Nezumi Kiln (MNNベース): 画像生成モジュール

ドキュメント処理

  • Apache POI: Word/Excel生成
  • PdfBox-Android: PDF生成

UI Components

  • Halilibo Compose Richtext: Markdown表示
  • Coil: 非同期画像ロード
  • Material3: Compose Material Design

認証・その他

  • AppAuth: OAuth 2.0 フロー
  • Kotlin Coroutines: 非同期処理

詳細ライセンス情報は NOTICE を参照してください。NOTICE は現行の Android アプリ配布構成に合わせて整理しています。


使用方法

初回起動

  1. アプリを起動
  2. モデルを選択(オンデバイス: Gemma 4 2B / 4B 推奨、クラウド: 任意のプロバイダーとAPIキーを設定)
  3. オンデバイスモデルの場合はバックエンド選択(NPU / GPU / CPU)
  4. モデルダウンロード開始(クラウドモデルの場合は不要)

チャット開始

  1. テキストを入力 → 送信
  2. (オプション)画像・動画・音声・ファイルを添付 → 送信
  3. AIの返答をストリーミング表示で確認

設定変更

  • Settings → Model Config
  • バックエンド、モデルサイズ、クラウドプロバイダーを変更
  • 自動フォールバック設定の有効化/無効化
  • Settings → Language: UI言語(日本語 / 英語)を切り替え

パフォーマンス目標

オンデバイス推論(Gemma 4)を対象とした目標値です。クラウド推論エンジン使用時は、選択したプロバイダーおよびネットワーク環境に依存します。

指標 目標値
起動時間 < 3秒
初回推論時間(2B) < 10秒
初回推論時間(4B) < 20秒
ピークメモリ(2B) < 3GB
ピークメモリ(4B) < 5GB

※ 初回推論時間は GGUF 重みのメモリ読み込み (mmap / ページイン) 時間を含みます。 2B モデル (約2GB) の場合、実際のメモリ帯域速度で読み込むだけでも約10秒程度を要するため、 以前掲げていた「2B < 3秒」は物理的に達成不可能な目標でした。4B は容量が約2倍のため さらに時間がかかります。なお2回目以降は OS のページキャッシュが効くため、初回より 大幅に短縮されます。


ライセンス

このプロジェクトは デュアルライセンス で公開されています。以下のいずれかを選択して使用できます:

詳細は以下を参照してください:

  • LICENSE.md - プロジェクトライセンス(LGPL v3 / 商用別ライセンス)
  • LGPL_LICENSE - LGPL v3 の全文
  • NOTICE - 依存ライブラリ、バンドル済みランタイム、モデル関連のライセンス情報

主要な依存ライブラリ

ライブラリ ライセンス
AndroidX / Jetpack Compose Apache 2.0
Kotlin / Coroutines Apache 2.0
MediaPipe Tasks (GenAI) Apache 2.0
TensorFlow Lite / LiteRT Apache 2.0
Apache POI Apache 2.0
Halilibo Compose Richtext Apache 2.0
Coil (Image Loading) Apache 2.0
AppAuth for Android Apache 2.0

関連ドキュメント


貢献について

バグ報告、機能リクエスト、プルリクエストを歓迎します。
コントリビュートの際は、コードの品質とパフォーマンスを維持してください。

来源:GitHub · github.com