x

场景化输入识别 - 从自然语言到结构化单据

本文档探讨五金门店核心场景:销售单、采购单、退货单、产品资料修改的智能化处理。


一、核心挑战

1.1 典型问题

用户说 → 系统理解

销售场景:
"李文明需要螺丝刀3把,螺丝m8 100斤,电线2平方红色2卷"
→ 客户: 李文明, 产品: [螺丝刀×3, 螺丝m8×100斤, 电线2平方红色×2卷]

采购场景:
"向湖南日升商贸采购螺丝刀3把,螺丝m8 100斤"
→ 供应商: 湖南日升商贸, 产品: [螺丝刀×3, 螺丝m8×100斤]

退货场景:
"李文明退螺丝刀2把"
→ 客户: 李文明, 产品: 螺丝刀×2, 意图: 退货

产品修改:
"把鹏锐螺丝刀m4的库存改成20把"
→ 产品: 鹏锐螺丝刀m4, 属性: 库存, 新值: 20把

1.2 难点分析

┌─────────────────────────────────────────────────────────────────────┐
│                    四大难点                                         │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  1. 口语化表达随意                                                  │
│  ─────────────────────────────────────────────────────────────────  │
│  "螺丝m8" = "M8螺丝" = "8mm螺丝" = "m8螺丝"                        │
│  "2平方红色" = "红色2平方" = "2平红色"                              │
│  "电线2卷" = "电线2圈" = "2卷电线"                                  │
│                                                                     │
│  2. 产品信息不完整                                                  │
│  ─────────────────────────────────────────────────────────────────  │
│  用户说"螺丝刀" → 可能指:                                          │
│    - 鹏锐十字螺丝刀 m4                                              │
│    - 史丹利螺丝刀 m6                                                │
│    - 大盛螺丝刀 m8                                                  │
│  需要结合上下文/历史记录/品牌偏好推断                                │
│                                                                     │
│  3. 数量单位歧义                                                    │
│  ─────────────────────────────────────────────────────────────────  │
│  "螺丝m8 100斤" → 斤?个?盒?                                      │
│  "电线2平方" → 平方毫米?米?                                      │
│  "螺丝刀3把" → 把=个?但钉子可能论斤                               │
│                                                                     │
│  4. 多产品批量处理                                                  │
│  ─────────────────────────────────────────────────────────────────  │
│  一句话包含5-10个产品,每个产品有3-5个属性                           │
│  需要正确切分、归类、关联                                           │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

二、核心场景分类

2.1 场景总览

┌─────────────────────────────────────────────────────────────────────┐
│                    四大核心场景                                      │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐ │
│  │   销售单   │  │   采购单   │  │   退货单   │  │  产品修改  │ │
│  │             │  │             │  │             │  │             │ │
│  │ 客户→产品  │  │ 供应商→产品│  │ 客户→产品  │  │ 产品→属性  │ │
│  └─────────────┘  └─────────────┘  └─────────────┘  └─────────────┘ │
│                                                                     │
│  共同要素:                                                          │
│  • 人员/供应商识别(没有则创建)                                     │
│  • 产品识别 + 规范化命名                                            │
│  • 数量 + 单位解析                                                  │
│  • 属性提取(品牌/型号/规格/颜色)                                  │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

2.2 销售场景详解

输入:
"李文明需要螺丝刀3把,螺丝m8 100斤,电线2平方红色2卷"

目标结构:
┌─────────────────────────────────────────────────────────────────────┐
│  销售单                                                            │
├─────────────────────────────────────────────────────────────────────┤
│  客户: 李文明(无则创建)                                           │
│  ─────────────────────────────────────────────────────────────────  │
│  日期: 2026-05-17                                                   │
│                                                                     │
│  产品清单:                                                          │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │ #  │ 产品名称              │ 规格      │ 颜色  │ 数量 │ 单位 │   │
│  ├─────────────────────────────────────────────────────────────┤   │
│  │ 1  │ 螺丝刀               │ -         │ -     │ 3    │ 把   │   │
│  │ 2  │ 螺丝                 │ M8        │ -     │ 100  │ 斤   │   │
│  │ 3  │ 电线                 │ 2平方     │ 红色  │ 2    │ 卷   │   │
│  └─────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────┘

实体提取过程:
┌─────────────────────────────────────────────────────────────────────┐
│  Step 1: 意图识别                                                   │
│  ─────────────────────────────────────────────────────────────────  │
│  关键词: "需要" → buy / create_order                               │
│  置信度: 0.95                                                     │
│                                                                     │
│  Step 2: 人员识别                                                   │
│  ─────────────────────────────────────────────────────────────────  │
│  "李文明" → 查客户表 → 存在则关联,不存在则创建                    │
│  规则: 句首/句中的未识别词 + 上下文是"需要/要/买" → 高概率客户名  │
│                                                                     │
│  Step 3: 产品列表切分                                              │
│  ─────────────────────────────────────────────────────────────────  │
│  输入: "螺丝刀3把,螺丝m8 100斤,电线2平方红色2卷"                │
│                                                                     │
│  切分标志: ","(逗号)                                              │
│  ↓                                                                 │
│  ["螺丝刀3把", "螺丝m8 100斤", "电线2平方红色2卷"]                │
│                                                                     │
│  Step 4: 单产品解析                                                │
│  ─────────────────────────────────────────────────────────────────  │
│  "螺丝刀3把"                                                       │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │  品牌: 待定(需确认)                                         │   │
│  │  产品名: 螺丝刀                                              │   │
│  │  规格: 空                                                   │   │
│  │  型号: 空                                                   │   │
│  │  颜色: 空                                                   │   │
│  │  数量: 3                                                   │   │
│  │  单位: 把                                                   │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
│  "螺丝m8 100斤"                                                    │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │  品牌: 待定                                                 │   │
│  │  产品名: 螺丝                                              │   │
│  │  规格: M8(材质:铁/不锈钢?)                               │   │
│  │  型号: 空                                                   │   │
│  │  颜色: 空                                                   │   │
│  │  数量: 100                                                 │   │
│  │  单位: 斤                                                  │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
│  "电线2平方红色2卷"                                                │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │  品牌: 待定                                                 │   │
│  │  产品名: 电线                                              │   │
│  │  规格: 2平方(截面积)                                      │   │
│  │  型号: 空                                                   │   │
│  │  颜色: 红色                                                │   │
│  │  数量: 2                                                   │   │
│  │  单位: 卷                                                  │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
│  Step 5: 产品规范化匹配                                            │
│  ─────────────────────────────────────────────────────────────────  │
│  "螺丝刀" → 匹配商品库:                                           │
│    • 鹏锐十字螺丝刀 m4    (库存充足) ✅                           │
│    • 史丹利螺丝刀 m6      (库存充足)                               │
│    • 大盛螺丝刀 m8        (库存不足)                               │
│  → 弹出确认: 您要的是哪款螺丝刀?                                   │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

2.3 采购场景详解

输入:
"向湖南日升商贸(供应商)采购螺丝刀3把,螺丝m8 100斤,电线2平方红色2卷"

目标结构:
┌─────────────────────────────────────────────────────────────────────┐
│  采购单                                                            │
├─────────────────────────────────────────────────────────────────────┤
│  供应商: 湖南日升商贸(无则创建)                                   │
│  ─────────────────────────────────────────────────────────────────  │
│  日期: 2026-05-17                                                   │
│                                                                     │
│  产品清单:                                                          │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │ #  │ 产品名称              │ 规格      │ 颜色  │ 数量 │ 单位 │   │
│  ├─────────────────────────────────────────────────────────────┤   │
│  │ 1  │ 螺丝刀               │ -         │ -     │ 3    │ 把   │   │
│  │ 2  │ 螺丝                 │ M8        │ -     │ 100  │ 斤   │   │
│  │ 3  │ 电线                 │ 2平方     │ 红色  │ 2    │ 卷   │   │
│  └─────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────┘

与销售单的关键区别:
┌─────────────────────────────────────────────────────────────────────┐
│  销售单                    │  采购单                                │
│────────────────────────────┼───────────────────────────────────────│
│  客户 ← 李文明            │  供应商 ← 湖南日升商贸                │
│  去向: 客户付钱买走        │  去向: 从供应商购入                   │
│  单据: 销售单/出库单       │  单据: 采购单/入库单                   │
│  库存: 减少               │  库存: 增加                           │
│  账户: 应收账款+          │  账户: 应付账款+                      │
└─────────────────────────────────────────────────────────────────────┘

实体提取特殊点:
"向XX采购" / "从XX进货" / "找XX供应商采购" → 供应商识别
括号内容"(供应商)" → 明确标注实体类型

2.4 退货场景详解

输入:
"李文明退螺丝刀2把"

目标结构:
┌─────────────────────────────────────────────────────────────────────┐
│  退货单                                                            │
├─────────────────────────────────────────────────────────────────────┤
│  客户: 李文明                                                       │
│  ─────────────────────────────────────────────────────────────────  │
│  原销售单: [需关联查询]                                             │
│  日期: 2026-05-17                                                   │
│                                                                     │
│  退货产品:                                                          │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │ #  │ 产品名称     │ 规格  │ 颜色 │ 数量 │ 单位 │ 原销售价 │   │
│  ├─────────────────────────────────────────────────────────────┤   │
│  │ 1  │ 螺丝刀      │ -     │ -    │ 2    │ 把   │ ¥15      │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
│  退货金额: ¥30                                                     │
│  库存处理: +2把                                                    │
└─────────────────────────────────────────────────────────────────────┘

意图识别关键词:
┌─────────────────────────────────────────────────────────────────────┐
│  销售意图          │  退货意图                                       │
│────────────────────┼───────────────────────────────────────────────│
│  需要/要/买        │  退/退货/退了/不要了/取消                      │
│  来一把/拿一个     │  退掉/退回去                                    │
│  进货/采购         │  换货/换一个                                    │
│  补货              │  换规格/换颜色                                  │
└─────────────────────────────────────────────────────────────────────┘

退货流程:
┌─────────────────────────────────────────────────────────────────────┐
│  1. 识别客户                                                       │
│  2. 识别退货产品                                                   │
│  3. 查询原销售记录(客户+产品匹配)                                │
│  4. 确认退货数量和金额                                             │
│  5. 更新库存                                                       │
│  6. 生成退货单                                                     │
│  7. 财务处理(应收账款减少)                                       │
└─────────────────────────────────────────────────────────────────────┘

2.5 产品资料修改场景

输入:
"把鹏锐螺丝刀m4的库存改成20把,把鹏锐螺丝刀m4的货号改为35286"

目标结构:
┌─────────────────────────────────────────────────────────────────────┐
│  操作类型: 产品资料修改                                             │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  修改项1:                                                          │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │  产品: 鹏锐螺丝刀 m4                                        │   │
│  │  属性: 库存                                                │   │
│  │  原值: [查询现有值]                                         │   │
│  │  新值: 20                                                 │   │
│  │  单位: 把                                                 │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
│  修改项2:                                                          │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │  产品: 鹏锐螺丝刀 m4                                        │   │
│  │  属性: 货号                                                │   │
│  │  原值: [查询现有值]                                         │   │
│  │  新值: 35286                                              │   │
│  │  单位: -                                                   │   │
│  └─────────────────────────────────────────────────────────────┘   │
└─────────────────────────────────────────────────────────────────────┘

属性识别关键词:
┌─────────────────────────────────────────────────────────────────────┐
│  可修改属性           │  识别关键词                                 │
│───────────────────────┼─────────────────────────────────────────────│
│  库存                  │  库存改成/调整为/变为                       │
│  货号                  │  货号改为/改成/调整为                       │
│  价格/售价             │  价格改成/调价为/卖价改成                   │
│  品牌                  │  品牌改为/牌子改成                          │
│  规格                  │  规格改成/改为                             │
│  颜色                  │  颜色改成/改为                             │
│  供应商                │  供应商改为/供货商改成                     │
│  最小起订量            │  起订量改成/最小量改为                     │
└─────────────────────────────────────────────────────────────────────┘

多属性修改切分:
┌─────────────────────────────────────────────────────────────────────┐
│  输入: "把鹏锐螺丝刀m4的库存改成20把,把鹏锐螺丝刀m4的货号改为35286" │
│                                                                     │
│  切分标志: ","                                                    │
│  ↓                                                                 │
│  ["把鹏锐螺丝刀m4的库存改成20把", "把鹏锐螺丝刀m4的货号改为35286"] │
│                                                                     │
│  每个子句独立解析 → 同一产品 + 不同属性 + 不同新值                  │
└─────────────────────────────────────────────────────────────────────┘

三、核心技术方案

3.1 整体架构

┌─────────────────────────────────────────────────────────────────────┐
│                    场景化输入处理架构                                 │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  用户输入                                                           │
│     │                                                              │
│     ▼                                                              │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  第一层: 场景分类 (Intent Classification)                   │  │
│  │  ────────────────────────────────────────────────────────── │  │
│  │                                                             │  │
│  │  关键词规则:                                                 │  │
│  │  • "需要/要/买" + 客户名 → 销售单                           │  │
│  │  • "向XX采购/从XX进货" → 采购单                            │  │
│  │  • "退" + 客户名 → 退货单                                  │  │
│  │  • "改成/改为/调整为" + 产品名 → 产品资料修改               │  │
│  │                                                             │  │
│  │  LLM兜底: 复杂句/模糊句                                     │  │
│  │                                                             │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                              │                                     │
│                              ▼                                     │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  第二层: 实体识别 (NER)                                     │  │
│  │  ────────────────────────────────────────────────────────── │  │
│  │                                                             │  │
│  │  人员实体: 客户/供应商                                      │  │
│  │  • 正则: 客户名/供应商名 + 上下文                           │  │
│  │  • 知识库: 历史客户/供应商列表                              │  │
│  │                                                             │  │
│  │  产品实体: 产品名                                            │  │
│  │  • 正则: 数量词 + 单位词 + 产品类别词                        │  │
│  │  • 知识库: 商品库产品名匹配                                  │  │
│  │                                                             │  │
│  │  属性实体: 品牌/规格/型号/颜色/单位                         │  │
│  │  • 正则: 固定模式匹配                                       │  │
│  │  • Embedding: 语义相似度匹配                               │  │
│  │                                                             │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                              │                                     │
│                              ▼                                      │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  第三层: 产品规范化 (Normalization)                          │  │
│  │  ────────────────────────────────────────────────────────── │  │
│  │                                                             │  │
│  │  输入: "螺丝m8 100斤"                                       │  │
│  │                                                             │  │
│  │  Step 1: 词素分解                                            │  │
│  │  ["螺丝", "m8", "100", "斤"]                               │  │
│  │                                                             │  │
│  │  Step 2: 属性归类                                           │  │
│  │  产品名: 螺丝                                               │  │
│  │  规格: M8                                                  │  │
│  │  数量: 100                                                 │  │
│  │  单位: 斤                                                  │  │
│  │                                                             │  │
│  │  Step 3: 规格标准化                                         │  │
│  │  "m8" → "M8" → 标准规格码                                  │  │
│  │                                                             │  │
│  │  Step 4: 商品库匹配                                         │  │
│  │  → 螺丝 M8 铁镀锌 100斤                                    │  │
│  │                                                             │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                              │                                     │
│                              ▼                                      │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  第四层: 数据结构化 (Structured Output)                     │  │
│  │  ────────────────────────────────────────────────────────── │  │
│  │                                                             │  │
│  │  销售单: {customer, items: [{product, spec, qty, unit}]}   │  │
│  │  采购单: {supplier, items: [{product, spec, qty, unit}]}   │  │
│  │  退货单: {customer, original_order, items: [...]}           │  │
│  │  产品修改: {product, updates: [{attr, new_value}]}          │  │
│  │                                                             │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                              │                                     │
│                              ▼                                      │
│  ┌──────────────────────────────────────────────────────────────┐  │
│  │  第五层: 确认与执行 (Confirmation & Execution)               │  │
│  │  ────────────────────────────────────────────────────────── │  │
│  │                                                             │  │
│  │  置信度 > 0.9 → 自动执行                                    │  │
│  │  置信度 0.7-0.9 → 语音/界面确认                             │  │
│  │  置信度 < 0.7 → 人工处理                                    │  │
│  │                                                             │  │
│  └──────────────────────────────────────────────────────────────┘  │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

3.2 实体识别详细方案

3.2.1 人员实体识别

┌─────────────────────────────────────────────────────────────────────┐
                    人员实体识别流程                                  
├─────────────────────────────────────────────────────────────────────┤
                                                                     
  输入: "李文明需要螺丝刀3把"                                       
                                                                     
  Step 1: 位置分析                                                   
  ─────────────────────────────────────────────────────────────────  
  句首词: "李文明"  可能是客户名                                    
  后面紧跟: "需要"  确认是客户名buy意图的前置                  
                                                                     
  Step 2: 知识库匹配                                                 
  ─────────────────────────────────────────────────────────────────  
  查询客户表:                                                        
  SELECT * FROM customers WHERE name LIKE '%李文明%'               
                                                                     
  找到  返回客户ID: cust_001                                       
  未找到  询问: "李文明是新客户,需要创建吗?"                      
                                                                     
  Step 3: 实体类型判断                                               
  ─────────────────────────────────────────────────────────────────  
  上下文关键词  决定实体类型:                                       
  ┌─────────────────────────────────────────────────────────────┐   
    客户类关键词                                                   
    "需要/要买/退/客户"  人员类型 = customer                    
                                                                  
    供应商类关键词                                                 
    "向XX采购/从XX进货/供应商"  人员类型 = supplier            
  └─────────────────────────────────────────────────────────────┘   
                                                                     
  输出:                                                              
  ┌─────────────────────────────────────────────────────────────┐   
    entity: 李文明                                                
    type: customer                                               
    customer_id: cust_001 (或标记为待创建)                        
    confidence: 0.95                                             
  └─────────────────────────────────────────────────────────────┘   
                                                                     
└─────────────────────────────────────────────────────────────────────┘

3.2.2 产品实体识别

┌─────────────────────────────────────────────────────────────────────┐
│                    产品实体识别流程                                  │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  输入: "螺丝刀3把,螺丝m8 100斤,电线2平方红色2卷"                │
│                                                                     │
│  Step 1: 产品列表切分                                               │
│  ─────────────────────────────────────────────────────────────────  │
│  分隔符: ","(逗号)                                                │
│  ↓                                                                 │
│  ["螺丝刀3把", "螺丝m8 100斤", "电线2平方红色2卷"]                │
│                                                                     │
│  Step 2: 单产品解析                                                │
│  ─────────────────────────────────────────────────────────────────  │
│  以"螺丝m8 100斤"为例:                                             │
│                                                                     │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │  词素分解:                                                  │   │
│  │  ["螺丝", "m8", "100", "斤"]                              │   │
│  │                                                             │   │
│  │  正则匹配规则:                                               │   │
│  │  ────────────────────────────────────────────────────────  │   │
│  │  产品名候选: 螺丝 (名词,前面是数字"100"修饰)              │   │
│  │  规格候选: m8 (字母+数字组合,常见规格模式)                │   │
│  │  数量: 100 (数字)                                          │   │
│  │  单位: 斤 (重量单位)                                        │   │
│  │                                                             │   │
│  │  组合推断:                                                  │   │
│  │  螺丝 + m8规格 + 100 + 斤                                  │   │
│  │  → 产品: 螺丝 M8                                           │   │
│  │  → 数量: 100斤                                              │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
│  Step 3: 产品规范化                                                │
│  ─────────────────────────────────────────────────────────────────  │
│  输入产品名: "螺丝"                                                │
│  查询商品库:                                                        │
│  SELECT * FROM products WHERE name LIKE '%螺丝%'                  │
│                                                                     │
│  候选结果:                                                          │
│  • 螺丝 M4 铁镀锌                                                  │
│  • 螺丝 M6 铁镀锌                                                  │
│  • 螺丝 M8 铁镀锌 ← 最匹配                                        │
│  • 螺丝 M10 不锈钢                                                 │
│                                                                     │
│  匹配度计算:                                                        │
│  "螺丝m8" vs "螺丝 M8 铁镀锌" → 匹配度 0.85 ✅                    │
│                                                                     │
│  输出:                                                              │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │  entity: 螺丝 M8 铁镀锌                                     │   │
│  │  product_id: prod_089 (待确认)                              │   │
│  │  quantity: 100                                              │   │
│  │  unit: 斤                                                  │   │
│  │  confidence: 0.85                                          │   │
│  │  need_confirm: true (多规格匹配,需用户确认)               │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

3.3 产品规范化详细方案

3.3.1 五金产品属性体系

┌─────────────────────────────────────────────────────────────────────┐
│                    五金产品属性规范                                  │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  标准属性结构:                                                       │
│  ─────────────────────────────────────────────────────────────────  │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │  产品名  │ 品牌  │ 规格  │ 型号  │ 颜色  │ 单位  │  备注   │   │
│  ├─────────────────────────────────────────────────────────────┤   │
│  │  螺丝刀  │ 鹏锐  │ 十字  │ m4    │ -    │ 把    │         │   │
│  │  螺丝    │ -     │ M8    │ -     │ -    │ 斤/个  │         │   │
│  │  电线    │ -     │ 2平方 │ -     │ 红色 │ 卷/米  │  BV线  │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
│  规格标准化映射:                                                    │
│  ─────────────────────────────────────────────────────────────────  │
│  螺丝规格:                                                          │
│  "m8" / "M8" / "8mm" / "8个" → M8                                │
│  "m6" / "M6" / "6mm" / "6个" → M6                                │
│  "m10" / "M10" / "10mm" → M10                                     │
│                                                                     │
│  电线规格:                                                          │
│  "2平方" / "2平方毫米" / "2平" / "2mm²" → 2.5平方(标准)        │
│  "4平方" / "4平方毫米" / "4平" / "4mm²" → 4平方                   │
│                                                                     │
│  单位标准化:                                                         │
│  ─────────────────────────────────────────────────────────────────  │
│  螺丝: "斤" → "kg", "个" → "个" (不变)                           │
│  电线: "卷" → "卷", "米" → "米"                                  │
│  螺丝刀: "把" → "把", "个" → "把"                                │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

3.3.2 规范化匹配算法

┌─────────────────────────────────────────────────────────────────────┐
│                    产品规范化匹配算法                                │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  输入: "电线2平方红色2卷"                                           │
│                                                                     │
│  Step 1: 正则解析                                                   │
│  ─────────────────────────────────────────────────────────────────  │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │  正则模式:                                                   │   │
│  │  (?P<product>电线|电缆)                                      │   │
│  │  (?P<spec>\d+平方|\d+mm²)?                                  │   │
│  │  (?P<color>红色|蓝色|绿色|黑色|白色)?                        │   │
│  │  (?P<qty>\d+)                                               │   │
│  │  (?P<unit>卷|米|个|把|斤|个)?                               │   │
│  │                                                             │   │
│  │  解析结果:                                                   │   │
│  │  product: "电线"                                            │   │
│  │  spec: "2平方"                                              │   │
│  │  color: "红色"                                              │   │
│  │  qty: "2"                                                   │   │
│  │  unit: "卷"                                                 │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
│  Step 2: 规格标准化                                                │
│  ─────────────────────────────────────────────────────────────────  │
│  "2平方" → 标准化: "2.5平方" (四舍五入到标准规格)                   │
│  颜色: "红色" → 标准化: "红色" (不变)                               │
│                                                                     │
│  Step 3: 商品库匹配                                                │
│  ─────────────────────────────────────────────────────────────────  │
│  SELECT * FROM products                                           │
│  WHERE category = '电线'                                          │
│    AND (spec = '2.5平方' OR spec LIKE '%2.5%')                   │
│    AND (color = '红色' OR color IS NULL)                          │
│                                                                     │
│  候选:                                                              │
│  • 电线 2.5平方 红色 BV线    (stock: 100卷) ← 唯一匹配            │
│  • 电线 4平方   红色 BV线    (stock: 50卷)                         │
│                                                                     │
│  Step 4: 匹配度计算                                                │
│  ─────────────────────────────────────────────────────────────────  │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │  匹配维度         │  权重  │  得分  │  说明               │   │
│  ├─────────────────────────────────────────────────────────────┤   │
│  │  产品类别         │  20%   │  1.0   │  电线 vs 电线      │   │
│  │  规格匹配         │  30%   │  0.9   │  2平 vs 2.5平     │   │
│  │  颜色匹配         │  20%   │  1.0   │  红色 vs 红色      │   │
│  │  库存可用         │  10%   │  1.0   │  有库存            │   │
│  │  历史购买         │  20%   │  0.8   │  该客户曾买过      │   │
│  ├─────────────────────────────────────────────────────────────┤   │
│  │  综合得分         │  100%  │  0.93  │  ≥0.9 → 直接确认  │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
│  Step 5: 输出结构化数据                                             │
│  ─────────────────────────────────────────────────────────────────  │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │  product_id: prod_156                                       │   │
│  │  product_name: 电线 2.5平方 红色 BV线                        │   │
│  │  brand: 待确认                                              │   │
│  │  spec: "2.5平方"                                            │   │
│  │  color: "红色"                                              │   │
│  │  quantity: 2                                                │   │
│  │  unit: "卷"                                                 │   │
│  │  confidence: 0.93                                          │   │
│  │  need_confirm: false                                       │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

3.4 多产品切分算法

┌─────────────────────────────────────────────────────────────────────┐
│                    多产品智能切分                                   │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  挑战:                                                              │
│  ─────────────────────────────────────────────────────────────────  │
│  "螺丝刀3把,螺丝m8 100斤,电线2平方红色2卷"                        │
│                                                                     │
│  简单按逗号切分可能出错的情况:                                       │
│  "螺丝刀,钳子等工具各5把"                                          │
│  → 按逗号切分会导致"螺丝刀"和"钳子等工具各5把"无法正确关联         │
│                                                                     │
│  解决方案: 递归最长匹配                                             │
│  ─────────────────────────────────────────────────────────────────  │
│                                                                     │
│  算法:                                                              │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │  function split_products(text):                             │   │
│  │    results = []                                              │   │
│  │    remaining = text                                          │   │
│  │                                                             │   │
│  │    while remaining is not empty:                            │   │
│  │        # 尝试最长匹配                                       │   │
│  │        match = find_longest_product(remaining)              │   │
│  │        if match:                                            │   │
│  │            results.append(match)                            │   │
│  │            remaining = remaining.replace(match, "", 1)     │   │
│  │        else:                                                │   │
│  │            # 无法识别,记录待处理                           │   │
│  │            results.append(remaining)                        │   │
│  │            break                                            │   │
│  │                                                             │   │
│  │    return results                                           │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
│  示例执行:                                                          │
│  ─────────────────────────────────────────────────────────────────  │
│  输入: "螺丝刀3把,螺丝m8 100斤,电线2平方红色2卷"                  │
│                                                                     │
│  第1轮:                                                            │
│  remaining = "螺丝刀3把,螺丝m8 100斤,电线2平方红色2卷"            │
│  最长匹配 = "螺丝刀3把" → results = ["螺丝刀3把"]                   │
│  remaining = "螺丝m8 100斤,电线2平方红色2卷"                       │
│                                                                     │
│  第2轮:                                                            │
│  remaining = "螺丝m8 100斤,电线2平方红色2卷"                       │
│  最长匹配 = "螺丝m8 100斤" → results = ["螺丝刀3把", "螺丝m8 100斤"]│
│  remaining = "电线2平方红色2卷"                                     │
│                                                                     │
│  第3轮:                                                            │
│  remaining = "电线2平方红色2卷"                                     │
│  最长匹配 = "电线2平方红色2卷" → results = ["螺丝刀3把", "螺丝m8 100斤", "电线2平方红色2卷"]│
│  remaining = ""                                                    │
│                                                                     │
│  完成!                                                              │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

四、意图分类与槽位填充

4.1 意图分类体系

┌─────────────────────────────────────────────────────────────────────┐
│                    场景化意图分类                                    │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  一级意图          │  二级意图      │  关键词/模式                    │
│ ────────────────────────────────────────────────────────────────── │
│                                                                     │
│  销售 (SALE)       │  create_order │ 需要/要/买/来/拿 + 客户名       │
│                    │  add_item     │ 加/再加/追加 + 产品             │
│                    │  query_price  │ 多少钱/价格/多少 money          │
│                    │  query_stock  │ 有没有/有没有货/库存           │
│                                                                     │
│  采购 (PURCHASE)   │  create_po    │ 向XX采购/从XX进货              │
│                    │  add_po_item  │ 加/追加 + 产品                 │
│                    │  query_po     │ 查采购单/采购记录              │
│                                                                     │
│  退货 (RETURN)     │  create_rma   │ 退 + 客户 + 产品               │
│                    │  query_rma    │ 查退货/退货记录               │
│                                                                     │
│  产品 (PRODUCT)    │  update_info  │ 改成/改为/调整为 + 产品 + 属性  │
│                    │  add_product │ 新增产品/添加产品              │
│                    │  delete_product│ 删除产品/下架产品             │
│                    │  query_product│ 查产品/产品资料               │
│                                                                     │
│  库存 (INVENTORY) │  adjust_stock│ 调整库存/盘点                   │
│                    │  query_stock │ 查库存/库存多少                │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

4.2 槽位填充模板

┌─────────────────────────────────────────────────────────────────────┐
│                    槽位填充模板                                      │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  销售单模板:                                                        │
│  ─────────────────────────────────────────────────────────────────  │
│  {                                                                │
│    "intent": "create_order",                                      │
│    "customer": {                                                   │
│      "name": "李文明",                                             │
│      "id": "cust_001" 或 null (待创建)                            │
│    },                                                              │
│    "items": [                                                      │
│      {                                                             │
│        "product_id": "prod_001",                                  │
│        "product_name": "螺丝刀",                                   │
│        "spec": "m4",                                              │
│        "brand": "鹏锐",                                            │
│        "color": null,                                              │
│        "quantity": 3,                                             │
│        "unit": "把"                                               │
│      },                                                            │
│      ...                                                           │
│    ],                                                              │
│    "confidence": 0.92,                                             │
│    "need_confirm": ["product_1", "product_3"]                      │
│  }                                                                │
│                                                                     │
│  采购单模板:                                                        │
│  ─────────────────────────────────────────────────────────────────  │
│  {                                                                │
│    "intent": "create_po",                                         │
│    "supplier": {                                                   │
│      "name": "湖南日升商贸",                                       │
│      "id": "sup_001" 或 null (待创建)                            │
│    },                                                              │
│    "items": [                                                      │
│      { "product_name": "...", "quantity": N, "unit": "..." }      │
│    ],                                                              │
│    "confidence": 0.95                                             │
│  }                                                                │
│                                                                     │
│  退货单模板:                                                        │
│  ─────────────────────────────────────────────────────────────────  │
│  {                                                                │
│    "intent": "create_rma",                                        │
│    "customer": { "name": "李文明", "id": "cust_001" },           │
│    "original_order_id": "order_20260515_001",                     │
│    "items": [                                                      │
│      {                                                             │
│        "product_id": "prod_001",                                  │
│        "quantity": 2,                                             │
│        "reason": "质量问题/不需要了/其他"                          │
│      }                                                            │
│    ],                                                              │
│    "confidence": 0.88                                             │
│  }                                                                │
│                                                                     │
│  产品修改模板:                                                      │
│  ─────────────────────────────────────────────────────────────────  │
│  {                                                                │
│    "intent": "update_product",                                    │
│    "product": {                                                    │
│      "name": "鹏锐螺丝刀 m4",                                     │
│      "id": "prod_001"                                              │
│    },                                                              │
│    "updates": [                                                    │
│      { "field": "stock", "old_value": "?", "new_value": 20 },    │
│      { "field": "sku", "old_value": "?", "new_value": "35286" }  │
│    ],                                                              │
│    "confidence": 0.94                                             │
│  }                                                                │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

五、置信度与确认机制

5.1 置信度评估

┌─────────────────────────────────────────────────────────────────────┐
│                    置信度评估体系                                    │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  置信度 = 产品匹配度 × 数量清晰度 × 人员识别度 × 意图明确度        │
│                                                                     │
│  ┌─────────────────────────────────────────────────────────────┐   │
│  │  维度              │  权重  │  评估标准                      │   │
│  ├─────────────────────────────────────────────────────────────┤   │
│  │  产品匹配度        │  40%   │  唯一匹配=1.0, 多匹配=0.7-0.9 │   │
│  │  数量清晰度        │  20%   │  明确=1.0, 模糊=0.5-0.8      │   │
│  │  人员识别度        │  20%   │  存在=1.0, 新建=0.8          │   │
│  │  意图明确度        │  20%   │  关键词=1.0, LLM=0.8-0.95   │   │
│  └─────────────────────────────────────────────────────────────┘   │
│                                                                     │
│  阈值处理:                                                          │
│  ─────────────────────────────────────────────────────────────────  │
│  置信度 >= 0.9 → 自动执行,无需确认                                │
│  置信度 0.7-0.9 → 语音确认:"您是要买这个吗?"                    │
│  置信度 < 0.7 → 人工处理                                           │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

5.2 确认话术模板

┌─────────────────────────────────────────────────────────────────────┐
│                    确认话术模板                                     │
├─────────────────────────────────────────────────────────────────────┤
│                                                                     │
│  销售确认:                                                          │
│  ─────────────────────────────────────────────────────────────────  │
│  "好的,李文明,购买以下商品:"                                     │
│  "1. 螺丝刀 3把"                                                  │
│  "2. 螺丝 M8 100斤"                                               │
│  "3. 电线 2.5平方 红色 2卷"                                       │
│  "确认开单吗?"                                                    │
│                                                                     │
│  产品待确认:                                                       │
│  ─────────────────────────────────────────────────────────────────  │
│  "您说的'螺丝刀',请问是:"                                        │
│  "1. 鹏锐十字螺丝刀 m4(¥15/把)"                                 │
│  "2. 史丹利螺丝刀 m6(¥22/把)"                                   │
│  "3. 大盛螺丝刀 m8(¥18/把)"                                     │
│                                                                     │
│  客户新建确认:                                                     │
│  ─────────────────────────────────────────────────────────────────  │
│  "李文明是新客户,是否创建并开单?"                                │
│                                                                     │
│  供应商新建确认:                                                   │
│  ─────────────────────────────────────────────────────────────────  │
│  "湖南日升商贸是新供应商,是否创建并下采购单?"                    │
│                                                                     │
│  退货确认:                                                         │
│  ─────────────────────────────────────────────────────────────────  │
│  "好的,李文明退以下商品:"                                        │
│  "螺丝刀 2把(原购价¥15/把,共¥30)"                              │
│  "确认退货吗?"                                                    │
│                                                                     │
│  产品修改确认:                                                     │
│  ─────────────────────────────────────────────────────────────────  │
│  "确认修改鹏锐螺丝刀 m4:"                                        │
│  "库存:10把 → 20把"                                              │
│  "货号:35123 → 35286"                                            │
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

六、总结

6.1 技术方案要点

模块 技术方案 延迟目标
场景分类 关键词规则 + LLM兜底 <10ms
人员识别 正则 + 知识库匹配 <5ms
产品切分 递归最长匹配算法 <10ms
产品规范化 正则 + Embedding + 商品库匹配 <50ms
槽位填充 模板 + 置信度评估 <10ms
确认机制 分级阈值处理 -

6.2 实施优先级

Phase 1: 核心销售场景
├── 意图分类(销售/采购/退货/修改)
├── 客户/供应商识别
├── 产品规范化
└── 单产品解析

Phase 2: 复杂场景
├── 多产品批量解析
├── 产品资料修改
└── 退货关联原单

Phase 3: 智能化提升
├── 自动纠错
├── 上下文补全
└── 历史偏好学习

6.3 关键挑战

挑战 解决方案
产品名称不标准 建立产品别名表,持续学习
数量单位歧义 结合产品类别推断默认单位
多产品关联 递归切分 + 确认机制
新客户/新供应商 先创建后确认模式
规格模糊 弹出选择确认
Left-click: follow link, Right-click: select node, Scroll: zoom
x