背景 / 概要
AndroidデバイスのオンデバイスAIである Gemini Nano というのがあります。
Gemini Nano にアクセスしてアプリに組み込むためには、Google AI Edge SDKを利用していましたが、非推奨になっています。
代わりに ML Kit Prompt API が登場しています。
developers.google.com
ML Kit Prompt API はデベロッパーとGemini Nano の間に入り、特定のユースケースに適したAPIを提供してくれます。
Google AI Edge SDKだったときは出力を得るまでに30秒くらいかかっていましたが、ML Kit Prompt API になったらどうなるのか、とても気になります。
今回は GenAI Summarization API (要約)を試していきます。
処理速度計測
計測環境
- 実行デバイス:Pixel 9 (Android 16)
- 設定したオプション
val summarizerOptions = SummarizerOptions.builder(context)
.setInputType(InputType.ARTICLE)
.setOutputType(OutputType.ONE_BULLET)
.setLanguage(Language.JAPANESE)
.build()
物語ぽいテキストの場合
入力:
朝霧の港町では、毎日同じ時刻に鐘が鳴る。誰が鳴らしているのかは知られていない。ただ、音が響くと漁師たちは網を畳み、子どもたちは遊びをやめ、町は一瞬だけ息をそろえる。私はその町に、逃げるように流れ着いた旅人だった。
宿の女将は、古い地図を広げて「鐘の音に逆らって歩くと、失くしたものに会える」と教えてくれた。半信半疑のまま、鐘が鳴る方向とは反対へ足を向ける。霧の中、道は細くなり、やがて灯台へ続く坂に出た。途中、拾われなかった手紙や壊れた羅針盤が、道端に静かに置かれている。誰かが諦めた証のようで、胸が少し痛んだ。
灯台の扉は開いていた。中には、白髪の番人がいて、鐘の綱を握っている。「音は境目を作るために鳴らす」と彼は言う。「向こうとこちら、過去と今。だが、越える勇気は鳴らす者ではなく、歩く者にある」。私は頷き、ポケットから折れた鍵を差し出した。長い間、開けられなかった心の扉の鍵だ。
※ChatGPTで生成したもの
出力:6995ms
* 朝霧の港町で、鐘の音に逆らって歩くと失くしたものに会えるという女将の言葉に従い、灯台へ行き、鍵を受け取り、鐘を鳴らすことで、過去と向き合い、未来への希望を見出す。
スポーツニュースぽいテキストの場合
入力:
週末に行われた各地のスポーツイベントは、シーズンの行方を占う重要な一戦が多く、連日大きな注目を集めた。プロ野球では首位チームが敵地で苦しい試合運びを強いられながらも、終盤の集中力で逆転勝利を収め、改めて総合力の高さを示した。先発投手は立ち上がりに制球を乱したものの、中盤以降は修正し、試合を作った点が評価されている。打線では主軸に加え、下位打線からのチャンス拡大が得点につながり、チーム全体の噛み合いが目立った。
一方、追いかける立場のチームは若手中心の布陣で臨み、積極的な走塁や守備で存在感を発揮したものの、あと一歩及ばなかった。監督は試合後、「結果は悔しいが、内容には手応えがある。経験を積ませながら後半戦につなげたい」と前向きな姿勢を示した。
サッカーJリーグでも上位対決が行われ、終盤に決まったセットプレーからのゴールが勝敗を分けた。選手たちは連戦の疲労を感じさせない運動量を見せ、スタンドを埋めたサポーターを沸かせた。専門家は「これからの時期は戦術だけでなく、選手層とコンディション管理が結果を左右する」と指摘しており、各クラブの総合的なマネジメント力が問われる局面に入っている。
※ChatGPTで生成したもの
出力:6781ms
* プロ野球では首位チームが逆転勝利し、総合力の高さを示した一方、追いかけるチームは若手中心の布陣で健闘した。サッカーJリーグでは上位対決が行われ、セットプレーからのゴールが勝敗を分けた。
Jsonデータの場合
入力:
猫の活動記録
{
"schema_version": "1.0",
"cat": {
"cat_id": "cat-001",
"name": "ミケ",
"sex": "female",
"birthday": "2022-04-15",
"weight_kg": 4.2,
"neutered": true,
"notes": "食べムラあり。朝は食欲が落ちがち。"
},
"household": {
"timezone": "Asia/Tokyo",
"owner": "山田太郎"
},
"day": {
"date": "2026-02-08",
"summary": {
"food_total_kcal_est": 235,
"water_ml_est": 120,
"sleep_total_min": 780,
"play_total_min": 35,
"litter_urine_count": 3,
"litter_stool_count": 1,
"vomit_count": 0
},
"events": [
{
"event_id": "evt-0001",
"timestamp": "2026-02-08T07:15:00+09:00",
"type": "sleep",
"data": { "state": "wake_up" },
"note": "起床。伸びをしてから窓際へ。"
},
{
"event_id": "evt-0002",
"timestamp": "2026-02-08T07:25:00+09:00",
"type": "food",
"data": {
"meal": "breakfast",
"food_name": "ドライフード",
"amount_g": 18,
"kcal_est": 70,
"appetite": "normal"
}
},
{
"event_id": "evt-0003",
"timestamp": "2026-02-08T07:40:00+09:00",
"type": "water",
"data": { "amount_ml_est": 20, "method": "bowl" }
},
{
"event_id": "evt-0004",
"timestamp": "2026-02-08T08:05:00+09:00",
"type": "litter",
"data": { "urine": true, "stool": false, "notes": "量ふつう" }
},
{
"event_id": "evt-0005",
"timestamp": "2026-02-08T10:30:00+09:00",
"type": "play",
"data": { "toy": "猫じゃらし", "duration_min": 15, "intensity": "medium" },
"note": "最後は自分でおもちゃをくわえて持ってきた。"
},
{
"event_id": "evt-0006",
"timestamp": "2026-02-08T12:10:00+09:00",
"type": "sleep",
"data": { "state": "nap_start", "location": "ソファ" }
},
{
"event_id": "evt-0007",
"timestamp": "2026-02-08T15:25:00+09:00",
"type": "sleep",
"data": { "state": "nap_end" }
},
{
"event_id": "evt-0008",
"timestamp": "2026-02-08T18:05:00+09:00",
"type": "food",
"data": {
"meal": "dinner",
"food_name": "ウェットフード",
"amount_g": 65,
"kcal_est": 120,
"appetite": "good"
}
},
{
"event_id": "evt-0009",
"timestamp": "2026-02-08T18:25:00+09:00",
"type": "litter",
"data": { "urine": false, "stool": true, "stool_quality": "normal" }
},
{
"event_id": "evt-0010",
"timestamp": "2026-02-08T21:10:00+09:00",
"type": "health_check",
"data": {
"eyes": "clear",
"nose": "normal",
"coat": "good",
"energy": "normal",
"pain_signs": "none"
},
"note": "ブラッシング嫌がらず。"
}
]
}
}
※ChatGPTで生成したもの
出力:6096ms
* 2026年2月8日のミケの活動記録:起床、食事、トイレ、遊び、昼寝、夕食、トイレ、健康診断など。
プロンプト + Jsonデータの場合
入力:
プロンプト + 猫の活動記録
これは猫の活動記録です。
このデータから、猫の性格を予測してください。
{
"schema_version": "1.0",
"cat": {
"cat_id": "cat-001",
"name": "ミケ",
"sex": "female",
"birthday": "2022-04-15",
"weight_kg": 4.2,
"neutered": true,
"notes": "食べムラあり。朝は食欲が落ちがち。"
},
"household": {
"timezone": "Asia/Tokyo",
"owner": "山田太郎"
},
"day": {
"date": "2026-02-08",
"summary": {
"food_total_kcal_est": 235,
"water_ml_est": 120,
"sleep_total_min": 780,
"play_total_min": 35,
"litter_urine_count": 3,
"litter_stool_count": 1,
"vomit_count": 0
},
"events": [
{
"event_id": "evt-0001",
"timestamp": "2026-02-08T07:15:00+09:00",
"type": "sleep",
"data": { "state": "wake_up" },
"note": "起床。伸びをしてから窓際へ。"
},
{
"event_id": "evt-0002",
"timestamp": "2026-02-08T07:25:00+09:00",
"type": "food",
"data": {
"meal": "breakfast",
"food_name": "ドライフード",
"amount_g": 18,
"kcal_est": 70,
"appetite": "normal"
}
},
{
"event_id": "evt-0003",
"timestamp": "2026-02-08T07:40:00+09:00",
"type": "water",
"data": { "amount_ml_est": 20, "method": "bowl" }
},
{
"event_id": "evt-0004",
"timestamp": "2026-02-08T08:05:00+09:00",
"type": "litter",
"data": { "urine": true, "stool": false, "notes": "量ふつう" }
},
{
"event_id": "evt-0005",
"timestamp": "2026-02-08T10:30:00+09:00",
"type": "play",
"data": { "toy": "猫じゃらし", "duration_min": 15, "intensity": "medium" },
"note": "最後は自分でおもちゃをくわえて持ってきた。"
},
{
"event_id": "evt-0006",
"timestamp": "2026-02-08T12:10:00+09:00",
"type": "sleep",
"data": { "state": "nap_start", "location": "ソファ" }
},
{
"event_id": "evt-0007",
"timestamp": "2026-02-08T15:25:00+09:00",
"type": "sleep",
"data": { "state": "nap_end" }
},
{
"event_id": "evt-0008",
"timestamp": "2026-02-08T18:05:00+09:00",
"type": "food",
"data": {
"meal": "dinner",
"food_name": "ウェットフード",
"amount_g": 65,
"kcal_est": 120,
"appetite": "good"
}
},
{
"event_id": "evt-0009",
"timestamp": "2026-02-08T18:25:00+09:00",
"type": "litter",
"data": { "urine": false, "stool": true, "stool_quality": "normal" }
},
{
"event_id": "evt-0010",
"timestamp": "2026-02-08T21:10:00+09:00",
"type": "health_check",
"data": {
"eyes": "clear",
"nose": "normal",
"coat": "good",
"energy": "normal",
"pain_signs": "none"
},
"note": "ブラッシング嫌がらず。"
}
]
}
}
※ChatGPTで生成したもの
出力:5989ms
* 2026年2月8日、ミケ(メス猫)の活動記録:起床、食事、トイレ、遊び、睡眠など。
わかったこと
- 要約の生成には6~7秒かかる
- 入力に対して出力文字数はかなり減るが、ちゃんと文脈が通ったものになる
- 生成のランダム性は低そう
- 要約のためのAPIなので、指示のテキストは効果がない