Taocarts 知识

📅 2026-02-23 系统功能介绍

代购源码中的AI智能选品引擎:从用户行为到订单转化的闭环设计

商品列表一到中午就卡死,LIKE '%keyword%' 全表扫描二十多万行——这不是性能问题,而是选品策略出了问题:上架了太多没人搜的SKU。代购团队每天花大量时间在1688和淘宝上“找爆款”,凭感觉选品,结果要么滞销占库存,要么热销款跟不上补货。

后来在代购源码的迭代中加入了一套AI智能选品与推荐引擎,把选品决策从“拍脑袋”变成了“数据驱动”。这套引擎的核心不是复杂的模型,而是三个闭环:用户画像 → 商品趋势 → 个性化推荐

一、用户行为采集与特征工程

推荐引擎的第一步是埋点。用户在代购站点的每一次搜索、浏览、加购、下单、弃单,都按事件类型写入Kafka(日单过千才需要,中小规模直接用Redis List即可)。关键字段:user_idproduct_idevent_typetimestampsource(PC/微信/小程序)。

// 埋点数据写入Redis队列(PHP)
function trackEvent($userId, $productId, $eventType) {

$event = json_encode([

'user_id' => $userId,

'product_id' => $productId,

'event_type' => $eventType,

'timestamp' => time(),

'source' => $_SERVER['HTTP_USER_AGENT'] ?? 'unknown'

]);

$redis->lpush('event_queue', $event);

// 每50条触发一次离线处理

if ($redis->llen('event_queue') >= 50) {

dispatch('ProcessEventsJob');

}
}

离线处理时,聚合每个用户的“商品类目偏好权重”。例如:用户浏览过3次日韩美妆、2次轻奢包、1次母婴,那么美妆类目的权重就是3/6=0.5。这个权重每天凌晨用Spark或简单的PHP脚本更新到MySQL的user_preference表。

隐性知识点:弃单事件比下单事件更重要。用户把商品加入购物车但没有支付,说明价格或运费超出了心理预期。系统可以将这类商品标记为“价格敏感型”,在推荐时优先展示优惠券或折扣信息。

二、商品趋势挖掘:1688热销数据+站内转化率

单纯的站内数据有冷启动问题——新用户没有历史行为。需要引入外部数据源。对接1688开放平台的商品搜索接口,按类目拉取“成交指数”和“飙升榜”。注意1688 API有调用频率限制(企业认证账号约50次/秒),所以拉取任务要分散在全天,每次只拉取Top 200的热门商品ID。

站内趋势计算则简单很多:统计最近7天每个商品的“加购率 = 加购次数 / 浏览次数”和“转化率 = 下单次数 / 浏览次数”。加购率高但转化率低,说明运费或关税有问题;两者都高,说明是真爆款。

// 计算商品趋势分(PHP)
function computeTrendScore($productId, $days = 7) {

$stats = DB::selectOne("

SELECT

SUM(view) AS views,

SUM(cart) AS carts,

SUM(order_completed) AS orders

FROM product_stats

WHERE product_id = ? AND date >= DATE_SUB(NOW(), INTERVAL $days DAY)

", [$productId]);

if ($stats['views'] < 10) return 0; // 数据不足

$cartRate = $stats['carts'] / $stats['views'];

$orderRate = $stats['orders'] / $stats['views'];

// 趋势分 = 加购率*0.4 + 转化率*0.6

return round($cartRate * 0.4 + $orderRate * 0.6, 4);
}

趋势分超过0.15(即15%的浏览转化为加购/下单)的商品,可标记为高潜力商品,推送到选品建议列表供运营参考。

三、个性化推荐引擎:协同过滤+实时排序

有了用户画像和商品趋势,推荐算法采用最轻量的Item-based协同过滤。离线阶段计算商品之间的相似度矩阵(基于用户行为共现),存入Redis。在线推荐时,根据用户最近浏览/购买的3个商品,找到最相似的Top 10候选商品,再结合商品趋势分和用户类目权重重新排序。

// 在线推荐(PHP + Redis)
function getRecommendations($userId, $limit = 10) {

// 1. 获取用户最近浏览的3个商品

$recent = DB::select("SELECT product_id FROM user_events

WHERE user_id = ? AND event_type = 'view'

ORDER BY timestamp DESC LIMIT 3", [$userId]);

if (empty($recent)) {

// 冷启动:返回趋势分最高的热门商品

return DB::select("SELECT product_id FROM product_trend WHERE trend_score > 0.15 ORDER BY trend_score DESC LIMIT ?", [$limit]);

}

// 2. 从Redis获取每个浏览商品的相似商品列表

$candidates = [];

foreach ($recent as $item) {

$sims = $redis->zrevrange("sim:{$item['product_id']}", 0, 20);

foreach ($sims as $simId) {

$candidates[$simId] = ($candidates[$simId] ?? 0) + 1;

}

}

// 3. 按共现次数排序,取前30个

arsort($candidates);

$candidateIds = array_slice(array_keys($candidates), 0, 30);

// 4. 按趋势分和用户类目权重二次排序

$userPref = DB::selectOne("SELECT category_weights FROM user_preference WHERE user_id = ?", [$userId]);

$weights = json_decode($userPref['category_weights'] ?? '[]', true);

$products = DB::select("SELECT * FROM products WHERE id IN (" . implode(',', $candidateIds) . ")");

usort($products, function($a, $b) use ($weights) {

$scoreA = $a['trend_score'] * ($weights[$a['category']] ?? 0.5);

$scoreB = $b['trend_score'] * ($weights[$b['category']] ?? 0.5);

return $scoreB <=> $scoreA;

});

return array_slice($products, 0, $limit);
}

这套算法的推荐效果优于随机展示,在日活几千的站点上表现稳定。

四、多端订单统一与支付聚合

AI引擎选出来的商品最终要通过订单系统转化为收入。代购站点通常有多个入口:微信小程序、PC商城、WhatsApp私域下单。后台需要用一套订单处理中心统一聚合。

// 订单创建时自动识别渠道
function createOrder($channel, $userId, $items, $paymentMethod) {

$orderId = generateOrderId();

DB::insert("INSERT INTO orders (id, user_id, channel, payment_method, total_amount, status)

VALUES (?, ?, ?, ?, ?, 'pending')",

[$orderId, $userId, $channel, $paymentMethod, $items['total']]);

// 调用统一支付网关

$paymentUrl = UnifiedPaymentGateway::pay($orderId, $items['total'], $paymentMethod);

return ['order_id' => $orderId, 'payment_url' => $paymentUrl];
}

支付网关需要聚合PayPal、Stripe、微信支付、支付宝等多种方式。不同渠道的汇率和手续费差异很大,所以价格计算引擎要实时调用汇率API(缓存10分钟)并加入缓冲系数。

通过插件市场的设计,新支付渠道可以随时接入,推荐、订单、支付数据统一回流,形成闭环。

隐性知识点:防止推荐系统的“信息茧房”

纯协同过滤会导致用户只看到相似的商品,长期下去推荐越来越窄。解决办法是在推荐列表中混入10%-20%的热门新品(趋势分高但从未被该用户浏览过)。这20%的曝光数据同时用于A/B测试新品的转化潜力。

另外,1688接口升级签名算法时,推荐引擎的商品信息拉取会失败。需要在定时任务中加入重试和降级:如果连续3次拉取热门商品失败,则完全依赖站内趋势分,避免推荐位空白。

这套流程上线后,选品效率和爆款命中率都有改善,客户看到的推荐也更贴合个人兴趣。物流追踪和仓库合包的自动化是选品之后的下一个环节。

wechat wechat qr