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. 01将 Prompt API 接入 Android 应用
  2. 02优化超过 200 词的提示词
  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)添加到应用级 build.gradle 文件中,版本至少为 1.0.0-beta4。
  • 如果使用了 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. 返回类型: 函数签名应返回 @Generable 类型的对象,而不是 String 或 JSON 字符串。

    例如:

    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
    }
    

评论

支持 Markdown