一、立项背景与目标
传统电商搜索有三个痛点:意图理解弱,无法理解"适合跑步用的降噪耳机"中"跑步用"指向运动耳机品类;缺乏个性化,新老用户看到相同结果;搜索与对话割裂,无法在同一界面完成购物闭环。
项目目标:中文查询映射三级品类树(8个一级34个二级约120个叶子),准确率超90%;基于三层画像做个性化重排;多轮AI对话集成情感识别;CDC加Flink实时更新画像延迟小于1分钟;从LLM输出自动提取规则减少依赖;全链路异步有超时降级保护。技术栈:FastAPI、MySQL、ES、Redis、DeepSeek、BGE、Kafka+Flink、Vue3+TypeScript。
二、软件功能与核心模块
意图识别引擎是系统核心,六策略级联匹配。ChatIntent用正则加轻量LLM过滤闲聊;LLMIntent用DeepSeek做层次剪枝从一级品类逐层下钻到叶子;另配备AC自动机、模糊匹配、规则字典、语义匹配四种后备。置信度超0.8自动提取品牌同义词属性规则入库,同一规则确认三次升级为可信并刷新策略缓存,后续相同查询不再调用LLM,形成自进化闭环。查询缓存用LRU加TTL加编辑距离模糊去重。
搜索引擎多路召回加混合排序。ES与SQL并行召回去重合并。意图排序满分150(关键词50、价格40、品牌35、品类25),画像排序满分100(七个维度各10到20分),最终分等于基础100加两者。
AI对话四步编排:情感识别、带上下文意图识别、商品召回、LangChain回复生成。词典规则支持五种情感亚毫秒级。LLM不可用三级模板降级。
画像三层:人口画像63维缓存24小时,会话画像聚合短期行为缓存15分钟,统计画像TF-IDF计算品类亲和度和价格分位数缓存1小时。权重根据订单数动态协商。
实时流计算:MySQL CDC经Kafka到Flink,HOP窗口聚合会话行为,全量聚合计算统计特征写回画像表。
三、业务流程与功能路径
搜索路径:查LRU缓存,并行构建画像500ms超时Redis不可用降级MySQL,策略级联匹配叶子品类提取关键词价格,置信度达标自动提取规则,品类展开ES加SQL并行召回去重合并,混合排序返回,点击浏览行为追踪更新满意度。
对话多轮:首轮经情感意图识别触发商品召回,LLM根据画像和商品摘要生成推荐。次轮带历史上下文理解指代比较意图,每步可失败不阻塞后续。
CDC路径:MySQL变更被Debezium或Python轮询捕获序列化推送Kafka,Flink消费聚合计算写入画像表,下次搜索自动体现新偏好。
全网状降级:Redis不可用降级MySQL,LLM超时降级后备策略,ES不可用SQL独立可用,全部失败返回空结果不抛异常。
一、整体架构与设计思路
DDD四层架构:API层路由参数校验,应用层编排流程,领域层纯业务逻辑不依赖框架,基础设施层数据库和外部调用。核心设计原则:策略模式加级联短路,六种意图策略按快到慢排列命中即退出;空对象模式降级,依赖不可用返回安全空对象而非null;组合根手动依赖注入不引入框架保持透明;惰性单例所有服务懒加载。
技术栈:意图识别用DeepSeek加AC自动机加BGE向量;搜索用ES中文ngram加MySQL品类过滤;AI对话用LangChain加词典情感分类;画像用MySQL加Redis双层缓存;流计算用Kafka加Flink SQL Gateway。
二、我负责的模块
意图识别:6策略级联,品类树8一级34二级约120叶子。ChatIntent小于100毫秒,LLMIntent500毫秒到2秒,AC自动机亚毫秒,模糊小于1毫秒,语义小于20毫秒。缓存LRU5000条TTL30分钟,编辑距离阈值0.70。置信度0.80触发规则提取,确认3次升级可信。
搜索:ES和SQL并行召回去重。意图150分(关键词50分精确子串加CJK重叠加向量三级、价格40分余弦衰减、品牌35分、品类25分),画像100分(七维各10到20分),基础100分最高350分。无画像按价格升序冷启动。
画像:三层,人口63维TTL24小时,会话最多10会话TTL15分钟,统计7维TF-IDF加价格分位数TTL1小时。新用户小于3单统计权重0.2,老用户大于等于10单权重0.7,总超时500毫秒。
对话:5种情感亚毫秒词典分类,加载5秒超时降级。速率限制滑动窗口60秒10次每IP。生成15秒超时三级模板降级。
CDC:HOP窗口24小时5分钟步长,Debezium为主Python轮询为备。
三、难点与解决方案
难点一:中文意图歧义。"苹果"可能手机或水果,"华为耳机便宜"修饰词干扰。方案用LLM层次剪枝逐层下钻,CJK字符重叠去修饰后缀后比较,品牌词优先减少歧义。
难点二:LLM高延迟高成本。每次超500毫秒费用不可控。方案级联把LLM放第二步规则优先过滤,缓存避免重复调用,自动规则提取运行越久LLM调用越少形成闭环。
难点三:用户冷启动。无画像排序无参考。方案无画像按价格升序降低门槛,权重协商新用户80%依赖会话画像快速学习,老用户70%依赖统计画像做推荐。
难点四:实时画像延迟。下单后搜索结果未反映新偏好。方案CDC到Flink端到端小于1分钟,HOP5分钟步长更新,Flink反压加Kafka磁盘缓冲不丢数据。
难点五:系统可用性。单点故障不应导致用户可见错误。方案全网状降级,Redis不可用降级MySQL仅增10到50毫秒,LLM超时后备策略接管,ES不可用SQL独立,全部失败返回空结果不抛异常