商场导购机器人帮助顾客找店铺、查促销、规划路线,提升购物体验:
| 功能 | 描述 | 技术 |
|---|---|---|
| 店铺搜索 | 按名称/类别搜索 | NLU+数据库 |
| 路线规划 | 最优购物路线 | TSP+楼层规划 |
| 促销推送 | 个性化优惠信息 | 画像匹配 |
| 活动推荐 | 相关活动信息 | 兴趣匹配 |
import json, random
class MallGuideRobot:
"""商场导购机器人"""
def __init__(self):
self.name = "MallBot-01"
self.floors = {
"B1": {"name": "停车场", "shops": [], "facilities": ["停车场","电梯"]},
"1F": {"name": "美妆珠宝", "shops": [
{"name": "兰蔻", "category": "美妆", "location": "A01"},
{"name": "周大福", "category": "珠宝", "location": "A05"},
{"name": "丝芙兰", "category": "美妆", "location": "A10"},
], "facilities": ["服务台","电梯","洗手间"]},
"2F": {"name": "女装鞋包", "shops": [
{"name": "ZARA", "category": "女装", "location": "B01"},
{"name": "耐克", "category": "运动", "location": "B05"},
{"name": "百丽", "category": "鞋", "location": "B10"},
], "facilities": ["电梯","洗手间","母婴室"]},
"3F": {"name": "男装童装", "shops": [
{"name": "优衣库", "category": "休闲", "location": "C01"},
{"name": "巴拉巴拉", "category": "童装", "location": "C05"},
], "facilities": ["电梯","洗手间"]},
"4F": {"name": "餐饮娱乐", "shops": [
{"name": "海底捞", "category": "火锅", "location": "D01"},
{"name": "星巴克", "category": "咖啡", "location": "D05"},
{"name": "万达影城", "category": "影院", "location": "D10"},
], "facilities": ["电梯","洗手间"]},
}
self.promotions = [
{"shop": "兰蔻", "title": "满500减100", "valid": "本周末"},
{"shop": "耐克", "title": "新品8折", "valid": "本周"},
{"shop": "海底捞", "title": "新店开业6.8折", "valid": "本月"},
]
def search_shop(self, query):
"""搜索店铺"""
results = []
for floor, info in self.floors.items():
for shop in info["shops"]:
if query.lower() in shop["name"].lower() or query in shop["category"]:
results.append({**shop, "floor": floor, "floor_name": info["name"]})
return results
def recommend(self, category=None, budget=None):
"""推荐店铺"""
candidates = []
for floor, info in self.floors.items():
for shop in info["shops"]:
if category and shop["category"] != category:
continue
candidates.append({**shop, "floor": floor})
return candidates
def get_promotions(self, shop_name=None):
"""获取促销信息"""
if shop_name:
return [p for p in self.promotions if p["shop"] == shop_name]
return self.promotions
def plan_route(self, shops_to_visit):
"""规划购物路线"""
route = []
for shop in shops_to_visit:
for floor, info in self.floors.items():
for s in info["shops"]:
if s["name"] == shop:
route.append({"shop": shop, "floor": floor, "location": s["location"]})
# 按楼层排序
floor_order = ["1F","2F","3F","4F"]
route.sort(key=lambda x: floor_order.index(x["floor"]) if x["floor"] in floor_order else 99)
return route
robot = MallGuideRobot()
print("商场导购机器人模拟")
print("=" * 55)
print("\n🔍 搜索'美妆':")
for r in robot.search_shop("美妆"):
print(f" {r['name']} ({r['floor']} {r['floor_name']}) {r['location']}")
print("\n🔍 搜索'耐克':")
for r in robot.search_shop("耐克"):
print(f" {r['name']} ({r['floor']} {r['floor_name']}) {r['category']}")
print("\n📋 当前促销:")
for p in robot.get_promotions():
print(f" 🏷️ {p['shop']}: {p['title']} ({p['valid']})")
print("\n🗺️ 购物路线(兰蔻→耐克→海底捞):")
route = robot.plan_route(["兰蔻","耐克","海底捞"])
for i, stop in enumerate(route):
print(f" {i+1}. {stop['shop']} ({stop['floor']} {stop['location']})")
print("\n✅ 商场导购验证通过")
class MallVisitorProfile:
"""顾客画像与个性化推荐"""
def __init__(self):
self.profiles = {}
self.preference_categories = ["美妆","女装","男装","运动","童装","珠宝","餐饮","咖啡","影院"]
self.category_shops = {
"美妆": ["兰蔻","丝芙兰"], "女装": ["ZARA"], "运动": ["耐克"],
"童装": ["巴拉巴拉"], "珠宝": ["周大福"], "餐饮": ["海底捞"],
"咖啡": ["星巴克"], "休闲": ["优衣库"],
}
def create_or_update(self, visitor_id, interests=None, visit_history=None):
"""创建或更新顾客画像"""
if visitor_id not in self.profiles:
self.profiles[visitor_id] = {
"interests": [], "visit_count": 0, "visit_history": [],
"preferred_floors": [], "last_visit": None
}
profile = self.profiles[visitor_id]
if interests:
for interest in interests:
if interest not in profile["interests"]:
profile["interests"].append(interest)
if visit_history:
profile["visit_history"].extend(visit_history)
profile["visit_count"] += 1
# 更新偏好楼层
floor_map = {"美妆":"1F","珠宝":"1F","女装":"2F","运动":"2F",
"男装":"3F","童装":"3F","餐饮":"4F","咖啡":"4F"}
profile["preferred_floors"] = list(set(
floor_map.get(i,"") for i in profile["interests"] if i in floor_map
))
return profile
def recommend(self, visitor_id):
"""个性化推荐"""
profile = self.profiles.get(visitor_id)
if not profile or not profile["interests"]:
return {"type": "default", "message": "推荐从1楼开始逛,每层都有惊喜!", "shops": []}
recommended = []
for interest in profile["interests"]:
shops = self.category_shops.get(interest, [])
for shop in shops:
recommended.append({"shop": shop, "category": interest})
return {"type": "personalized", "interests": profile["interests"],
"floors": profile["preferred_floors"], "shops": recommended}
vp = MallVisitorProfile()
print("顾客画像与个性化推荐")
print("=" * 55)
vp.create_or_update("V001", ["美妆","餐饮","咖啡"])
vp.create_or_update("V002", ["运动","休闲"])
vp.create_or_update("V003") # 新顾客
for vid in ["V001","V002","V003"]:
rec = vp.recommend(vid)
print(f"\n📋 顾客{vid}:")
if rec["type"] == "personalized":
print(f" 兴趣: {', '.join(rec['interests'])}")
print(f" 推荐楼层: {', '.join(rec['floors'])}")
print(f" 推荐店铺: {', '.join(s['shop'] for s in rec['shops'])}")
else:
print(f" {rec['message']}")
print("\n✅ 顾客画像验证通过")
class MallEventSystem:
"""商场活动推送系统"""
def __init__(self):
self.events = [
{"name": "周末狂欢", "type": "promotion", "floor": "全楼层",
"description": "全场满300减50", "start": "周六10:00", "end": "周日22:00"},
{"name": "新品发布会", "type": "event", "floor": "1F",
"description": "兰蔻新品首发体验", "start": "周五14:00", "end": "周五17:00"},
{"name": "亲子乐园", "type": "activity", "floor": "3F",
"description": "巴拉巴拉亲子DIY", "start": "周六10:00", "end": "周六12:00"},
{"name": "美食节", "type": "promotion", "floor": "4F",
"description": "餐饮5折起", "start": "本周", "end": "本周末"},
]
self.push_rules = {
"promotion": {"trigger": "路过对应楼层", "frequency": "一次"},
"event": {"trigger": "兴趣匹配", "frequency": "一次"},
"activity": {"trigger": "带小孩顾客", "frequency": "一次"},
}
def get_relevant_events(self, visitor_interests=None, current_floor=None, with_children=False):
"""获取相关活动"""
relevant = []
for event in self.events:
score = 0
if current_floor and (event["floor"] == current_floor or event["floor"] == "全楼层"):
score += 2
if visitor_interests:
for interest in visitor_interests:
if interest in event["description"]:
score += 1
if with_children and "亲子" in event["description"]:
score += 3
if score > 0:
relevant.append({**event, "relevance": score})
return sorted(relevant, key=lambda x: -x["relevance"])
es = MallEventSystem()
print("商场活动推送系统")
print("=" * 55)
print("\n2楼顾客(兴趣:运动)的相关活动:")
for e in es.get_relevant_events(["运动"], "2F"):
print(f" 🎯 {e['name']} ({e['floor']}) - {e['description']} [相关度:{e['relevance']}]")
print("\n带小孩顾客的相关活动:")
for e in es.get_relevant_events(["童装"], "3F", with_children=True):
print(f" 👨👩👧 {e['name']} ({e['floor']}) - {e['description']} [相关度:{e['relevance']}]")
print("\n✅ 活动推送验证通过")
| 挑战 | 方案 |
|---|---|
| 人多拥挤 | 社交导航+低速模式 |
| 声音嘈杂 | 远场降噪+屏幕辅助 |
| 店铺变动 | 云端地图实时更新 |
| 节假日人流 | 动态路线+避峰引导 |
实现智能路线优化:根据实时人流量数据,避开拥挤区域,推荐最舒适购物路线。
设计AR导航:机器人屏幕显示AR箭头引导顾客到目标店铺。
实现购物清单管理:顾客输入购物清单,机器人规划最优路线并跟踪完成进度。