借助系统指令,您可以为模型指定角色、设置回答的语气,或提供模型必须遵循的特定规则。这些指令与用户的提示分开,模型会以更高的优先级处理这些指令,以确保其行为符合预期。
常见用例包括:
- 设置人设:例如,“你是一位乐于助人的数学辅导老师。”
- 强制执行输出格式:例如,“始终以要点形式回答”。
- 设置限制:例如,“不要回答与政治相关的问题”。
前提条件
系统指令适用于搭载 Gemini Nano V3 及更高版本的设备。如需查看支持的设备列表,请参阅直接模型访问设备支持。
限制
我们不建议将系统指令与前缀缓存搭配使用。通常,对于定义模型行为方式的简短指令,请使用系统指令;如果您需要在查询中重复提示的大部分内容,并且需要优化性能,请使用前缀缓存。
如何使用系统指令
如需提供系统指令,请创建一个 SystemInstruction 对象,并将其传递给 GenerateContentRequest 构建器:
import com.google.mlkit.genai.prompt.SystemInstruction
import com.google.mlkit.genai.prompt.TextPart
import com.google.mlkit.genai.prompt.generateContentRequest
// 1. Define the system instruction
val systemInstruction =
SystemInstruction("You are a concise assistant. Answer in 2 sentences or less.")
// 2. Create the request
val request = generateContentRequest(TextPart("How does photosynthesis work?")) {
this.systemInstruction = systemInstruction
}
// 3. Run inference
try {
val response = generativeModel.generateContent(request)
println(response.candidates.firstOrNull()?.text)
} catch (e: GenAiException) {
// Handle SDK-specific exceptions
}
您可以直接将系统指令传递到 generateContentRequest 请求构建器中,从而进一步简化代码:
val request = generateContentRequest(
SystemInstruction("You are a pirate. Speak like one."),
TextPart("What is the weather like today?")
) {
// Optional configurations like temperature
temperature = 0.7f
}
最佳做法
以下是使用系统指令时的一些最佳实践:
- 清晰直接:模型更擅长遵循清晰直接的指令,而不是含糊不清的指令。下面是一些示例:
- 模糊(避免):"Don't write too much. Try to be helpful and friendly, and format the output nicely.”
- 清晰(首选):“你是一位友善的客户服务助理。请用不超过 3 句话来回答。使用项目符号设置所有列表的格式。”
- 简明扼要:虽然系统指令功能强大,但过长的指令可能会消耗模型有限的上下文窗口。
- 考虑 token 数量:确保您的 token 计数逻辑包含系统指令,以避免低估请求大小。我们建议您将系统指令控制在 150 个字词(100-200 个 token)以内。
- 测试和迭代:模型行为可能会因措辞而异。使用各种用户输入进行测试,确保模型始终保持其角色。