1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gemma 4 Android AICore入門 — ML Kit Prompt APIでオンデバイスAIをKotlinで実装する

1
Last updated at Posted at 2026-05-05

Gemma 4 Android AICore — オンデバイスAIのコンセプト図

はじめに

2026年4月、Google は Gemma 4 を Android AICore Developer Preview として公開しました。この仕組みを使うと、クラウドへの通信なしに端末上で LLM を動かし、アプリに AI 機能を組み込めます。

ML Kit Prompt API を通じて Kotlin から数行で推論を呼び出せるのが特徴です。本記事では公開情報・公式ドキュメントをもとに、セットアップから実装パターンまでを解説します。

この記事で学べること

  • Gemma 4 AICore Developer Preview の概要とモデルスペック
  • ML Kit Prompt API を使ったオンデバイス推論の実装方法
  • E2B/E4B モデルの使い分け方針
  • ストリーミングレスポンスの実装パターン

対象読者

  • Android アプリに AI 機能を追加したい開発者
  • プライバシー重視のオンデバイス推論に興味がある方
  • Gemini API の代替をオフライン環境向けに探している方

前提環境

  • Android Studio(最新安定版推奨)
  • minSdk 26 以上
  • Kotlin 1.9.x 以上
  • テスト端末: Pixel 7 以上(または AICore 対応の Samsung Galaxy 端末)

TL;DR

  • Gemma 4 が Android AICore の Developer Preview に登場。ML Kit 経由でオンデバイス推論が可能
  • モデルは E2B(高速・低遅延)と E4B(高精度)の 2 種類
  • 前世代比で最大 4 倍高速・バッテリー消費 60% 削減
  • 依存: com.google.mlkit:genai-prompt:1.0.0-beta2、minSdk 26
  • 対応端末: Pixel 7+、AICore 対応の Samsung Galaxy 端末(それ以外は CPU フォールバック)

Gemma 4 AICore とは

クラウドAI vs オンデバイスAI アーキテクチャ比較

AICore は Google が Android に組み込んだ AI 推論エンジンです。Gemini Nano のオンデバイス実行基盤として設計されており、2026 年 4 月から Gemma 4 の Developer Preview が利用できるようになりました。

AICore を使うことで次の利点があります:

特徴 詳細
プライバシー データが端末の外に出ない
オフライン動作 ネットワーク接続不要
低レイテンシ クラウド往復なしで高速応答
コスト API 課金が発生しない

モデルスペック

Gemma 4 AICore では 2 つのサイズが提供されています。

モデル 用途 相対速度
Gemma 4 E2B リアルタイム補完・高速応答 E4B の 3 倍高速
Gemma 4 E4B 複雑な推論・要約・意図分類 標準

どちらも 140 以上の言語をサポートし、テキスト・画像・音声のマルチモーダル入力に対応しています(Developer Preview 時点での実装範囲は ML Kit ドキュメントを参照)。

対応デバイス

デバイス 実行方式
Pixel 7 以上 AICore(GPU/NPU 加速)
AICore 対応の Samsung Galaxy 端末 AICore(GPU/NPU 加速)
その他の Android デバイス CPU フォールバック

AI 加速器が利用できない端末でも動作しますが、レスポンス速度は遅くなります。


セットアップ

1. 依存関係の追加

build.gradle.kts(アプリモジュール)に以下を追加します。

dependencies {
    implementation("com.google.mlkit:genai-prompt:1.0.0-beta2")
}

2. AndroidManifest.xml の設定

インターネット権限を追加します(モデルのダウンロードに必要)。

<uses-permission android:name="android.permission.INTERNET" />

3. minSdk の確認

build.gradle.kts(アプリモジュール)で minSdk が 26 以上であることを確認します。

android {
    defaultConfig {
        minSdk = 26
        // ...
    }
}

ML Kit Prompt API の実装

ML Kit Prompt API — 4ステップの推論フロー

機能可用性の確認

推論を呼び出す前に、端末が Gemma 4 AICore に対応しているかどうかを確認します。非対応端末でそのまま呼び出すとエラーになるため、この確認は必須です。

import com.google.mlkit.genai.prompt.FeatureStatus
import com.google.mlkit.genai.prompt.Generation

class OnDeviceAiHelper {

    fun isOnDeviceAiAvailable(): Boolean {
        return try {
            val status = Generation.getClient().checkStatus()
            status == FeatureStatus.AVAILABLE
        } catch (e: Exception) {
            false
        }
    }
}

FeatureStatus.AVAILABLE が返った場合のみ推論を実行します。それ以外(DOWNLOADINGDOWNLOADABLEUNAVAILABLE 等)の場合はユーザーに状況を伝えるか、クラウド API へのフォールバックを検討します。

基本的な推論(generateContent)

import com.google.mlkit.genai.prompt.Generation

private val generativeModel = Generation.getClient()

private suspend fun executePrompt(prompt: String): Result<String> {
    return try {
        val response = generativeModel.generateContent(prompt)
        val text = response.candidates.firstOrNull()?.text.orEmpty()
        Result.success(text)
    } catch (e: Exception) {
        Result.failure(e)
    }
}

ユースケース実装例

テキスト要約の実装例です。

suspend fun summarizeText(content: String): Result<String> {
    return executePrompt("""
        以下のテキストを箇条書き3〜5個で要約してください。
        本文のみ返してください。
        
        テキスト:
        $content
    """.trimIndent())
}

タイトル提案の実装例です。

suspend fun suggestTitle(content: String): Result<String> {
    return executePrompt("""
        以下の文章に適した短いタイトルを1つ提案してください。
        タイトルのみ返してください。
        
        文章:
        $content
    """.trimIndent())
}

ストリーミングレスポンス

長い出力をリアルタイムでユーザーに表示したい場合は generateContentStream を使います。

suspend fun summarizeStreaming(
    content: String,
    onPartialResult: (String) -> Unit
): Result<String> {
    return try {
        val prompt = """
            以下のテキストを要約してください:
            $content
        """.trimIndent()

        val fullResponse = StringBuilder()

        generativeModel.generateContentStream(prompt).collect { chunk ->
            val newText = chunk.candidates.firstOrNull()?.text.orEmpty()
            fullResponse.append(newText)
            onPartialResult(fullResponse.toString())
        }

        Result.success(fullResponse.toString())
    } catch (e: Exception) {
        Result.failure(e)
    }
}

onPartialResult コールバックで UI を更新すると、トークンが生成されるたびに表示が更新されます。


E2B / E4B の使い分け

Generation.getClient() はデフォルトでデバイスに最適なモデルを自動選択します。AICore Developer Preview では GenerateContentRequest のオプションでモデルの優先度(速度重視 / 精度重視)を指定できます。

import com.google.mlkit.genai.prompt.GenerateContentRequest
import com.google.mlkit.genai.prompt.TextPart

// 精度重視(E4B 相当)
val request = generateContentRequest(TextPart(prompt)) {
    temperature = 0.2f  // 低温で安定した出力
}
val response = generativeModel.generateContent(request)

モデルの性能特性は以下の通りです。

モデル 特性 向いているユースケース
E2B 3 倍高速・低遅延 リアルタイム補完、キーボード候補
E4B 高精度・深い推論 テキスト要約、意図分類、翻訳(長文)

注意点

初回推論のウォームアップ

初回の generateContent 呼び出しはモデルのロードに数十秒〜約1分かかる場合があります。アプリ起動時にバックグラウンドでウォームアップリクエストを送ることで、ユーザーが実際に使うタイミングのレイテンシを削減できます。

BUSY エラーへの対応

端末リソースが不足している場合、BUSY エラーが返ることがあります。エクスポネンシャルバックオフでリトライするのが推奨パターンです。

suspend fun executeWithRetry(prompt: String, maxRetries: Int = 3): Result<String> {
    repeat(maxRetries) { attempt ->
        val result = runCatching { generativeModel.generateContent(prompt) }
        if (result.isSuccess) {
            return Result.success(result.getOrThrow().candidates.firstOrNull()?.text.orEmpty())
        }
        kotlinx.coroutines.delay(500L * (attempt + 1))
    }
    return Result.failure(Exception("Max retries exceeded"))
}

プロンプト設計の指針

小規模モデルはプロンプトの形式に敏感です。次の点に注意します。

  • 出力形式を明示する: 「箇条書きで返してください」「タイトルのみ返してください」など
  • 具体的に指示する: 曖昧な指示はハルシネーションのリスクが高まる
  • 出力長を制限する: 長大な出力を求めるとレスポンスが不安定になる場合がある

Developer Preview の制限

2026 年 5 月時点の Developer Preview では以下は未実装です(今後追加予定):

  • Tool calling(関数呼び出し)
  • Structured output(JSON モード)
  • System prompts
  • Thinking mode

本番アプリへの組み込みは GA 後を推奨します。


まとめ

  • Gemma 4 AICore Developer Preview で Android のオンデバイス LLM が現実的な選択肢になった
  • ML Kit Prompt API は com.google.mlkit:genai-prompt:1.0.0-beta2 から利用でき、Kotlin で数行の実装から始められる
  • E2B(高速)と E4B(高精度)の 2 モデルをユースケースに応じて選択
  • 初回ウォームアップと BUSY エラー対策を実装しておくと本番品質に近づく
  • Tool calling・Structured output は今後のアップデートで追加予定

プライバシーを重視したオフライン AI、低コストの端末内推論など、クラウド API を補う用途で活用できます。

参考リンク

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?