1. 项目背景与核心价值
去年在帮朋友改造餐厅管理系统时,发现传统点餐流程存在几个痛点:服务员需要反复确认顾客需求、特殊口味备注容易遗漏、高峰期下单效率低下。当时就萌生了用大语言模型优化点餐流程的想法,直到遇到Qwen这个开源模型,终于找到了合适的解决方案。
这个基于Qwen的点餐系统本质上是个智能对话式点餐助手,它实现了三个突破:
- 自然语言理解:顾客可以用日常对话方式点餐(比如"要份不辣的酸菜鱼,配碗米饭")
- 多轮交互:系统会主动确认遗漏信息(比如"您需要什么饮品搭配吗?")
- 知识整合:自动关联菜品禁忌(比如提示"宫保鸡丁含花生,您是否有过敏?")
2. 技术架构设计
2.1 模型选型考量
选择Qwen-7B作为核心模型主要基于以下实测对比:
| 模型 | 中文理解 | 响应速度 | 显存占用 | 微调成本 |
|---|---|---|---|---|
| Qwen-7B | ★★★★☆ | 0.8s | 12GB | 低 |
| ChatGLM3 | ★★★★ | 1.2s | 14GB | 中 |
| Llama2-13B | ★★★☆ | 1.5s | 24GB | 高 |
特别说明两点选择理由:
- Qwen对中文菜名和饮食文化的理解明显优于Llama2系列
- 7B参数规模在消费级显卡(如RTX 3090)上可流畅运行,适合餐饮行业硬件预算
2.2 系统组件设计
整套系统采用模块化设计:
mermaid复制graph TD
A[语音输入] --> B(ASR语音转文本)
B --> C{Qwen理解模块}
C --> D[订单结构化]
D --> E[数据库校验]
E --> F[语音反馈]
关键组件实现:
- 语音前端:使用VAD+WebRTC实现实时语音采集,300ms延迟控制
- 对话引擎:基于Qwen设计三层prompt结构:
- 基础指令层(固定系统角色)
- 菜单知识层(动态加载当日菜品)
- 会话记忆层(维护对话上下文)
- 后处理模块:用规则引擎处理特殊需求(如"少放盐"自动触发"清淡版"标记)
3. 核心功能实现细节
3.1 菜单知识注入方案
传统方法是将菜单转为JSON格式直接输入,实测发现当菜品超过50种时,模型会出现记忆混淆。我们的解决方案:
-
分层加载技术:
- 首轮交互只加载菜品大类(热菜/凉菜/主食等)
- 当用户选择"热菜"后,再动态注入具体菜品
-
向量化检索增强:
python复制from sentence_transformers import SentenceTransformer
encoder = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
# 预处理所有菜品描述
dish_embeddings = encoder.encode(menu_descriptions)
# 实时检索相似菜品
def find_similar_dishes(query):
query_embed = encoder.encode(query)
similarities = cosine_similarity([query_embed], dish_embeddings)
return menu_items[similarities.argmax()]
3.2 多轮对话控制
通过有限状态机(FSM)管理对话流程:
python复制class OrderState(Enum):
INIT = 0
MAIN_DISH = 1
SIDE_DISH = 2
CONFIRM = 3
# 状态转移规则示例
if current_state == OrderState.INIT:
if "酸菜鱼" in user_input:
transition_to(OrderState.SIDE_DISH)
ask("需要配米饭或饮料吗?")
实测中发现的黄金法则:
每次交互最多引导两个选择项(比如"要配米饭还是面条?"),超过三个选项时模型容易产生混乱回复
4. 实际部署优化
4.1 性能调优记录
在Intel i7-12700K + RTX 3090环境下的优化过程:
| 优化阶段 | 响应时间 | 显存占用 | 方法描述 |
|---|---|---|---|
| 原始模型 | 2.1s | 14.3GB | 直接加载FP16模型 |
| +量化 | 1.3s | 8.7GB | 使用GPTQ 4bit量化 |
| +缓存 | 0.9s | 9.2GB | 对话历史缓存到Redis |
| +剪枝 | 0.7s | 6.8GB | 移除非必要注意力头 |
4.2 异常处理机制
积累的典型case处理方案:
| 问题现象 | 根因分析 | 解决方案 |
|---|---|---|
| 将"清炒时蔬"听成"青椒" | 方言发音干扰 | 添加音素相似度校验 |
| 重复确认同一问题 | 对话状态丢失 | 增加唯一会话ID绑定 |
| 推荐已售罄菜品 | 库存同步延迟 | 建立数据库长连接+实时通知机制 |
5. 效果评估与迭代
上线三个月后的关键数据:
- 订单转化率提升22%(从58%→80%)
- 平均点餐时间从4分12秒缩短至1分38秒
- 特殊需求遗漏率从15%降至3%
最近正在尝试的功能扩展:
- 跨菜品搭配推荐("您点的水煮鱼适合搭配冰粉解辣")
- 过敏原自动检测(需对接医疗数据库)
- 基于消费历史的个性化推荐
这个项目的关键收获是:大模型落地必须深度结合垂直领域知识。我们整理了完整的菜单描述规范(包括食材、做法、口味等12个维度),这些结构化知识注入比单纯增加训练数据更有效。下一步计划开源经过餐饮领域微调的Qwen-7B-Catering版本。