程序少女心 2026-10-21 16:22:07 发布我一直觉得,语音交互最大的价值并不是让用户少打几个字,而是让用户在不方便操作屏幕的时候,依然能够完成任务。
例如开车前整理行程、做饭时记录购物清单,或者在阅读资料时快速保存一个想法。如果每次都需要打开应用、找到输入框,再慢慢打字,交互成本仍然不低。
HarmonyOS 7 提供了语音相关 AI 能力,包括语音识别、文本转语音以及场景化语音服务。
我想实现的,是一个简单的语音备忘录:用户说出一句话,应用识别文字,再将它保存为待办事项。
第一步:语音识别只是整个流程的开始
假设语音识别服务返回了这样一句话:
“明天下午三点提醒我提交项目报告。”
这时候,应用还不能直接把整句话存成普通备忘录,因为用户的真实意图是创建一条带有时间的提醒。
所以,我会将流程拆成语音转文字、意图解析、参数校验和任务创建几个部分。
interface ReminderDraft {
title: string;
dateTime: string;
}
function validateReminder(
draft: ReminderDraft
): boolean {
if (draft.title.trim().length === 0) {
return false;
}
if (draft.dateTime.trim().length === 0) {
return false;
}
return true;
}
这里的 ReminderDraft 是应用内部的数据结构。语音识别和自然语言解析应该通过项目实际接入的官方能力或服务实现,不能直接把这段代码当成语音 AI 的系统调用。
第二步:不要把日期解析想得太简单
“明天下午三点”看起来很好理解,但对程序来说并不完整。
它需要结合当前日期、时区和用户的提醒规则,才能转换成具体时间。遇到“下周一”“月底前”这样的表达,还需要处理不同的时间语义。
我会让解析模块返回明确的时间字段,而不是只返回一段自然语言。
interface ParsedCommand {
action: 'createReminder';
title: string;
timestamp: number;
}
function createReminderTask(
command: ParsedCommand
): string {
if (command.timestamp <= Date.now()) {
throw new Error('提醒时间必须晚于当前时间');
}
return `已准备创建提醒:${command.title}`;
}
这里仅演示任务校验,尚未真正创建系统提醒。实际项目还需要按照目标设备和 API 版本,接入相应的提醒、通知或任务管理能力。
第三步:语音识别错了怎么办?
这是我认为最值得花时间打磨的地方。
如果用户说的是“提交项目报告”,识别结果却变成了“提交项目抱抱”,应用不能直接把错误内容当成确定的任务。
比较合理的设计是,在识别结果存在歧义时先展示文本,让用户修改。涉及创建提醒、发送消息或者提交订单时,也应该让用户确认最终执行的内容。
此外,语音录制必须有清楚的开始、结束和取消状态。应用不应该让用户搞不清楚麦克风是否还在工作。
我的结论是,语音 AI 不只是把声音变成文字。只有当识别结果能够可靠地转换成业务参数,并且在执行前处理好歧义和权限问题,语音交互才真正有用。
相关推荐
28
0
云上未完待续
0
0
程序员小初音
0
0
程序少女心
我还没有写个人简介......
帖子
提问
粉丝
工信部:开源鸿蒙操作系统全面覆盖手机、电脑、汽车等终端设备
2026-07-20 15:57:48 发布鸿蒙系统大推送:6.1.0.125已来袭,API 24也转正了!
2026-05-28 11:00:13 发布


京公网安备:11010502051901号