mcpField
M
ml-kit-genai-prompt-api

ml-kit-genai-prompt-api

github.com/android開発10.0k495 回インストール2 日前に更新
リポジトリ

ml-kit-genai-prompt-api について

Android 開発者向けに、ML Kit GenAI Prompt API の導入と最適化手順を案内するスキルです。プロンプト、キャッシュ、モデルのライフサイクル、構造化出力を扱います。

主な機能

  1. 01Prompt API 導入の前提条件
  2. 02プロンプト最適化のガイダンス
  3. 03長いプロンプトのプレフィックスキャッシュ
  4. 04モデルの利用可否確認とインスタンス解放
  5. 05構造化出力の実装ガイダンス

活用シーン

  1. 01Android アプリへの Prompt API 導入
  2. 02200 語を超えるプロンプトの最適化
  3. 03テキスト解析の型付き出力への変更

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/android/skills --skill ml-kit-genai-prompt-api

インストール後、Claude Code で/ml-kit-genai-prompt-apiを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
get-started.md
prefix-caching.md
prompt-design.md
prompt-optimization.md
structured-output.md
system-instructions.md

詳細

このスキルでは、Android アプリに ML Kit GenAI Prompt API を統合し、最適化するための手順を説明します。

前提条件

  • Android API レベルは 26 以上である必要があります。minSdk が 26 未満の場合は、26 に更新してください。
  • ML Kit GenAI Prompt API の依存関係(com.google.mlkit:genai-prompt)を、バージョン 1.0.0-beta4 以上でアプリレベルの build.gradle ファイルに追加してください。
  • com.google.mlkit:genai-schema-compiler の依存関係を使用していて、KSP プラグインのバージョンが 2.3.6 未満の場合は、2.3.6 に更新してください。

詳細な手順

1. プロンプトの最適化

ML Kit Prompt API で使用するプロンプトを最適化するには、 プロンプト最適化ガイドに従ってください。

2. プレフィックスキャッシュの最適化

プロンプトが 200 語を超える場合は、プレフィックスキャッシュ APIを実装してください。

3. ライフサイクルとベストプラクティス
  • 最初の推論を呼び出す前に、モデルのダウンロードが完了し、利用可能になっている必要があります。生成モデルの実装ガイドに従い、推論を行う前にモデルの FeatureStatus が AVAILABLE であることを確認してください。

  • Activity、Fragment、または ViewModel が破棄されるときに、close() を呼び出して ML Kit のインスタンスを解放してください。例:

    // Instantiating model in activity, fragment, or ViewModel
        val generativeModel = Generation.getClient()
    
    // When activity, fragment, or ViewModel is destroyed
        generativeModel.close()
    

4. 構造化出力

構造化出力を使用するようプロンプトを実装またはリファクタリングする場合は、 次のルールに従ってください。

  1. API の利用可否を確認する: 使用する前に isStructuredOutputFeatureAvailable() で、デバイスで構造化出力機能を利用できることを確認してください。詳しい手順については、構造化出力 API ガイドを参照してください。

  2. 戻り値の型: 関数のシグネチャでは、String や JSON 文字列ではなく、@Generable 型のオブジェクトを返してください。

    例:

    fun parseEmail(email: String): String {
        ... 
    }
    

    次のようにリファクタリングします。

    fun parseEmail(email: String): ParsedEmail? {
        ...
    }
    
  3. 例:

    リファクタリング前のコード例:

    suspend fun parseEmail(email: String): String {
        val parseEmailPrompt = "Parse this email and return the sender, title, and short summary of the email less than 10 words: "
    
        val parsedEmail = generativeModel.generateContent(parseEmailPrompt + email)
    
        return parsedEmail.candidates[0].text
    }
    

    構造化出力 API を使用した後のコード例:

    @Generable
    data class ParsedEmail(
        @Guide(description = "Sender of the email")
        var sender: String = "",
    
        @Guide(description = "Title of the email")
        var title: String = "",
    
        @Guide(description = "Summary of the email less than 10 words")
        var summary: String = ""
    )
    
    suspend fun parseEmail(email: String): ParsedEmail? {
        val parseEmailPrompt =
            "Parse this email: $email"
    
        val baseRequest = GenerateContentRequest.Builder(TextPart(parseEmailPrompt)).build()
        val typedRequest = generateTypedContentRequest(baseRequest, ParsedEmail::class)
        val typedResponse = generativeModel.generateContent(typedRequest)
        return typedResponse.candidates[0].response
    }
    

コメント