推荐一个牛逼的商品智能推荐系统
前言
最近缺项目经历想快速提升项目实战能力(包含多个AI项目),或者最近找工作,或者想学习AI的小伙伴,可以看看下面👇🏻的这个链接(或许真的能够帮到你)。
最近我又肝了一个新项目:商品智能推荐系统。
这不是一个简单的"商品展示页 + 搜索框"的电商壳子。
而是一套真正落地了 AI 大模型 + RAG 向量检索 + Graph 工作流编排 + 语义路由 的智能推荐导购系统。
用户的购物需求不再是冷冰冰的关键词搜索,而是像跟一个懂你的导购聊天一样自然。
"帮我推荐一款5000块以内、适合打游戏的轻薄本",系统能理解你的预算、场景、偏好,给出精准推荐,还能直接帮你加购物车、下单、申请售后。
这个项目非常实用,可以直接写到简历中,很加分。
一、项目介绍
这个项目是干什么的?
简单说:让 AI 真正帮你逛商场。
你平时网购是不是这样的:
- 打开电商 App → 搜索框里敲关键词 → 翻十几页商品 → 一个一个点进去看详情 → 对比价格和参数 → 犹豫半天不知道该买哪个
- 想退货了 → 找售后入口 → 填单子 → 等审核 → 寄回去 → 几天了还没退款
- 想看看最近有什么值得买的 → 首页推荐全是你不感兴趣的东西
商品智能推荐系统就是来解决这些问题的。
它把 AI 大模型、向量检索、知识图谱、工作流引擎全部整合到一起,提供了一个自然语言驱动的智能购物体验:
- 你说"推荐一款3000以内的降噪耳机",AI 直接给你 5 款精选,带推荐理由、价格、销量
- 你说"把第一个加到购物车",系统自动识别"第一个"是哪个商品,帮你加进去
- 你说"帮我下单",系统引导你一步步确认地址、优惠券、支付方式
- 你说"我买的耳机有杂音想退货",系统自动帮你走售后流程
它不是 ChatGPT 套壳,而是一个真正理解电商业务的 AI Agent。
项目规模有多大?
| 维度 | 数据 |
|---|---|
| 后端微服务模块 | 1 个独立服务 + 对接 4 个外部微服务 |
| Java 源文件 | 80+ 个 |
| REST API 端点 | 25+ 个 |
| 前端页面 | 9 个(Thymeleaf 模板) |
| 数据库 | 3 种(PostgreSQL + pgvector、Redis、MongoDB) |
| 中间件集成 | 5 种(Nacos、Redis、PostgreSQL/pgvector、MongoDB、DashScope AI) |
| 后端代码量 | 10,000+ 行 Java |
| 前端代码量 | 6,000+ 行 HTML/CSS/JavaScript |
| 总代码量 | 16,000+ 行 |
它是按照阿里巴巴 Java 开发规范、遵循企业级架构标准的生产级系统。
系统架构一览

二、使用技术
后端技术栈
| 技术 | 版本 | 在项目里的实际用途 |
|---|---|---|
| Java | 17 | 基础运行环境 |
| Spring Boot | 3.4.2 | 所有功能的基础框架 |
| Spring Cloud | 2024.0.0 | 微服务治理框架 |
| Spring Cloud Alibaba | 2023.0.1.0 | Nacos 注册中心 & 配置中心集成 |
| Spring Cloud OpenFeign | - | 声明式微服务间调用 |
| Spring AI | 1.0.0-M6 | LLM 集成框架,统一模型调用 |
| spring-ai-alibaba-starter | 1.0.0-M6.1 | 阿里云 DashScope 适配 |
| spring-ai-alibaba-graph-core | 1.0.0.4 | Graph 工作流编排引擎 |
| PostgreSQL + pgvector | - | 向量数据库,HNSW 索引,余弦相似度检索 |
| Redis | 7.x | 推荐结果缓存、购物车选中状态 |
| MongoDB | 6.x | 对话历史、工作流状态持久化 |
| Nacos | - | 服务注册发现 + 配置中心 |
| JWT (JJWT) | 0.12.3 | 无状态身份认证 |
| Thymeleaf | - | 服务端模板渲染 |
| Knife4j / Swagger | 2.2.22 | API 文档注解 |
AI / LLM 技术栈
| 技术 | 在项目里的实际用途 |
|---|---|
| 阿里云 DashScope | LLM 推理(qwen-plus-latest),文本嵌入(text-embedding-v2) |
| Spring AI ChatClient | 统一 LLM 调用接口,支持工具调用(Function Calling) |
| Spring AI Advisor | 对话记忆注入、RAG 上下文增强 |
| pgvector | 1536 维向量存储,HNSW 索引,余弦相似度检索 |
| 语义路由 | Embedding + 质心 + 余弦相似度,轻量级意图分类 |
| Graph 工作流 | StateGraph 有状态流程编排,支持断点续跑、重试、取消 |
前端技术栈
| 技术 | 在项目里的实际用途 |
|---|---|
| Thymeleaf | 服务端模板引擎,动态渲染页面 |
| HTML5 + CSS3 | Flexbox 布局、CSS 变量主题、响应式设计 |
| JavaScript (ES6+) | Fetch API、异步数据加载、DOM 操作 |
| Font Awesome 6.4 | 图标系统 |
| CSS Grid + Flexbox | 商品卡片瀑布流、响应式列表 |
中间件 & 基础设施

三、功能介绍
我把最核心的功能一个一个拆开来说。
3.1 AI 智能对话导购
这是最硬核的部分。用户不再用搜索框,而是直接跟 AI 聊天:
- 自然语言商品推荐:"帮我推荐几款适合学生党的平价机械键盘"
- 对话式加购:"把第二个加到购物车"
- 对话式下单:"帮我结算购物车"
- 对话式售后:"我买的耳机坏了想退货"
每一次对话,系统都会经过意图识别、上下文增强、工具调用、结果生成四个阶段,给用户一个完整且可操作的回复。
3.2 双层语义路由
这不是简单的"关键词匹配 if-else"。
系统实现了两阶段意图分类机制:
第一层 - 粗粒度分类(Embedding + 质心 + 余弦相似度):
| 路由类型 | 含义 | 示例语句 | 处理方式 |
|---|---|---|---|
| WORKFLOW | 多步骤业务流程 | "我要下单"、"想退货" | Graph 工作流引擎 |
| TOOL | 确定性操作 | "查看购物车"、"取消订单" | NLU 解析 + API 调用 |
| RECOMMENDATION | 商品推荐 | "推荐一款耳机" | 向量检索 + LLM 生成 |
| CHAT | 开放域对话 | "今天天气怎么样" | RAG 增强的 LLM 对话 |
第二层 - 工作流子分类(当第一层路由到 WORKFLOW 时):
- ORDER_CHECKOUT:下单结算流程
- AFTER_SALE:售后/退货/退款流程
- REVIEW:商品评价流程
- ADDRESS_CHANGE:修改地址流程
核心实现:每个路由类型预先定义一组典型例句,通过 text-embedding-v2 模型计算 embedding 向量,取均值作为"质心向量"。运行时将用户输入向量与各质心计算余弦相似度,取最高分路由。低置信度结果自动降级为 CHAT 兜底。
此外,系统还内置了正则规则覆盖:像"推荐耳机"、"加到购物车"这类高频意图,直接用正则匹配,绕过语义模型,确保零延迟响应。
3.3 Graph 工作流引擎
这不是简单的一问一答,而是有状态的多轮对话流程:
基于 spring-ai-alibaba-graph-core 的 StateGraph 实现,支持:
- 下单结算流程:收集商品 → 确认订单 → 校验库存 → 提交订单 → 支付引导
- 售后流程:收集订单号和原因 → 规则校验 → 提交退货/退款申请
- 评价流程:收集订单号 + 评分 + 内容 → 提交评价
- 地址变更流程:收集订单号 + 新地址 → 提交工单
关键能力:
- 状态持久化:流程状态存入 MongoDB,应用重启后可以断点续跑
- 槽位填充:缺少信息时系统主动追问("请提供您的订单号")
- 重试机制:每个节点最多重试 2 次
- 回滚/取消:支持流程中取消订单、撤销工单
- 事件审计:每个工作流实例的每一步都有完整的事件记录
3.4 RAG 向量检索增强生成
不是简单的全文搜索,而是语义级的智能检索:

向量存储方案:
- PostgreSQL + pgvector 扩展,自动建表建索引
- HNSW 索引,1536 维向量,COSINE_DISTANCE 距离度量
- 商品数据定时从外部商品服务同步,每 3 分钟增量刷新
多源知识融合:
- 商品库数据(价格、库存、规格参数)
- CMS 帮助文档(售后政策、退换货协议)
- 用户行为数据(浏览历史、收藏列表)
RAG 注入策略:
QuestionAnswerAdvisor:Spring AI 原生 Advisor,自动在 Prompt 中注入检索到的文档- 显式上下文构造:在构建 Prompt 时手动拼接领域知识
3.5 商品智能推荐引擎
三路推荐,覆盖不同的用户场景:
每日精选(Daily Picks):
- LLM 生成 + 向量检索 + Redis 缓存
- 每 3 分钟自动刷新
- 无需登录即可查看
猜你喜欢(Personalized):
- 基于用户浏览历史和收藏列表
- 按 userId 独立缓存
- 数据增强:合并 LLM 推荐 + 商品服务实时价格/库存/封面
场景推荐(On-Demand):
- 接受场景描述 + 用户查询
- 向量检索 Top 5 → LLM 结构化输出
- 返回 JSON:商品名、价格、推荐理由、商品ID
多级降级链路:
Redis 缓存 → LLM 生成 → 商品服务分页查询 → 默认配置兜底确保在任何异常情况下(AI 服务挂了、缓存过期、网络超时),用户都能看到推荐结果。
3.6 购物车 & 订单 NLU 引擎
用户用自然语言操作购物车和订单,系统自动解析意图并执行:
购物车操作:
- "把第二个加到购物车" → 解析序数词"第二",识别商品,调用加购 API
- "查看我的购物车" → 调用购物车查询 API,返回结构化摘要
- "把键盘的数量改成 2" → 解析商品名"键盘"和新数量"2",调用更新 API
- "删掉购物车里的鼠标" → 解析商品名"鼠标",调用删除 API
订单操作:
- "帮我下单" → 触发 ORDER_CHECKOUT 工作流
- "取消尾号 8802 的订单" → 解析订单尾号,调用取消 API
- "确认收货" → 触发确认收货流程
- "申请退货" → 触发 AFTER_SALE 工作流
中文专项优化:
- 序数词解析:一/二/三、第一/第二/第三
- 商品引用:支持"第一个"、"那个耳机"、商品 ID、商品名等多种引用方式
- 再生修复:如果更新购物车时误删了商品,自动重新添加
3.7 对话记忆 & 多轮上下文
- MongoDB 持久化:对话会话(Session)+ 历史消息(Entry)两级存储
- 游标分页:支持"加载更多"式滚动加载历史消息
- 上下文注入:每次对话自动注入最近 N 轮历史(默认 20 轮),让 AI 记住之前说过什么
- 会话管理:创建/重命名/删除会话,切换会话不丢失上下文
- 工作流记忆:如果用户在流程中间离开了,下次打开自动恢复流程状态
3.8 限流保护
- 令牌桶算法:每个会话每分钟最多 10 次请求
- 内存实现:无需外部中间件
- 友好提示:超限时返回"请求太频繁,请稍后再试"
3.9 统一认证 & 权限
- JWT 无状态认证:从 Cookie 或 Authorization Header 提取 Token
- 请求拦截器:
UserContextInterceptor统一解析用户信息,注入UserContextHolder - 页面路由守卫:未登录用户访问
/chat、/orders、/cart等页面自动跳转登录 - 匿名访问:每日精选和个性化推荐接口支持匿名调用
- Feign 透传:调用外部微服务时自动携带 JWT Token
3.10 MCP 双模工具执行
项目支持两种工具执行模式,可灵活切换:
- 本地模式:Spring AI
@Tool注解,直接在本服务内执行业务逻辑 - MCP 模式:通过 MCP Server 将工具暴露为外部可调用的服务,支持远程执行
- 降级策略:MCP 模式下如果远程调用失败,自动 fallback 到本地执行
- 适用范围:商品查询工具、购物车工具、订单工具均支持双模切换
四、核心数据流
来完整走一遍用户说"帮我推荐一款 5000 以内的游戏本"的全链路:

五、系统展示

最近缺项目经历想快速提升项目实战能力(包含多个AI项目),或者最近找工作,或者想学习AI的小伙伴,可以看看下面👇🏻的这个链接(或许真的能够帮到你)。





六、项目亮点
6.1 架构亮点
1. 双层语义路由
它是轻量级意图分类的最优解。
没有用一个大模型调用来"猜意图"(省钱、快、准),也没有写一堆 if-else(难维护):
- Embedding 质心匹配:每个意图类别预计算一组典型例句的向量质心,运行时 O(1) 相似度计算
- 正则规则覆盖:高频精准意图走正则,零延迟
- 置信度阈值:低置信度自动降级为 CHAT 兜底,不会"硬判错"
- 可配置:所有路由原型例句集中在
application.yml,业务方可以随时增删

2. Graph 工作流引擎
它让业务流程可暂停、可恢复、可回溯。
传统方案是写一堆 if-else 或状态机 switch-case,流程一复杂代码就崩。Graph 方案的优势:
- 声明式 DAG:流程定义清晰,新增/修改流程只需定义新的节点和边
- 状态持久化:流程中断(用户关闭页面、服务重启)后可以从断点恢复
- 槽位填充模式:优雅处理"缺信息追问"的场景
- 完善的异常处理:重试、回滚、取消、超时全支持
以下单流程为例:

3. RAG 全链路闭环
不是简单的"调个向量库 + 调个 LLM",而是一条完整的 pipeline:

每个步骤都有独立的 Service 实现,方便替换或升级:
- 想换 Embedding 模型?改
EmbeddingModelConfig一行配置 - 想换向量数据库?改
PgVectorConfig切换到 Milvus 或 Elasticsearch - 想换 LLM?改 application.yml 的 model 配置
4. 多级降级链路
每个对外依赖都有兜底方案:
| 依赖 | 主方案 | 降级方案 |
|---|---|---|
| AI 推荐 | LLM 生成 | 商品服务分页查询 → 默认配置 |
| 缓存 | Redis | 直接调用生成逻辑 |
| 商品数据 | Feign 调用商品服务 | 本地向量库检索结果 |
| MCP 工具 | 远程 MCP Server | 本地 @Tool 直接执行 |
| 意图分类 | Embedding 语义路由 | 正则规则匹配 → CHAT 兜底 |
5. 微服务生态集成
项目不是孤立的,而是作为"AI 智能层"嵌入到现有微服务体系中:
- 4 个 Feign Client 分别对接商品、购物车、订单、用户服务
- Nacos 统一注册发现和配置管理
- Feign 拦截器自动注入 JWT Token,下游服务无需改造
ClientResponseResolver统一处理各服务的响应信封差异
6. MCP 双模工具执行
它能在本地与远程无缝切换。
项目没有把工具执行写死在本地,而是实现了一套可切换的双模架构:
| 模式 | 原理 | 优势 | 劣势 |
|---|---|---|---|
| 本地模式 | Spring AI @Tool 注解直接调用 Service | 零网络延迟,可靠性高 | 与服务耦合 |
| MCP 模式 | 通过 MCP Server 暴露工具,远程调用 | 解耦,独立部署和扩缩容 | 增加网络开销 |
关键设计:
- 通过
sra.mcp.*.enabled一行配置即可切换 - MCP 调用失败时,通过
fallbackLocal标记自动降级到本地执行 - 商品、购物车、订单三类工具全部支持双模,且接口一致
这个设计的意义在于:开发阶段用本地模式快速迭代,生产阶段切 MCP 模式实现工具服务独立治理。两个模式共享同一套接口定义,业务代码完全无感。
7. 自愈式缓存 + 定时数据同步
推荐系统的缓存不是简单的"查得到就用,查不到就生成",而是一套带自愈能力的多级缓存体系:
- 定时增量同步:每 3 分钟从外部商品服务拉取最新数据,同步到 pgvector 向量库,确保推荐基于实时库存
- 缓存自愈:检测到 Redis 缓存中的遗留序列化格式、损坏的 URL、过期数据时,自动标记失效并重建
- 嵌入式降级:当 Redis 不可用时,直接跳过缓存层走生成链路,用户无感知
- 预热机制:每日精选和个性化推荐都在服务启动时预加载,首次访问无需等待
这套设计确保了即使外部商品服务挂了、Redis 挂了、AI 服务超时了,用户始终能拿到一份可用的推荐结果。
8. 中文 NLU 深度优化
项目的 NLU 层没有把一切甩给大模型,而是做了大量中文特有的工程优化:
- 序数词解析引擎:支持"一/二/三/四/五"、"第一/第二/第三"、"第一个/第二个"等全部中文序数表达,自动映射到列表索引
- 多形态商品引用:用户可以用"第一个"(位置引用)、"那个耳机"(名称引用)、"ID 12345"(编号引用)、"刚才那个"(上下文引用)来指代商品,系统统一解析
- 中文金额解析:"5000 以内"、"不超过 3000"、"两千块左右"、"500-1000 之间",全部解析为标准预算区间
- 再生修复机制:更新购物车数量时如果误删了商品(比如把数量改成 0),系统自动检测并重新添加,不会让用户的操作不可逆
- 模糊容错:用户说"把键盘加到购物车里"、"加键盘到购物车"、"购物车加个键盘"三种表述都能正确解析
这些优化看似琐碎,但恰恰是"AI 导购是否好用"的关键分水岭。
**9. 商品规格智能提取
外部商品服务的详情接口返回的是 原始 HTML,不是结构化 JSON。
里面的 CPU、内存、硬盘型号散落在一堆 <div> 和 <span> 里。
项目没有把这坨 HTML 直接塞进向量库污染检索质量,而是实现了一套零 LLM 成本的规格提取引擎:
| 规格维度 | 正则匹配模式 | 提取示例 |
|---|---|---|
| CPU | i3 / i5 / i7 / i9, 锐龙 R5 / R7 / R9, 酷睿 Ultra 5/7/9 | "i7-13700H" |
| 内存 | 4G / 8G / 16G / 32G / 64G, DDR4 / DDR5 | "16GB DDR5" |
| 硬盘 | 128G / 256G / 512G / 1T / 2T, SSD / HDD / NVMe | "512GB NVMe SSD" |
| 屏幕 | 13.3 / 14 / 15.6 / 16 / 17 英寸, 2K / 2.5K / 4K | "15.6英寸 2.5K" |
| 显卡 | RTX 3050/3060/4060/4070, GTX 1650, 核显/独显 | "RTX 4060 8G" |
提取后的结构化规格作为额外字段存入 pgvector 向量库。
这意味着用户搜"16G 内存 i7 笔记本"时,向量检索能在结构化维度 + 语义维度双路命中,准确率远超纯文本向量化。
更关键的是:整个过程零 LLM 调用,零额外成本,纯正则实现,毫秒级完成。这才是工程化的正确姿势。
10. Spring AI Advisor 记忆注入 + 会话自动修复
对话记忆不是简单的"把消息存 MongoDB 然后查出来拼到 Prompt 里"。
项目实现了一套多层记忆架构:

核心设计:
- Advisor 模式注入:不手动拼 Prompt,而是通过 Spring AI 的
MessageChatMemoryAdvisor自动将历史消息注入到 LLM 调用上下文中。可配置注入轮数(默认 20 轮),自动截断超出部分 - 会话自动修复:用户发送消息时携带了 sessionId,但 MongoDB 中查不到对应会话文档(可能被清理或异常丢失)。系统不会报错,而是自动检测已有历史消息,从消息中反向重建会话文档,用户完全无感知
- 工作流续跑检测:每次对话前检查该会话是否有未完成的工作流。如果有(比如上次下单到一半退出了),自动加载流程状态,从断点继续执行
- 游标分页:前端"加载更多"滚动时,通过游标(最后一条消息的 ID)分页拉取,避免深分页的性能问题
- 双文档结构:Session(会话级:标题、创建时间、状态)和 Entry(消息级:角色、内容、工具调用记录、时间戳)分离存储,互不干扰
这套设计让多轮对话体验丝滑流畅——AI 不会"忘记"之前的对话,也不会因为异常中断而丢失进度。
6.2 工程亮点
| 分类 | 亮点数 | 核心关键词 |
|---|---|---|
| AI/LLM | 6 | 双层语义路由、RAG 向量检索、Graph 工作流、Function Calling、Memory 注入、双模 MCP |
| 推荐引擎 | 3 | LLM 生成 + 向量检索融合、多级降级链路、定时缓存刷新 |
| 电商业务 | 4 | 对话式下单、NLU 购物车操作、售后工作流、中文序数词解析 |
| 架构设计 | 4 | 编排器模式、降级兜底、会话状态恢复、Feign 统一鉴权透传 |
| 数据工程 | 3 | pgvector HNSW 索引、MongoDB 对话存储、Redis 推荐缓存 |
| 运营工程 | 3 | 限流保护、JWT 认证拦截器、全局异常处理 |
6.3 这套源码能带给你什么?
如果你是一个初中级后端开发:
- 微服务怎么拆、怎么用 Feign 做声明式调用、怎么用 Nacos 做服务发现,这项目里全有
- JWT 无状态认证 + 拦截器统一鉴权怎么设计,代码怎么写,直接看
UserContextInterceptor - Spring AI 怎么集成、ChatClient 怎么用、Function Calling 怎么写,直接看
ShoppingAgentService - Redis 缓存怎么用、多级降级怎么设计、定时任务怎么写
- MongoDB 怎么存储对话历史、游标分页怎么实现
- AOP 统一响应封装(
ApiResponseBodyAdvice)
如果你是一个前端开发:
- Thymeleaf + CSS Grid/Flexbox 怎么搭出一个好看的电商页面
- Fetch API 怎么封装、多级 JSON 响应怎么解析
- 对话式 UI 怎么实现(消息气泡、流式输出、快速回复建议)
- 购物车、订单、收藏夹等电商核心页面的前端交互逻辑
如果你关注 AI / LLM:
- RAG 完整 pipeline 的代码实现(从文档分块 → 向量嵌入 → pgvector 检索 → LLM 生成)
- Embedding 质心路由:不需要微调模型,用几个典型例句就能做意图分类
- Graph 工作流引擎:Spring AI Alibaba Graph 的实战落地(流程编排、状态持久化、断点恢复)
- Function Calling:Spring AI
@Tool注解如何定义工具、LLM 如何自动选择调用 - Chat Memory:如何注入对话历史到 LLM 上下文,如何管理多轮对话
- MCP 协议实践:本地工具和远程工具的共存与切换
如果你是架构师或技术 Leader:
- 编排器模式(Orchestrator)如何实现多路由分发
- 3 种数据库的选型理由和使用场景(PostgreSQL + pgvector / Redis / MongoDB)
- 语义路由 vs 大模型意图分类的成本对比和场景选择
- 多级降级链路的架构设计思路
七、如何获取源码?
扫描下方👇🏻二维码,加入星球,即可获取:源码 + 教程 + 技术答疑:

原价159,通过优惠券加入星球,可以立减30,今天只需要129。
只有 10 张优惠券,数量有限,先到先到。
其实星球中已经包含了13个实战项目 + 13个技术专栏,商品智能推荐系统只是其中一个项目。

其他项目的技术含金量也非常高,这里有详细介绍:推荐12个牛逼的SpringBoot项目
13大优质技术专栏:

此外,还有1V1答疑、修改简历、职业规划、送书活动、技术交流等内容。
星球中你可以开阔一下视野,跟一群优秀的人一起交流和学习,如果工作中有些难题也有人给你出谋划策,这个价格超值!
很多球友拿到了不错的offer:

说实话129元这个价格已经非常便宜了,可能就是一顿饭钱。
这100多块钱可能是2026年你花的最值的一次钱。
我相信知识星球回馈给你的,将来是十倍或者百倍的价值。
扫描下方👇🏻二维码,加入星球,即可获取:源码 + 教程 + 技术答疑:

原价159,通过优惠券加入星球,可以立减30,今天只需要129。
只有 10 张优惠券,数量有限,先到先到。
最近缺项目经历想快速提升项目实战能力(包含多个AI项目),或者最近找工作,或者想学习AI的小伙伴,可以看看下面👇🏻的这个链接(或许真的能够帮到你)。