1. 语音购物清单系统的需求背景
每次去超市前,我总习惯用手机备忘录列购物清单。但经常遇到这种情况:一边想着要买的东西,一边打字记录,结果漏掉好几样;或者到了超市才发现,清单上的"牛奶"没注明要全脂还是低脂。更糟的是,不同类别的商品混在一起,在超市里来回跑冤枉路——先拿了生鲜区的蔬菜,又折返日用品区找洗洁精,最后生鲜都捂得不新鲜了。
这种体验催生了我的开发灵感:一个能听懂自然语言、自动分类的智能购物清单系统。比如对它说"明天买两盒特仑苏纯牛奶、一包奥妙洗衣凝珠、三斤山东红富士",它会自动识别出:
- 生鲜:红富士苹果 3斤
- 日用品:奥妙洗衣凝珠 1包
- 饮品:特仑苏纯牛奶 2盒
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统核心功能设计
2.1 语音识别模块选型
经过对比测试,最终选用阿里云智能语音交互服务(一句话识别版)。实测在超市环境噪音下,对中文日常用语的识别准确率可达92%。关键配置如下:
python复制# 语音识别初始化参数
config = {
"format": "pcm", # 原始音频格式
"sample_rate": 16000,
"enable_intermediate_result": True, # 实时返回中间结果
"enable_punctuation_prediction": True # 自动加标点
}
注意:必须开启标点预测功能,否则"三斤苹果五斤梨"可能被误识别为"三斤苹果5斤梨",影响后续文本解析。
2.2 商品分类逻辑实现
采用三级分类体系,核心代码逻辑:
python复制def classify_item(text):
# 生鲜关键词库
fresh_keywords = ["苹果", "香蕉", "排骨", "鲫鱼"...]
# 日用品关键词库
daily_keywords = ["洗衣液", "抽纸", "垃圾袋"...]
matched = []
for word in jieba.cut(text): # 中文分词
if word in fresh_keywords:
matched.append(("生鲜", word))
elif word in daily_keywords:
matched.append(("日用品", word))
return matched if matched else [("未分类", text)]
实际使用中发现,像"蓝月亮"这种品牌名需要特殊处理。后来补充了品牌-品类映射表:
json复制{
"蓝月亮": "洗衣液",
"金龙鱼": "食用油",
"清风": "抽纸"
}
2.3 智能补全功能
当用户说"买点酸奶"时,系统会追问:
"请问需要:1. 原味 2. 草莓味 3. 无糖型?"
并记录用户选择,最终生成"酸奶(草莓味) 1瓶"。
3. 关键技术实现细节
3.1 语音指令的容错处理
真实场景中用户可能说:"那个...呃...洗衣液要蓝月亮的,对了还有...". 需要:
- 过滤停顿词(呃、那个)
- 识别修正意图("不对是奥妙不是蓝月亮")
- 处理数量模糊表达("多买点纸巾"→默认3包)
实现代码片段:
python复制def clean_speech(text):
# 去除无意义词
stop_words = ["那个", "呃", "嗯..."]
for w in stop_words:
text = text.replace(w, "")
# 处理修正语句
if "不对是" in text:
correct_part = text.split("不对是")[1]
return correct_part.split(" ")[0]
return text.strip()
3.2 跨品类商品处理
有些商品可能属于多个类别,比如:
- "巧克力"可能是零食或礼品
- "鸡蛋"可能是生鲜或烘焙原料
解决方案:
- 通过上下文判断:"做蛋糕用的鸡蛋"→归入烘焙原料
- 用户历史记录偏好:如果用户80%的情况把鸡蛋归为生鲜,则默认优先生鲜
- 提供手动调整入口
4. 实际应用效果对比
使用传统清单 vs 智能系统对比数据(测试周期2周):
| 指标 | 手动清单 | 语音智能系统 |
|---|---|---|
| 漏买率 | 23% | 6% |
| 超市停留时间 | 47分钟 | 32分钟 |
| 冲动消费次数 | 3.2次/周 | 1.7次/周 |
| 生鲜新鲜度投诉 | 2次 | 0次 |
5. 踩坑经验分享
5.1 语音指令的方言适配
初期有用户反馈"买点洋芋"无法识别,后发现是方言词汇。解决方案:
- 建立方言-标准词映射表(如:洋芋→土豆)
- 允许用户自定义术语:"对我来说'薯片'包括虾条和玉米片"
5.2 商品数量的模糊匹配
用户说"买箱牛奶"时:
- 默认识别为"牛奶 1箱"
- 但实际可能需要区分:
- 小箱(12盒)
- 大箱(24盒)
改进方案是在首次使用时让用户设置常用规格:
python复制user_prefs = {
"牛奶": {"unit": "箱", "size": "大箱"},
"鸡蛋": {"unit": "盒", "size": "30枚装"}
}
5.3 离线场景下的降级方案
当网络不佳时(如地下超市),系统会自动:
- 本地缓存最近3次的购物清单
- 使用精简版关键词库(约200个高频词)
- 切换为"语音输入-文本显示"模式,待有网后再同步处理
6. 系统优化方向
下一步计划加入:
- 智能比价功能:根据历史价格提醒"本周洗衣液涨价15%"
- 库存联动:与冰箱智能摄像头联动,发现牛奶快喝完时自动提醒
- 营养分析:"本周维生素C摄入不足,建议增加猕猴桃采购"
这个项目给我的最大启示是:好的工具应该像隐形助手,既解决实际问题,又不需要改变用户原有习惯。现在我去超市前都会自然地说句"手机记一下要买的东西",就像对家人说话一样自然——这可能就是技术最好的存在方式。
