基于大模型的外卖词槽提取完整方案
2025-09-25
深度学习
00

目录

基于大模型的外卖词槽提取完整方案
1. 方案概述
核心挑战
2. 技术方案架构
2.1 整体流程设计
2.2 分层架构
3. 核心实现策略
3.1 链式提示工程(Chain-of-Thought Prompting)
3.2 关键技术点
4. 提示词工程最佳实践
4.1 结构化输出控制
4.2 归一化处理策略
5. 后处理校验机制
5.1 数据校验层
5.2 智能补全与纠错
6. 性能优化策略
6.1 缓存策略
6.2 模型优化
7. 评估与迭代
7.1 评估指标
7.2 持续优化
8. 实施建议
8.1 开发阶段
8.2 部署考虑
9. 总结

基于大模型的外卖词槽提取完整方案

1. 方案概述

你的词槽提取任务属于典型的**意图识别+槽位填充(Intent Detection & Slot Filling)**问题。这是NLP中的核心任务,目标是从用户对话中识别不同的槽位,对应用户查询的不同参数。对于外卖场景,需要处理复杂的商业逻辑和多轮对话。

核心挑战

  • 店铺名与商品名混淆:如"乡村的小鸡"中"乡村"是店铺,"小鸡"是商品
  • 多意图场景:外卖下单、再来一单、搜索店铺等不同意图需要不同词槽
  • 归一化要求:地址标签、配送方式等需要统一格式
  • 业务逻辑复杂:必选词槽、默认值、校验规则等

2. 技术方案架构

2.1 整体流程设计

展开代码
用户输入 → 意图识别 → 词槽提取 → 后处理校验 → 结果返回 ↓ ↓ ↓ ↓ ↓ 预处理 链式提示 结构化 程序逻辑 最终结果 工程 输出 校正

2.2 分层架构

第一层:意图识别层

  • 识别用户的核心意图(外卖下单/再来一单/搜索等)
  • 确定需要提取的词槽集合

第二层:词槽提取层

  • 基于意图使用专门的提示词模板
  • 提取对应场景下的所有词槽

第三层:后处理校验层

  • 数据格式校验和归一化
  • 必选词槽检查
  • 业务逻辑校正

3. 核心实现策略

3.1 链式提示工程(Chain-of-Thought Prompting)

步骤1:意图识别提示词

展开代码
你是一个外卖订餐助手,需要识别用户意图。 用户可能的意图包括: - 外卖下单:想要点外卖订餐 - 再来一单:重复之前的订单 - 搜索店铺:查找特定店铺 - 其他 请分析以下用户输入的意图: 用户输入:{user_query} 返回JSON格式: { "intent": "外卖下单|再来一单|搜索店铺|其他", "confidence": 0.95 }

步骤2:基于意图的词槽提取提示词

展开代码
你是专业的信息提取助手。用户意图是"外卖下单",请从用户输入中提取以下词槽: 必选词槽: - task_entry: 外卖/再来一单 - target_shops: 目标店铺名称列表,只支持1个元素 - target_products: 目标商品列表 可选词槽: - address: 收货地址 - filter_conditions: 筛选条件(如"神券商家","免配送费") - sort_type: 排序方式,归一化为:综合排序/距离优先/起送价优先/配送费优先/人均高到低/人均低到高 [其他词槽定义...] 提取规则: 1. 店铺名称:如果用户说"乡村的小鸡",店铺是"乡村",商品是"小鸡" 2. 不需要完整匹配,只提取用户明确提到的部分 3. 空值用null表示 用户输入:{user_query} 返回JSON格式: { "task_entry": "外卖", "target_shops": ["乡村"], "target_products": ["小鸡"], "address": null, ... }

3.2 关键技术点

1. 店铺名与商品名区分策略

通过语法结构和上下文模式识别:

  • "A的B" 模式:A通常是店铺,B是商品
  • "在A买B" 模式:A是店铺,B是商品
  • 专门的商品词库辅助:常见食品、饮品关键词
  • 店铺特征词:如"餐厅"、"家"、"店"等后缀

2. 多轮对话处理

python
展开代码
# 伪代码示例 def extract_slots(user_query, conversation_history=None): # 意图识别 intent = identify_intent(user_query) # 选择对应的词槽提取模板 slot_template = get_slot_template(intent) # 考虑对话历史的词槽提取 if conversation_history: context_prompt = build_context_prompt(conversation_history) result = llm_extract(user_query, slot_template, context_prompt) else: result = llm_extract(user_query, slot_template) # 后处理 return post_process(result, intent)

4. 提示词工程最佳实践

4.1 结构化输出控制

使用结构化的提示词可以显著提高信息提取的准确性。关键技巧:

1. JSON Schema约束

展开代码
请严格按照以下JSON schema返回结果: { "type": "object", "properties": { "target_shops": { "type": "array", "items": {"type": "string"}, "maxItems": 1 } } }

2. Few-shot示例

展开代码
示例1: 输入:我想吃肯德基的炸鸡 输出:{"target_shops": ["肯德基"], "target_products": ["炸鸡"]} 示例2: 输入:来一份麦当劳的可乐和薯条 输出:{"target_shops": ["麦当劳"], "target_products": ["可乐", "薯条"]} 现在处理:{user_query}

3. 思维链推理

展开代码
请按以下步骤分析: 1. 识别句子中的店铺相关词汇 2. 识别句子中的商品相关词汇 3. 根据语法结构判断归属关系 4. 输出最终结果 分析过程: {让模型展示推理过程} 最终结果: {JSON输出}

4.2 归一化处理策略

对于需要归一化的字段,使用映射表+大模型组合:

python
展开代码
# 地址标签归一化 ADDRESS_LABELS = { "家里": "家", "家中": "家", "住址": "家", "公司": "公司", "单位": "公司", "办公室": "公司", "学校": "学校", "校园": "学校" } def normalize_address_label(raw_label): # 先用映射表快速匹配 if raw_label in ADDRESS_LABELS: return ADDRESS_LABELS[raw_label] # 再用大模型处理边缘情况 prompt = f"将'{raw_label}'归一化为:家/学校/公司/父母家 中的一个" return llm_normalize(prompt)

5. 后处理校验机制

5.1 数据校验层

python
展开代码
def validate_slots(slots, intent): errors = [] # 必选字段检查 required_fields = get_required_fields(intent) for field in required_fields: if not slots.get(field): errors.append(f"缺少必选字段: {field}") # 格式校验 if slots.get("phone_number"): if not is_valid_phone(slots["phone_number"]): errors.append("手机号格式错误") # 业务逻辑校验 if slots.get("target_shops") and len(slots["target_shops"]) > 1: errors.append("target_shops只支持1个元素") return errors

5.2 智能补全与纠错

python
展开代码
def post_process_slots(slots, user_query): # 默认值填充 if not slots.get("sort_type"): slots["sort_type"] = "综合排序" if not slots.get("delivery_method"): slots["delivery_method"] = "外卖配送" # 智能纠错:如果店铺名可能是商品名 if slots.get("target_shops") and is_likely_product(slots["target_shops"][0]): # 重新分析或标记需要用户确认 slots["_need_confirmation"] = True return slots

6. 性能优化策略

6.1 缓存策略

  • 意图缓存:相似查询的意图识别结果
  • 词槽模板缓存:不同意图的提示词模板
  • 归一化缓存:常见词汇的归一化结果

6.2 模型优化

  • 模型选择:32B模型适合复杂推理,但可考虑意图识别用小模型
  • 批处理:多个词槽同时提取减少API调用
  • 流式处理:支持实时响应

7. 评估与迭代

7.1 评估指标

  • 准确率(Precision):提取出的词槽中正确的比例
  • 召回率(Recall):应该提取的词槽中被正确提取的比例
  • F1分数:准确率和召回率的调和平均
  • 意图识别准确率:意图判断的正确性

7.2 持续优化

  1. 错误样本分析:收集失败案例,分析原因
  2. 提示词迭代:基于错误模式优化提示词
  3. 规则补充:将常见模式固化为规则
  4. 用户反馈:结合用户确认信息改进模型

8. 实施建议

8.1 开发阶段

  1. MVP版本:先实现核心的外卖下单场景
  2. 逐步扩展:添加再来一单、搜索等其他意图
  3. A/B测试:不同提示词策略的效果对比

8.2 部署考虑

  • 降级策略:大模型不可用时的规则兜底方案
  • 监控报警:提取成功率、响应时间等指标监控
  • 成本控制:根据业务重要性选择不同模型

9. 总结

你的方案核心思路完全正确:意图识别→词槽提取→程序校验的三步走策略是目前主流的解决方案。提示词工程确实是高效使用大语言模型的关键技能,特别适合你这种有明确业务逻辑的场景。

关键成功要素:

  1. 精准的提示词设计:分层次、有示例、可约束
  2. 强健的后处理逻辑:数据校验、业务规则、智能纠错
  3. 持续的优化迭代:基于真实数据不断改进

这种方案比传统的规则匹配更灵活,比完全依赖大模型更可控,是当前技术条件下的最优选择。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!