Evaluate and optimize voice interaction for your app
Design 入门 22m

评估和优化 App 的语音交互

Evaluate and optimize voice interaction for your app

2020年6月25日

在 Apple 官方观看视频

一句话判断

这场 Session 是纯设计方法论——如何定义语音交互的成功指标、如何做用户测试、如何量化”体验好不好”。对写代码没什么帮助,但对做语音功能的产品设计很有参考价值。

这场 Session 讲了什么

Session 提供了一个评估语音交互质量的系统化方法论。从定义用户任务开始,到设计测试场景,再到收集和分析数据,最后迭代优化。

核心框架是”任务完成率 + 效率 + 满意度”三个维度。任务完成率:用户说出指令后是否成功达成了目标。效率:从说出指令到完成任务需要多少步骤和时间。满意度:用户对整个体验的主观评价。

Session 强调了一个常被忽视的指标——“静默失败率”:Siri 没有理解用户的指令但没有给出明确的错误反馈。这种情况比”理解了但找不到内容”更糟糕,因为用户不知道是自己的表达有问题还是系统出 bug 了。

值得深挖的点

A/B 测试语音交互的特殊性。 UI 的 A/B 测试很简单——两个版本各放给 50% 用户。语音交互的 A/B 测试更复杂,因为同一个用户可能用不同的方式表达同一个意图。Session 建议用”意图级别的 A/B 测试”而非”界面级别的 A/B 测试”。

错误分类比错误数量更重要。 100 次失败中如果有 80 次是”找不到内容”,那是内容问题;如果 80 次是”理解错误”,那是语音识别或意图匹配的问题。不同的错误类型指向完全不同的优化方向。

代码片段

// 记录语音交互的关键指标
struct VoiceInteractionMetrics {
    let intentType: String          // 意图类型
    let userUtterance: String       // 用户说了什么
    let recognitionResult: String   // Siri 识别的结果
    let isSuccessful: Bool          // 是否成功
    let responseTime: TimeInterval  // 响应时间
    let errorType: VoiceErrorType?  // 错误类型(如果失败)
}

enum VoiceErrorType {
    case recognitionFailed     // 语音识别错误
    case intentNotUnderstood   // 意图理解错误
    case contentNotFound       // 找不到内容
    case playbackFailed        // 播放失败
    case timeout               // 超时
}

// 收集指标数据
func logInteractionMetrics(_ metrics: VoiceInteractionMetrics) {
    // 发送到你的分析后端
    Analytics.track("voice_interaction", properties: [
        "intent_type": metrics.intentType,
        "is_successful": metrics.isSuccessful,
        "response_time_ms": Int(metrics.responseTime * 1000),
        "error_type": metrics.errorType?.rawValue ?? "none"
    ])
}
// 在 Intent Handler 中埋点
class PlayMediaIntentHandler: NSObject, INPlayMediaIntentHandling {
    func handle(intent: INPlayMediaIntent, completion: @escaping (INPlayMediaIntentResponse) -> Void) {
        let startTime = Date()
        
        performPlayback(with: intent) { response in
            let metrics = VoiceInteractionMetrics(
                intentType: "PlayMedia",
                userUtterance: intent.mediaSearch?.mediaName ?? "",
                recognitionResult: intent.mediaSearch?.mediaName ?? "",
                isSuccessful: response.code == .success,
                responseTime: Date().timeIntervalSince(startTime),
                errorType: response.code == .success ? nil : .playbackFailed
            )
            
            logInteractionMetrics(metrics)
            completion(response)
        }
    }
}

最佳实践

  • 定义清晰的成功标准。 “用户说了播放XX,5秒内开始播放且内容正确”比”没有崩溃”是有意义的指标。
  • 按意图类型分别统计成功率。 不同意图的复杂度不同,混在一起看成功率没有意义。
  • 记录用户的原始表达。 语音交互的优化需要知道用户实际说了什么,与系统识别的结果对比。
  • 定期做人工评估。 自动化指标只能发现量的问题,质的评估需要人工听录音并判断理解是否正确。

还有什么值得关注

  • 苹果建议的语音交互基准:任务完成率 > 90%,平均响应时间 < 3 秒
  • “静默失败”是最需要优先修复的问题类型
  • 用户的语音表达会随时间变化,需要持续监控
  • Session 提供了评估问卷模板,可以用来收集满意度数据
WWDC 2020