把模型放进手机,第一眼看到的是它可以离线回答。真正要设计的是它什么时候不该回答。
先定预算
预算包括模型大小、首 token 时间、持续发热和内存。没有预算的端侧方案只是把服务器问题搬到了用户口袋里。
检索仍然有用
小模型更需要准确的上下文。本地笔记、最近的对话和明确的系统指令,通常比再加几十亿参数更有效。
suspend fun answerOnDevice(question: String): String {
val context = retriever.search(question, limit = 4)
return model.generate(
system = "Answer only from the supplied notes.",
user = context.joinToString("n") + "nn" + question
)
}
失败要可见
超时、降级到云端、或者直接告诉用户无法回答,都应该是产品的一部分,而不是异常日志里的一行。
讨论