对话式智能导购设计.md 17.7 KB

对话式智能导购设计(服饰鞋帽独立站)

1. 核心场景与用户旅程

1.1 典型对话流程示例

场景 A:新用户首次咨询(需要完善档案)

用户: "我想买一件适合夏天的T恤"
导购: "好的,我来帮您找。请问您平时穿什么尺码?"
用户: "M码"
导购: "好的。您比较喜欢什么颜色?我们这里有白色、黑色、蓝色、灰色等"
用户: "白色或浅色都可以"
导购: "了解。您希望是休闲款还是运动款?"
用户: "休闲的"
导购: "好的,我为您找到了几款,价格在50-150元之间,您看看..."
[展示结果]

场景 B:老用户(已有档案,快速推荐)

用户: "帮我找一条牛仔裤"
导购: "好的,根据您的尺码偏好(30码),我为您推荐..."
[直接展示结果,如不满意再细化]

场景 C:模糊需求逐步明确

用户: "我想买件外套"
导购: "好的,请问是用于什么场合?日常通勤、运动、还是正式场合?"
用户: "日常通勤"
导购: "了解。您希望是薄款还是厚款?现在这个季节..."
用户: "薄款就行"
导购: "好的,我为您推荐几款适合通勤的薄外套..."

1.2 核心价值点

  • 降低搜索门槛:用户用自然语言表达,无需熟悉筛选器
  • 个性化合身推荐:通过尺码/合身偏好,减少退货率
  • 提升转化:多轮对话收集偏好,推荐更精准
  • 完善用户档案:每次对话积累偏好,后续推荐更准

2. 技术架构

2.1 整体架构(LLM + 商品检索 + 推荐引擎 + 用户档案)

┌─────────────────────────────────────────────────────────┐
│                    前端对话界面                          │
│  (Web Chat Widget / 小程序 / H5)                        │
└────────────────────┬────────────────────────────────────┘
                     │
                     ▼
┌─────────────────────────────────────────────────────────┐
│              对话式导购服务层 (Conversational Service)  │
│  ┌──────────────────────────────────────────────────┐   │
│  │  对话状态管理 (Dialogue State Tracker, DST)      │   │
│  │  - 当前意图 (intent)                              │   │
│  │  - 已收集的偏好 (collected_preferences)          │   │
│  │  - 待确认信息 (pending_confirmation)             │   │
│  │  - 对话历史 (dialogue_history)                   │   │
│  └──────────────────────────────────────────────────┘   │
│  ┌──────────────────────────────────────────────────┐   │
│  │  LLM 对话引擎 (核心)                              │   │
│  │  - 意图理解 (NLU)                                 │   │
│  │  - 实体抽取 (NER: 类目/颜色/尺码/价格/风格...)    │   │
│  │  - 回复生成 (NLG)                                 │   │
│  │  - 策略决策 (何时问问题/何时展示结果)             │   │
│  └──────────────────────────────────────────────────┘   │
│  ┌──────────────────────────────────────────────────┐   │
│  │  商品检索与推荐引擎                               │   │
│  │  - 基于偏好生成 filters/range_filters            │   │
│  │  - 调用搜索 API (复用现有 /search/)              │   │
│  │  - 结果排序与多样性控制                           │   │
│  └──────────────────────────────────────────────────┘   │
│  ┌──────────────────────────────────────────────────┐   │
│  │  用户档案管理 (User Profile)                      │   │
│  │  - 尺码偏好 (size_preferences)                    │   │
│  │  - 风格偏好 (style_preferences)                   │   │
│  │  - 价格偏好 (price_range)                         │   │
│  │  - 历史购买/浏览                                  │   │
│  └──────────────────────────────────────────────────┘   │
└────────────────────┬────────────────────────────────────┘
                     │
        ┌────────────┼────────────┐
        ▼            ▼            ▼
┌─────────────┐ ┌──────────┐ ┌──────────────┐
│  搜索 API   │ │ 商品库    │ │ 用户行为库   │
│  (现有)     │ │ (ES/DB)   │ │ (埋点数据)   │
└─────────────┘ └──────────┘ └──────────────┘

2.2 核心组件说明

2.2.1 对话状态管理 (DST)

  • 存储位置:Redis(key: dialogue:{tenant_id}:{user_key}:{session_id}
  • 状态结构json { "intent": "find_product|refine_search|ask_question|...", "collected_preferences": { "category": "T恤", "size": "M", "color": ["白色", "浅色"], "style": "休闲", "price_range": {"min": 50, "max": 150}, "occasion": "日常", "season": "夏季" }, "pending_confirmation": ["size", "color"], "dialogue_history": [ {"role": "user", "content": "..."}, {"role": "assistant", "content": "..."} ], "current_results": [...], // 当前推荐结果(如有) "turn_count": 3 }

2.2.2 LLM 对话引擎

  • 输入:用户消息 + 对话状态 + 商品库元信息(可选:类目列表、颜色列表、尺码列表)
  • 输出
    • 结构化输出(必须):intentextracted_entitiesaction(ask_question|show_results|clarify)
    • 自然语言回复(用于前端展示)
  • LLM 选择
    • 推荐:GPT-4o / Claude 3.5 Sonnet(强推理、结构化输出)
    • 成本优化:GPT-4o-mini / Claude Haiku(简单场景)
    • 私有化:Qwen2.5 / GLM-4(如需要)

2.2.3 商品检索与推荐引擎

  • 输入:对话状态中的 collected_preferences
  • 处理
    1. 将偏好转换为搜索 API 的 filters / range_filters
    2. 调用现有 /search/ API
    3. 结果排序(可结合用户历史、商品热度、多样性)
  • 输出:商品列表(含图片/标题/价格/链接)

2.2.4 用户档案管理

  • 存储位置:MySQL/Redis(key: user_profile:{tenant_id}:{user_key}
  • 字段结构json { "size_preferences": { "tops": "M", "bottoms": "30", "shoes": "42" }, "style_preferences": ["休闲", "简约"], "color_preferences": ["白色", "黑色", "灰色"], "price_range": {"min": 50, "max": 300}, "brand_preferences": ["品牌A", "品牌B"], "last_updated": "2026-01-21T10:00:00Z" }

3. 主要能力清单

3.1 核心能力(MVP 必须)

A. 意图理解与实体抽取 (NLU)

  • 能力:从用户自然语言中提取:
    • 类目:T恤、牛仔裤、运动鞋、外套...
    • 属性:颜色、尺码、材质、风格(休闲/正式/运动)
    • 价格:价格区间、预算
    • 场合:日常、通勤、运动、正式
    • 季节:春夏秋冬
    • 其他:品牌、折扣、新品等
  • 实现:LLM 做 NER(命名实体识别)+ 规则后处理(映射到商品库的 specifications)

B. 偏好收集与确认

  • 能力
    • 识别用户已表达的偏好
    • 判断哪些关键信息缺失(如尺码、颜色)
    • 生成追问问题(基于店铺商品库的可用选项)
  • 实现
    • LLM 判断缺失项
    • 从商品库分面(facets)获取可用选项(如"我们这里有白色、黑色、蓝色...")
    • 生成自然语言问题

C. 商品检索与筛选

  • 能力
    • 将对话偏好转换为搜索 API 的 filters / range_filters
    • 调用搜索 API 获取候选
    • 结果排序(相关性 + 个性化 + 多样性)
  • 实现
    • 偏好 → filters 映射规则(可配置)
    • 复用现有 /search/ API
    • 排序可结合用户档案(如优先推荐用户偏好的品牌/价格带)

D. 结果展示与解释

  • 能力
    • 生成推荐理由("根据您的尺码偏好和风格,我为您推荐...")
    • 展示商品卡片(图片/标题/价格/链接)
    • 支持继续对话("不满意?告诉我您想要什么样的")
  • 实现:LLM 生成回复 + 前端渲染商品卡片

E. 用户档案管理

  • 能力
    • 从对话中提取并持久化偏好(尺码/风格/价格/品牌)
    • 后续对话自动使用档案(减少重复询问)
    • 档案更新(用户纠正/新偏好)
  • 实现
    • 对话结束后更新 user_profile
    • 下次对话时作为上下文输入 LLM

3.2 进阶能力(后续迭代)

F. 合身推荐(Size Fit)

  • 能力
    • 基于用户历史购买/浏览,学习"合身偏好"(如"这个品牌M码偏大,建议选S")
    • 跨品牌尺码映射(如"您平时穿Nike 42码,这个品牌建议选41码")
  • 实现
    • 需要用户历史数据(购买/退货/评价)
    • 可做简单的"品牌-尺码映射表"(运营配置)
    • 或训练轻量模型(用户尺码偏好 → 商品推荐尺码)

G. 搭配推荐(Outfit Recommendation)

  • 能力
    • 用户选中一件商品后,推荐搭配(如"这件T恤可以搭配这条牛仔裤")
    • 基于商品属性相似度 + 历史共购数据
  • 实现
    • 商品 embedding(文本/图片)
    • 共购规则(FBT)
    • LLM 生成搭配理由

H. 多轮对话策略优化

  • 能力
    • 智能判断"何时该问问题" vs "何时该展示结果"
    • 避免过度询问(用户流失)
  • 实现
    • 规则:关键信息(尺码/类目)缺失时必问;可选信息(颜色/风格)有足够候选时可不问
    • 或训练策略模型(RL/bandit)

I. 上下文记忆与纠错

  • 能力
    • 记住对话中提到的商品("刚才那件白色的")
    • 支持用户纠正("不对,我要的是黑色")
  • 实现
    • 对话状态中维护 mentioned_items
    • LLM 理解指代消解(coreference resolution)

4. 数据层需求

4.1 对话事件表(DWD 层)

  • dwd_conversation_turn:每次对话轮次

    • tenant_id, user_key, session_id, conversation_id
    • turn_number, role (user/assistant), content
    • intent, extracted_entities_json
    • action (ask_question|show_results|clarify)
    • created_at
  • dwd_conversation_result:对话产生的推荐结果

    • tenant_id, conversation_id, turn_number
    • item_id, position, clicked (是否被点击)
    • exposed_at

4.2 用户档案表(DIM 层)

  • dim_user_profile:用户偏好档案
    • tenant_id, user_key
    • size_preferences_json
    • style_preferences_json
    • color_preferences_json
    • price_range_json
    • brand_preferences_json
    • last_updated, created_at

4.3 商品库元信息(用于 LLM 上下文)

  • 类目列表:从商品库聚合 category1_name, category2_name, category3_name
  • 颜色列表:从 specifications 聚合 name="color" 的所有 value
  • 尺码列表:从 specifications 聚合 name="size" 的所有 value
  • 风格标签:从 tags 或自定义字段聚合

注意:这些元信息需要定期更新(如每天),作为 LLM 的"知识库"输入,确保推荐的商品确实存在。


5. 技术实现要点

5.1 LLM Prompt 设计(关键)

系统提示词模板

你是一个专业的服饰导购助手,帮助用户在店铺中找到合适的商品。

店铺信息:
- 类目:{category_list}
- 颜色:{color_list}
- 尺码:{size_list}
- 风格:{style_list}

用户档案(如有):
{user_profile_json}

当前对话状态:
{conversation_state_json}

任务:
1. 理解用户意图
2. 提取商品偏好(类目/颜色/尺码/价格/风格/场合等)
3. 判断缺失的关键信息
4. 生成自然语言回复

输出格式(JSON):
{
  "intent": "find_product|refine_search|ask_question|...",
  "extracted_entities": {
    "category": "...",
    "color": [...],
    "size": "...",
    "price_range": {"min": ..., "max": ...},
    "style": "...",
    "occasion": "..."
  },
  "action": "ask_question|show_results|clarify",
  "missing_info": ["size", "color"],  // 缺失的关键信息
  "reply": "自然语言回复"
}

5.2 偏好 → 搜索 Filters 映射规则

def preferences_to_filters(collected_preferences, user_profile):
    filters = {}
    range_filters = {}

    # 类目
    if collected_preferences.get("category"):
        filters["category_name"] = collected_preferences["category"]

    # 颜色(specifications)
    if collected_preferences.get("color"):
        filters["specifications"] = [
            {"name": "color", "value": c} 
            for c in collected_preferences["color"]
        ]

    # 尺码(specifications)
    if collected_preferences.get("size"):
        # 优先用对话中的,否则用用户档案
        size = collected_preferences.get("size") or user_profile.get("size_preferences", {}).get("tops")
        if size:
            filters.setdefault("specifications", []).append({"name": "size", "value": size})

    # 价格区间
    if collected_preferences.get("price_range"):
        pr = collected_preferences["price_range"]
        range_filters["min_price"] = {"gte": pr.get("min", 0), "lte": pr.get("max", 9999)}

    # 风格(tags 或自定义字段)
    if collected_preferences.get("style"):
        filters["tags"] = collected_preferences["style"]

    return filters, range_filters

5.3 对话流程控制(状态机)

初始状态: waiting_for_intent
  ↓ 用户输入
意图理解: extract_intent_and_entities
  ↓
判断缺失信息:
  - 关键信息缺失(如尺码)→ ask_question
  - 有足够信息 → show_results
  ↓
展示结果后:
  - 用户满意 → end_conversation
  - 用户不满意/继续提问 → refine_search (更新偏好,重新检索)

6. 产品形态建议

6.1 前端交互方式

  • Web Chat Widget:右下角悬浮聊天框(类似客服)
  • 全屏对话页:独立页面,适合移动端
  • 搜索结果页集成:在搜索结果页提供"智能导购"入口

6.2 回复展示格式

  • 纯文本回复:LLM 生成的自然语言
  • 商品卡片:展示推荐结果(图片/标题/价格/加购按钮)
  • 选项按钮:快速选择(如"白色"、"黑色"、"蓝色")
  • 追问输入框:用户继续输入

7. 评估指标

7.1 对话质量

  • 平均对话轮次:完成一次推荐的平均轮次(越少越好,但需平衡信息收集)
  • 用户满意度:对话结束后的反馈(如"有用"/"无用")
  • 推荐点击率:对话推荐的商品被点击的比例

7.2 业务指标

  • 转化率:对话用户 → 加购/购买的转化
  • AOV 提升:对话用户的平均订单价值 vs 非对话用户
  • 档案完善率:用户档案被更新的比例

8. 实施优先级

Phase 1 (MVP - 2-3个月)

  • ✅ 基础对话能力(LLM + 意图理解 + 实体抽取)
  • ✅ 偏好收集(尺码/颜色/类目/价格)
  • ✅ 商品检索(偏好 → filters → 搜索 API)
  • ✅ 结果展示(商品卡片)
  • ✅ 用户档案(基础字段:尺码/颜色/价格)

Phase 2 (增强 - 3-4个月)

  • ✅ 合身推荐(尺码映射)
  • ✅ 搭配推荐
  • ✅ 多轮对话策略优化
  • ✅ 上下文记忆

Phase 3 (优化 - 持续)

  • ✅ 个性化排序(结合用户历史)
  • ✅ A/B 测试(不同 prompt/策略)
  • ✅ 跨租户知识共享(可选)

9. 技术栈建议

  • LLM 服务:OpenAI API / Anthropic API / 私有化部署(Qwen/GLM)
  • 对话状态存储:Redis
  • 用户档案存储:MySQL + Redis(缓存)
  • 商品检索:复用现有搜索 API
  • 后端框架:Python FastAPI(与现有 API 保持一致)
  • 前端:React/Vue + WebSocket(实时对话)

10. 注意事项

  1. 成本控制:LLM API 调用成本(每次对话可能 3-10 轮),建议:

    • 简单场景用轻量模型(GPT-4o-mini)
    • 复杂场景用强模型(GPT-4o)
    • 缓存常见问题回复
  2. 延迟:LLM 生成回复通常 1-3 秒,需要:

    • 前端显示"正在思考..."
    • 考虑流式输出(streaming)
  3. 商品库同步:确保 LLM 的"知识库"(类目/颜色/尺码列表)与商品库实时同步

  4. 多语言:如店铺支持多语言,LLM 需要支持对应语言

  5. 隐私合规:用户档案数据需符合 GDPR/CCPA 等要求