001b4889
tangwang
1. docs
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
|
# 对话式智能导购设计(服饰鞋帽独立站)
## 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`
- **处理**:
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 映射规则
```python
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 等要求
|