对话式智能导购设计.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 对话引擎
- 输入:用户消息 + 对话状态 + 商品库元信息(可选:类目列表、颜色列表、尺码列表)
- 输出:
- 结构化输出(必须):
intent、extracted_entities、action(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 - 处理:
- 将偏好转换为搜索 API 的
filters/range_filters - 调用现有
/search/API - 结果排序(可结合用户历史、商品热度、多样性)
- 将偏好转换为搜索 API 的
- 输出:商品列表(含图片/标题/价格/链接)
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 获取候选
- 结果排序(相关性 + 个性化 + 多样性)
- 将对话偏好转换为搜索 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_idturn_number,role(user/assistant),contentintent,extracted_entities_jsonaction(ask_question|show_results|clarify)created_at
dwd_conversation_result:对话产生的推荐结果tenant_id,conversation_id,turn_numberitem_id,position,clicked(是否被点击)exposed_at
4.2 用户档案表(DIM 层)
dim_user_profile:用户偏好档案tenant_id,user_keysize_preferences_jsonstyle_preferences_jsoncolor_preferences_jsonprice_range_jsonbrand_preferences_jsonlast_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. 注意事项
成本控制:LLM API 调用成本(每次对话可能 3-10 轮),建议:
- 简单场景用轻量模型(GPT-4o-mini)
- 复杂场景用强模型(GPT-4o)
- 缓存常见问题回复
延迟:LLM 生成回复通常 1-3 秒,需要:
- 前端显示"正在思考..."
- 考虑流式输出(streaming)
商品库同步:确保 LLM 的"知识库"(类目/颜色/尺码列表)与商品库实时同步
多语言:如店铺支持多语言,LLM 需要支持对应语言
隐私合规:用户档案数据需符合 GDPR/CCPA 等要求