关于 ml-kit-genai-prompt-api
为 Android 开发者提供 ML Kit GenAI Prompt API 集成与优化步骤,涵盖提示词、缓存、生命周期和结构化输出。
主要功能
- 01Prompt API 集成前置条件
- 02提示词优化指导
- 03长提示词前缀缓存
- 04模型可用性与实例释放
- 05结构化输出实现指导
适用场景
- 01将 Prompt API 接入 Android 应用
- 02优化超过 200 词的提示词
- 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.mdprefix-caching.mdprompt-design.mdprompt-optimization.mdstructured-output.mdsystem-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. 结构化输出
实现或重构提示词以使用结构化输出时,请遵循以下规则:
-
检查 API 是否可用: 使用前,通过
isStructuredOutputFeatureAvailable()确认设备支持结构化输出功能。完整说明请参阅结构化输出 API 指南。 -
返回类型: 函数签名应返回
@Generable类型的对象,而不是String或 JSON 字符串。例如:
fun parseEmail(email: String): String { ... }应重构为:
fun parseEmail(email: String): ParsedEmail? { ... } -
示例:
这是重构前的示例代码:
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