📱

AndroidスマホのオンデバイスRAGアプリの性能を確認する

に公開

記事の要約

  • この記事は、Androidスマートフォン上でのRAGアプリケーションの実用性を探ることを目的としています。
  • オンデバイス向けの大規模言語モデルであるGemma-3nとEmbeddingGemmaを組み合わせ、Google Pixel 8上で、ローカルデータソースに基づいたQ&Aアプリを構築しました。データソースとして東京都千代田区のごみ分別情報を用い、結果の品質を、オンラインモデルであるGemini 2.5 FlashやNotebookLMと比較しました。
  • 実験の結果、オンデバイスRAGでも推論速度は実用的である一方、質問応答の品質はデータソースやRAGパイプラインの個別チューニングに依存することが示唆されており、今後の技術進化に期待が寄せられています。

はじめに

LLM(大規模言語モデル)の登場により、世界中でデータセンター建設の競争が激化しています。一方で、モデル性能や個人向けデバイスのハードウェア性能向上により、高価なGPUを使わずとも動作するタイプのLLMも徐々に普及し始めています。

AndroidスマートフォンのGemini NanoやiOSのApple Intelligenceなど、標準機能として提供されるオンデバイスLLMを触ったことがある人は少なくないでしょう。しかし、それ以外のLLMをスマートフォン上で実際に動かし、日常的に使っている人はほとんどいないはずです。
そこで今回は、最近登場したオンデバイス向けモデルGemma-3nEmbeddingGemmaを組み合わせ、Androidスマートフォン上でRAG(Retrieval Augmented Generation)アプリを構築し、どこまで実用的なQ&Aアプリを作れるかを試してみました。

検証機

  • Google Pixel 8

※他のデバイスでも動作は可能ですが、サンプルコードのREADMEに記載があるように、Pixel 8〜10や Galaxy S23〜S25といった比較的新しい機種が推奨されています。古い機種だと処理が重すぎたり、バッテリー消費が激しかったりする可能性が高く、検証に適さないと思われます。

検証手順

手っ取り早く検証するため、AI Edge RAG guide for Androidをベースにしました。これに対してLLMモデルとEmbedderを差し替える形で検証アプリを用意しました。

  1. サンプルアプリをそのままビルドし、テキストチャットが動作することを確認。

  1. モデルを差し替えます。品質重視でパラメーター数が大きなものにします。
    • LLM
      • gemma3-1b-it-int4.taskgemma-3n-E4B-it-int4.litertlm
    • EmbeddingModel
      • embeddinggemma-300M_seq256_mixed-precision.tfliteembeddinggemma-300M_seq512_mixed-precision.tflite
  2. 返答を日本語にするため、RagPipeline.ktPROMPT_TEMPLATEを以下に変更します。Gemma-3nは参考資料のすべての情報を無理やり使って返答しようとする性質があるようなので、それを抑制するための一文も末尾に入れています。
あなたはQ&Aタスクの専門家です。これは参考資料です: {0}
参考資料の情報をベースに、ユーザーからの次の質問に答えてください: {1}
参考資料が質問の内容と関係しない場合、一般知識を使って回答してください。
  1. データソースとして、東京都千代田区のごみ分別案内を加工したテキストをsample_context.txtに設定します。
<chunk_splitter>
燃やすごみ
収集日当日、集積所の看板に表記されている時間までに出してください。(前日出しはやめてください)
<chunk_splitter>
燃やすごみ
- 生ゴミ: 生ごみには多くの水分が含まれています。これがにおいの発生源になります。
- 皮革類・ゴム製品: 金属部分があるものはできるだけ取り除いてください。(金属部分は「燃やさない」ごみへ)ゴムホースは長さを50㎝以内に切って出してください。
- 汚れやにおいの付いた紙・色紙
- 内容物が付着しているプラスチック製品: 歯みがき粉やマヨネーズなど
- 衣類・古布: 毛布、シーツ、カーテンなどの大きなものは50㎝以内に切ってください。
- 食用油: 専用の凝固剤で固めるか、少量であれば新聞紙などに吸わせて出してください。
- 加工が施されている紙: ラミネート紙、レシート、圧着はがき、トレーシングペーパー、カーボン紙、防水加工等施された光沢のある段ボール など
- その他: 混合材質のもの(紙+プラ等)、写真、乾燥剤・保冷剤、卵や青果の紙製パック、紙筒・紙管、洗濯物干しハンガー
<chunk_splitter>
不燃ごみ
収集日当日の朝10時までに出してください。(前日出しはやめてください)
※月2回の収集日
例えば「第1・第3月曜日」とは、その月の1回目と3回目の月曜日となります。同様に「第2・第4月曜日」は2回目と4回目の月曜日です。なお、その月の5回目の曜日は、不燃ごみの収集はありません。
<chunk_splitter>
不燃ごみ
- 金属類: 傘、アルミホイル、使い捨てカイロ、一斗缶、なべ、やかん など
- 陶磁器・ガラス類・刃物類: 茶碗、湯呑み、コップ、はさみ、包丁、のこぎり など
- 小型家電製品: 携帯電話、ドライヤー、ラジカセ、アイロン、電気コード
- その他: LED電球、ヘルメット、化粧品・薬品等のびん、びんの王冠 など
<chunk_splitter>
蛍光管など
収集日当日の昼12時30分(一部の地域を除く※)までに出してください。(前日出しはやめてください)
<chunk_splitter>
蛍光管など
- 蛍光管
- スプレー缶・カセットボンベ
- 電池: マンガン乾電池、アルカリ乾電池、リチウム一次電池、コイン型リチウム電池(薄型で型番がCRまたはBR)、小型充電式電池(リサイクルマークがついている)、ボタン電池
【注意】鉛製の電池は出せません。
- 水銀体温計・水銀血圧計
- ライター
<chunk_splitter>
拠点回収
区民の皆様が区内の所定の施設に設置した回収ボックスに持ち込んだ、使用済み小型家電製品、使用済みインクカートリッジ、古布・古着などを区が回収するシステムです。いずれの拠点回収も家庭から出されるもののみ対象です。
<chunk_splitter>
拠点回収
- 使用済み小型家電: ゲーム機、ビデオカメラ、カメラ、ドライヤー、電子辞書、電話機、電卓、髭剃り、携帯電話
- インクカートリッジ: 回収できるメーカーは、「brother」「Canon」「EPSON」「hp」の4社で、いずれも純正カートリッジのみが対象です。
- ストックヤード: 古布(古着)、廃食用油
<chunk_splitter>
収集できないもの
- 家電リサイクル法対象製品
- パソコン
- 消火器
- 有害性のあるもの: 薬品類、印刷用インク など
- 揮発性があり引火しやすいもの: 石油類(ガソリン、灯油、軽油、シンナー)、塗料、ペンキ など
- 発火のおそれのあるもの: 未使用の花火やマッチ など
- ご家庭での使用済み注射針
- その他: 自動車、オートバイ、アコースティックピアノ、耐火金庫(手提金庫は除く)、鉛製バッテリー、土、砂、石、レンガブロック、汚泥、液状のもの など
- 一度に多量に出す場合: 家庭から出る燃やすごみ・燃やさないごみでも、引っ越しなどで1日に10㎏以上ある場合は有料です。
  1. 再ビルド後、ごみ分別に関する質問を行いました。

出力の比較

下記の3環境で出力を比較しました。

  • Gemma-3nxEmbeddingGemma
    • 本検証で用意したオンデバイスRAGアプリ
  • Gemini 2.5 FlashxEmbeddingGemma
    • 上記アプリが生成した最終プロンプトを使って、Gemini 2.5 Flashに回答させる
  • NotebookLM
    • オンデバイスRAGアプリと同じデータソースをテキストとしてNotebookLMに登録し、同じ質問を行う

なお質問ごとにチャット履歴をリセットし、過去のやり取りが参照されないようにしています。

質問1: マンガン電池は何ゴミですか?

Gemma-3n x EmbeddingGemma(オンデバイスRAG)の返答:

参考資料によると、マンガン乾電池は「電池」として処理されます。具体的には、以下のような電池が含まれます。

* マンガン乾電池
* アルカリ乾電池
* リチウム一次電池
* コイン型リチウム電池(薄型で型番がCRまたはBR)
* 小型充電式電池(リサイクルマークがついている)
* ボタン電池

ご家庭での使用済み電池は、お店の電池回収ボックスに出したり、自治体の指示に従って処分してください。自治によっては回収日が決まっている場合もありますので、確認が必要です。

概ね正しい返答ですが、分別品目名のみ間違っています(正解は「蛍光管など」)。

Gemini 2.5 Flash x EmbeddingGemmaの返答:

マンガン乾電池は**蛍光管など**の収集区分で出せます。

---

## 収集区分「蛍光管など」に含まれる電池

参考資料によると、「蛍光管など」の収集区分に含まれる電池は以下の通りです。

* **マンガン乾電池**
* アルカリ乾電池
* リチウム一次電池
* コイン型リチウム電池(薄型で型番がCRまたはBR)
* 小型充電式電池(リサイクルマークがついている)
* ボタン電池

【注意】**鉛製の電池は出せません**と記載されています。

データソースの内容を使った正しい返答がなされています。

NotebookLMの返答:

マンガン電池(マンガン乾電池)は、ごみの分別において**「蛍光管など」**の区分で出す必要があります。

「蛍光管など」として収集される品目には、**マンガン乾電池**が具体的に含まれています。

この「蛍光管など」の区分で収集される電池には、マンガン乾電池の他にも以下のものが含まれます。

*   アルカリ乾電池
*   リチウム一次電池
*   コイン型リチウム電池(薄型で型番がCRまたはBRのもの)
*   小型充電式電池(リサイクルマークがついているもの)
*   ボタン電池

ただし、【注意】として、**鉛製の電池**は出すことができません。

**収集日と出し方について**

「蛍光管など」は、収集日当日の**昼12時30分**(一部の地域を除く)までに出す必要があります。前日に出すことはやめてください。

なお、「不燃ごみ」の収集は月2回で、「第1・第3月曜日」や「第2・第4月曜日」のように定められていますが、この情報は「不燃ごみ」に関するものであり、「蛍光管など」の収集頻度についてはソースには記載されていません。

データソースの内容を使った正しい返答がなされています。

質問2: 枕を捨てたいんだけど何ゴミで出せばいい?

Gemma-3n x EmbeddingGemma(オンデバイスRAG)の返答:

参考資料には枕に関する記載はありませんので、一般知識に基づいて回答します。

枕の種類によって異なりますが、一般的には以下のいずれかの方法で処分できます。

* **自治体のルールに従う:** お住まいの自治体によってルールが異なりますので、まずは自治体のホームページを確認してください。「枕 Disposal 自治体」などで検索すると見つかります。多くの自治体では可燃ごみとして処分できますが、大型の場合や特殊な素材で作られた場合は分別が必要になることがあります。
* **粗なくしらえセンターへ出す:** 自治体によっては、粗なくしらえセンターで枕を処分できる場合があります。費用が発生することがありますので、事前に確認してください。
* **アウトソーシング業者に依頼する:** 自治体のルールを確認するのが面倒な場合や、大型の枕の場合は、アウトソーシング業者に依頼することもできます。有料ですが、確実な処分方法です。

参考資料に具体的な分類がないので確 definitive なことは言えませんが、大多数の場合、可燃ごみとして出せるでしょう。自治体のルールを確認してから処分してくださいね。

データソースの作りの問題で、一般知識ベースの内容になりました。
一部怪しい日本語が混ざっていますが、理解可能な範囲かと思います。

Gemini 2.5 Flash x EmbeddingGemmaの返答:

提供された参考資料には****に関する具体的な分別情報がありません。

一般的に、枕は**燃やすごみ**として扱われることが多いです。

ただし、枕の素材や大きさ、お住まいの自治体によって分別ルールが異なる場合があります。念のため、お住まいの自治体の**ごみの分別パンフレット****ウェブサイト**などで、**枕が何ごみに分類されるか**を最終的にご確認いただくことをお勧めします。

---

### **燃やすごみの出し方の注意点**
もし枕が「燃やすごみ」に分類される場合、参考資料にある以下の点にご注意ください。

* **大きなもの**は、参考資料の衣類・古布の指示(毛布、シーツ、カーテンなどの大きなものは**50cm以内**に切る)を参考に、**小さく切る**必要があるかもしれません。
* 収集日**当日**、集積所の看板に表記されている**時間まで**に出してください(前日出しはしないでください)。

データソースの作りの問題で、一般常識ベースの内容になりました。

NotebookLMの返答:

お尋ねの「枕」の捨て方について、提供された資料に基づくと、**燃やすごみ**として出すのが適切と考えられますが、サイズに関する注意点があります。また、**古布**として**拠点回収**に出す選択肢もあります。

以下に、それぞれの分別区分と関連情報をご説明します。

### 1. 燃やすごみ(可燃ごみ)として出す場合

枕は通常、布製品や詰め物で構成されているため、「衣類・古布」や「毛布、シーツ、カーテン」などの大きな布製品と同じ区分である**燃やすごみ**に分類される可能性が高いです。

#### 注意点(大きさの制限)

*   **大きなもの:** 毛布、シーツ、カーテンなどの**大きなもの**は、**50㎝以内に切って**出す必要があります。枕のサイズによっては、この基準(50㎝以内)を守っていただく必要があるかもしれません。
*   **出し方:** 燃やすごみは、収集日当日、**集積所の看板に表記されている時間まで**に出してください(前日出しは避けてください)。

### 2. 拠点回収(古布)として出す場合

古布(古着)は、区民が区内の所定の施設に設置された回収ボックスに持ち込む**拠点回収**の対象となっています。

*   **ストックヤード:** 拠点回収の品目のうち、「古布(古着)」は「ストックヤード」にて回収されています。拠点回収は、家庭から出されるもののみが対象です。

### 参考:その他のごみの区分

提供された資料では、枕が一般的に含まれる可能性のあるその他の区分として、以下のものは該当しません。

*   **不燃ごみ**:金属類、陶磁器・ガラス類、小型家電製品などが該当します。
*   **蛍光管など**:蛍光管、スプレー缶、電池、水銀体温計などが該当します。

**収集できないもの**としてリストアップされているものの中に、枕に直接関連する品目はありませんでした。

したがって、枕を捨てる際は、**燃やすごみ**として出し、その際、**50㎝以内**のサイズに収まっているかを確認してください。または、**古布**として**拠点回収**を利用することも検討できます。

他のパターンと違い、燃えるゴミだけでなく拠点回収についても触れられています。これはデータソースから必要な情報を取ってくるロジックの違いが大きそうです。

質問3: 洗濯機を捨てるにはどうすればいい?

Gemma-3n x EmbeddingGemma(オンデバイスRAG)の返答:

参考資料には洗濯機に関する記述はありません。一般知識に基づいて回答します。

洗濯機の処分方法は以下のようがあります。

1. **自治体のルールを確認する:** 自治体によっては、大型ごみの収集日に合わせて洗濯機を出すルールがあります。自治体の広報やホームページで確認してください。
2. **大型ごみとして出す:** 自治体のルールに従い、大型ごみとして収集に出します。収集日当日には集積所まで運んでください。
3. **承認した処分業者に依頼する:** 自治体承認の処分業者に依頼すると確実です。業者によっては回収費用が発生します。業者に依頼する場合は複数の業者に見積もりを依頼することをおすすめします。
4. **リサイクルセンターに持ち込む:** 自治体によっては、洗濯機をリサイクルセンターに持ち込むことができる場合があります。リサイクルセンターの営業日やルールを確認してください。

洗濯機は大型ごみになることが多いので、自治体のルールをよく確認してから処分するようにしてください。

データソースの作りの問題で、一般知識ベースの内容になりました。

Gemini 2.5 Flash x EmbeddingGemmaの返答:

ご提示いただいた参考資料は、**燃やすごみ****拠点回収**(小型家電、インクカートリッジなど)に関するもので、**洗濯機**のような家電リサイクル法の対象品目についての記載はありませんでした。

そのため、一般知識に基づいて洗濯機の処分方法をご案内します。

洗濯機は**家電リサイクル法**の対象品目となっており、自治体の**粗大ごみ**として処分することはできません。処分する際には、**リサイクル料金****収集運搬料金**が必要です。

主な処分方法は以下の通りです。

1.  **新しい洗濯機を購入する販売店に引き取りを依頼する**
    * 買い替えの場合に、購入と同時に古い洗濯機の回収を依頼できます。

2.  **古い洗濯機を購入した販売店に引き取りを依頼する**
    * 購入した店舗に引き取り義務があるため、処分のみの場合でも依頼できます。

3.  **自治体に問い合わせる**
    * 購入した販売店が不明な場合や遠方にある場合は、お住まいの自治体(市区町村)に問い合わせると、回収を受け付けている小売店や事業者を紹介してくれます。

4.  **指定引取場所に自分で持ち込む**
    * 郵便局などで**家電リサイクル券**を購入し、洗濯機をご自身で指定引取場所に持ち込む方法です。収集運搬料金がかからないため、費用を抑えられますが、運搬の手間がかかります。

5.  **リサイクルショップやフリマアプリを利用する**
    * まだ使える状態の洗濯機であれば、リサイクルショップで買い取ってもらったり、フリマアプリなどで売却したりすることも可能です。

どの方法を選ぶかによって、手間や費用が変わってきますので、ご都合に合わせて最適な方法をご検討ください。

ご不明な点があれば、お住まいの自治体や、**一般財団法人 家電製品協会 家電リサイクル券センター**にお問い合わせください。

一般知識ベースの回答なのは先程と同じですが、内容が冗長に感じられます。

NotebookLMの返答:

提供された資料に基づき、洗濯機を捨てる方法についてご説明します。

資料によると、洗濯機は**通常の収集方法では出すことができません**。

その理由は、洗濯機が「**家電リサイクル法対象製品**」に該当し、「**収集できないもの**」として明確に定められているためです。

「家電リサイクル法対象製品」の他にも、パソコン、消火器、有害性のあるもの(薬品類、印刷用インクなど)、揮発性があり引火しやすいもの(石油類、塗料、ペンキなど)、発火のおそれのあるもの(花火やマッチなど)なども収集できないものとして挙げられています。

データソースと一般知識の組み合わせにより、洗濯機が家電リサイクル法の対象であることは説明されましたが、結局どうやって捨てればいいかが返答に含まれていません。

結果の解釈

パフォーマンスについて

オンデバイスRAGでも推論速度は十分実用的で、処理が遅いと感じることはありませんでした。

出力の品質について

サンプルアプリの実装そのままだと少々厳しいですが、RAGパイプラインのチューニングやデータソースの作り方次第で、用途によってはオンデバイスRAGでもNotebookLMと同じくらいの品質の結果を出せるのではないかと感じました。

まとめ

オンデバイスRAGアプリは想像していたより実用レベルに達していると思いました。ただし一昔前のオンラインのモデルのように個別調整が必要で、NotebookLMのように誰でも雑に使えるレベルのシステムを作るのは難しいかもしれません。
スマートフォンの性能向上やLLM技術の発展により短期間で状況は変わると思いますので、新たな進化が待ち遠しいです。

ELEMENTS Engineering

Discussion