2026.4.10 AI助手订外卖:原理+代码+面试要点

小编 产品中心 8

北京时间:2026年4月10日 | 目标读者:技术进阶者、学生、面试备考者、开发工程师
定位:技术科普 + 原理讲解 + 代码示例 + 面试要点 | 风格:由浅入深、通俗易懂

一、开篇引入

2026.4.10 AI助手订外卖:原理+代码+面试要点-第1张图片

ai助手订外卖正成为智能生活与对话式AI落地的典型场景——用户只需对手机说“帮我点份宫保鸡丁”,系统就能自动完成选店、下单、支付。许多学习者只会调用现成接口,不懂背后的意图识别、实体抽取与流程编排,面试时被问到“如何设计一个订外卖对话系统”便无从下手。本文将从痛点出发,讲解核心概念、代码示例、底层原理,并附高频面试题,帮你建立完整的知识链路。

本文为「对话式AI实战」系列第一篇,后续将深入多轮对话状态机与微调技巧。

2026.4.10 AI助手订外卖:原理+代码+面试要点-第2张图片

二、痛点切入:为什么需要AI助手订外卖?

传统订外卖流程需要用户手动打开App、、筛选、加购、填写地址、支付,共7~8步。代码上通常用硬编码分支实现:

python
复制
下载
 传统方式:if-else堆砌
def order_food(user_input):
    if "宫保鸡丁" in user_input:
        search("宫保鸡丁")
        if "辣" in user_input:
            filter_spicy()
        if "便宜" in user_input:
            filter_price()
         ... 无穷无尽的规则

缺点

  • 耦合高:业务规则与代码逻辑揉在一起,改一个条件要改多处。

  • 扩展性差:新增“少糖”“加急配送”等需求需大量修改if-else。

  • 维护困难:规则组合爆炸,易遗漏边界情况。

因此需要基于AI的智能助手,用自然语言理解(NLU)和对话管理(DM)替代硬编码规则。

三、核心概念讲解:意图识别(Intent Recognition)

定义:Intent Recognition(意图识别)是判断用户一句话背后“想做什么”的任务。在ai助手订外卖中,意图可以是 order_food(点餐)、track_order(查单)、cancel_order(取消)等。

关键词拆解

  • 意图:用户的目的,而非字面内容。如“帮我整个盖浇饭”意图仍是点餐。

  • 识别:从自然语言中分类,通常转化为多分类问题。

生活化类比:你去餐厅对服务员说“来份炒饭”,服务员立刻知道你是“点菜”而不是“结账”或“投诉”——这就是意图识别。

作用与价值:将无限的自由文本映射到有限的业务动作,是对话系统入口的“交通指挥员”。

四、关联概念讲解:实体抽取(Entity Extraction)

定义:Entity Extraction(实体抽取)是从用户话术中提取关键信息片段,如菜品名、数量、口味、地址等。

与意图识别的关系

  • 意图识别决定“做什么”(Action)。

  • 实体抽取决定“对谁做、怎么做”(Parameter)。二者共同构成自然语言理解(NLU)的核心。

对比差异

维度意图识别实体抽取
输出一个类别标签多个键值对
示例order_food{"dish":"宫保鸡丁", "spicy":"微辣"}
技术文本分类序列标注(BERT+CRF)

简单示例:用户说“两份不辣的麻婆豆腐,送科技园B座”

  • 意图:order_food

  • 实体:{quantity:2, dish:"麻婆豆腐", spice:"不辣", address:"科技园B座"}

五、概念关系与区别总结

一句话记忆:意图识别决定“路由器”的出口,实体抽取负责“打包数据包”。

  • 逻辑关系:意图是“整体目标”,实体是“局部参数”;意图识别先定方向,实体抽取再填细节。

  • 协作流程:用户输入 → 意图识别(分类)→ 根据意图调用对应的实体抽取模板 → 得到结构化指令。

六、代码/流程示例:极简AI助手订外卖核心逻辑

以下示例使用规则+轻量模型(为突出核心,用正则模拟意图识别,真实场景可用BERT)。展示从输入到执行的全流程。

python
复制
下载
import re

 模拟意图识别(实际可用分类模型)
def recognize_intent(text):
    if re.search(r'点|来份|要个|订', text):
        return "order_food"
    elif re.search(r'查|订单|到哪了', text):
        return "track_order"
    else:
        return "unknown"

 模拟实体抽取(正则+关键词)
def extract_entities(text, intent):
    entities = {}
    if intent == "order_food":
         提取菜品(简单匹配预设列表)
        dish_match = re.search(r'(宫保鸡丁|麻婆豆腐|盖浇饭)', text)
        if dish_match:
            entities["dish"] = dish_match.group(1)
         提取数量
        num_match = re.search(r'(\d+)份', text)
        if num_match:
            entities["quantity"] = int(num_match.group(1))
        else:
            entities["quantity"] = 1
         提取口味
        if "不辣" in text:
            entities["spice"] = "不辣"
        elif "微辣" in text:
            entities["spice"] = "微辣"
    return entities

 执行订外卖(模拟API调用)
def execute_order(entities):
    print(f"📦 正在订餐:{entities.get('quantity',1)}{entities.get('dish')},口味:{entities.get('spice','默认')}")
     实际此处调用外卖平台开放API(美团/饿了么)
    return {"order_id": "202604100001", "status": "success"}

 主流程
user_input = "帮我点两份微辣的宫保鸡丁"
intent = recognize_intent(user_input)
if intent == "order_food":
    entities = extract_entities(user_input, intent)
    result = execute_order(entities)
    print(f"✅ 下单成功,订单号:{result['order_id']}")
else:
    print("暂不支持该意图")

执行输出

text
复制
下载
📦 正在订餐:2份 宫保鸡丁,口味:微辣
✅ 下单成功,订单号:202604100001

新旧对比:传统if-else需要为每个菜品、每个口味写分支;而AI方式只需维护意图列表和实体抽取规则(或模型),扩展新菜品只需更新菜品词表,改进效果显著

七、底层原理/技术支撑

ai助手订外卖背后依赖两大基础技术:

  1. 自然语言处理中的预训练模型(如BERT、GPT)

    • 意图识别本质是文本分类,BERT通过[CLS]向量接softmax即可得到意图概率。

    • 实体抽取采用BERT+CRF:BERT提供上下文相关的字向量,CRF学习标签间的转移约束(如“B-dish”后不能直接跟“I-address”)。

  2. 对话状态机与API编排

    • 多轮对话需要维护状态图(例如:缺菜品→追问菜品;缺地址→询问地址)。

    • 底层使用Redis缓存会话状态,通过RESTful API调用外卖平台(美团/饿了么开放接口)。

深度原理(如Transformer注意力机制、CRF损失函数)将在系列后续文章中展开,本文先做定位。

八、高频面试题与参考答案

Q1:请简述AI助手订外卖系统中,意图识别和实体抽取的区别与联系。

参考答案

  • 区别:意图识别是文本分类任务,输出单个标签(如order_food);实体抽取是序列标注任务,输出多个键值对(如菜品、数量)。

  • 联系:两者共同构成NLU模块;意图识别为实体抽取提供上下文约束(例如order_food意图下才抽取菜品实体),实体抽取的结果又用于执行具体业务逻辑。
    踩分点:任务类型不同 + 协作流程 + 举例说明。

Q2:如何应对用户输入中“缺实体”的情况(比如只说“点个菜”)?

参考答案:采用对话状态机 + 槽位填充。系统先定义必填槽位(菜品、地址等),当识别到order_food意图后检查槽位,缺失则主动反问:“您想点什么菜?”。使用Redis存储当前会话的已填充槽位,直到所有必填槽位完整再调用下单API。

Q3:在实际ai助手订外卖中,如何保证实体抽取的准确率?

参考答案

  1. 使用预训练模型(BERT)微调实体抽取任务,并加入CRF层。

  2. 构建领域词典(菜品名、口味词)做规则后修正。

  3. 针对混淆案例(如“鱼香肉丝”被拆成“鱼”“香肉丝”)增加数据增强。

  4. 引入上下文窗口:上一轮说“不要辣”,本轮说“宫保鸡丁”则继承口味实体。

九、结尾总结

本文围绕ai助手订外卖这一典型场景,讲解了:

  • 痛点:硬编码规则维护难 → 引入NLU。

  • 核心概念:意图识别(做什么)与实体抽取(填参数)。

  • 关系:分类 vs 序列标注,先意图后实体。

  • 代码示例:从正则模拟到可运行的订餐流程。

  • 底层原理:BERT+CRF支撑识别,状态机+API完成执行。

  • 面试考点:区别联系、缺实体处理、准确率提升。

重点与易错点:不要把意图识别和实体抽取混为一谈;实际工程中必须处理多轮对话的槽位继承;面试时强调“状态机”和“预训练模型”是加分项。

下一篇预告:深入多轮对话中的对话状态跟踪(DST),用Transformer实现可插拔的槽位填充模块。欢迎关注!


本文所有代码基于Python 3.9+,可复制运行。外卖平台接口需替换真实token。

抱歉,评论功能暂时关闭!