SpringBoot + 微信小程序 + AI 大模型,教你搭一套智能外卖点餐推荐系统
如果最近你在选毕业设计课题,或者想把手里的 SpringBoot 项目升级成带“AI 味”的作品,那今天这个项目值得认真看一遍。
这次我们要拆的项目是:基于 SpringBoot + 微信小程序 + AI 大模型的智能外卖点餐推荐系统。它不是一个简单的 CRUD 外卖项目,而是在传统点餐流程里接入了 AI 推荐能力。用户打开微信小程序,系统能根据用户偏好、历史行为、热门商品等信息,给出个性化菜品推荐。后端用 SpringBoot 做服务端和业务逻辑,小程序端负责用户交互,AI 大模型负责“推荐”这个核心卖点。
这个项目比较适合三类读者:
- 计算机相关专业毕业设计选题,想找一个“前后端分离 + 小程序 + AI”综合型项目。
- 想学习 SpringBoot 如何对接 AI 大模型接口的开发者。
- 想快速搭一套带推荐逻辑的微信小程序点餐系统,用于课程设计、比赛或项目演示。
从技术栈来看,项目涉及 SpringBoot、微信小程序开发、AI 大模型 API 对接、协同过滤或推荐策略、MySQL 数据持久化等,属于覆盖面比较完整的一套毕业设计项目。
这篇文章不会只讲概念,我会按以下主线展开:先给核心能力速览,再讲适用场景和合规边界,然后给出环境准备、数据库设计、后端接口、AI 推荐对接、微信小程序、功能测试、常见错误排查、性能优化思路和总结。整个过程会给出可以直接照做的命令、代码片段和验证方法。
1. 核心能力速览
| 能力项 | 说明 |
|---|---|
| 项目类型 | 前后端分离 + 微信小程序 + AI 大模型推荐的外卖点餐系统 |
| 后端框架 | SpringBoot |
| 前端形态 | 微信小程序(原生小程序或 uni-app,需按源码确认) |
| 数据库 | MySQL(常见方案),可扩展 Redis 做缓存 |
| AI 推荐能力 | 接入大模型 API,实现个性化菜品推荐、智能搜索、推荐理由生成 |
| 推荐策略 | 基于用户行为数据 + 菜品标签 + 大模型生成推荐结果 |
| 用户端功能 | 注册登录、菜品浏览、点餐下单、订单管理、个人信息、推荐列表 |
| 管理端功能 | 菜品管理、分类管理、订单管理、用户管理、推荐策略配置 |
| 启动方式 | 后端 SpringBoot 启动 + 微信小程序开发者工具导入 |
| 是否支持 API | 是,后端提供 RESTful API,小程序端调用 |
| 是否支持批量任务 | 推荐类任务适合做成批量预计算;实时推荐依赖接口调用 |
| 适合场景 | 毕业设计、课程设计、项目演示、SpringBoot + AI 学习 |
这里需要说明一点:标题里提到的“源码 + LW + PPT + 讲解”,属于毕业设计常见配套材料,LW 通常指论文/文档(“李文”或“论文”的简称)。这类项目的核心价值在于:一套包含完整开发文档、答辩 PPT 和讲解视频的代码仓库。具体代码实现细节要以实际拿到的源码为准。
2. 适用场景与使用边界
2.1 适合谁用
这个项目的使用场景很清晰:
- 毕业设计:需要一个“有技术亮点、能讲清楚、有演示效果”的系统。AI 推荐是一个很好的加分项,和传统外卖管理系统区分度明显。
- 课程设计:SpringBoot + 小程序 + AI 三件事串起来,覆盖面广,各层都有内容可写。
- 学习 SpringBoot 接口开发:项目里包含完整的 controller / service / mapper 分层,适合对照学习。
- 学习微信小程序开发:小程序页面、API 调用、用户登录、本地存储都有涉及。
- 学习 AI 大模型接入:推荐服务对接大模型 API,是一种比较典型的业务场景。
2.2 能解决什么问题
传统外卖点餐系统通常只提供“按分类浏览”和“按关键词搜索”,用户面对大量菜品时选择成本高。本项目的核心卖点是:
- 根据用户历史订单、浏览记录、收藏行为,计算出用户偏好标签。
- 通过 AI 大模型生成个性化推荐理由和推荐列表。
- 用户可以主动输入需求,比如“推荐一份低卡的午餐”,AI 结合菜品数据给出答案。
- 商家或管理员可以查看推荐效果,调整推荐策略。
2.3 不适合什么场景
- 不适合直接用于真实商用外卖平台。真实外卖系统的周边服务、骑手调度、支付清结算、风控体系远比这个复杂。
- 不适合作为“纯算法研究”项目。这里 AI 推荐本质是“传统推荐策略 + 大模型生成”,不是从零训练一个推荐模型。
- 如果对 AI 原理零基础,建议先把大模型 API 调用流程跑通,再进入项目。
2.4 使用边界与合规提醒
这个项目涉及用户数据、订单数据、浏览行为。如果要用真实用户数据测试,必须注意:
- 不能采集和存储非授权个人信息。
- 用户手机号、微信号、地址等敏感信息,需要在小程序隐私协议中声明用途。
- AI 推荐生成的内容可能包含不确定性,需要在页面中增加“推荐结果仅供参考”的提示。
- 接入大模型 API 时,不要把用户明文密钥放在小程序前端代码里,必须由后端转发。
- 如果项目中包含菜品图片、品牌信息,仅限于学习演示,不可直接用于商业发布。
3. 系统总体设计
3.1 系统角色
系统按角色划分为三类:
| 角色 | 说明 | 核心功能 |
|---|---|---|
| 普通用户 | 微信小程序端用户 | 注册登录、菜品浏览、AI 推荐、下单、订单管理、评价 |
| 管理员 | 管理端用户 | 分类管理、菜品管理、订单管理、用户管理、推荐日志查看 |
| AI 服务 | 后端对接的大模型接口 | 生成推荐列表、生成推荐理由、处理用户自然语言点餐请求 |
3.2 技术架构
从技术分层来看,项目采用的是比较标准的前后端分离架构:
微信小程序端 ↓ 微信小程序 API / HTTPS 请求 SpringBoot 后端 ├── Controller 层(接收请求、参数校验、返回结果) ├── Service 层(业务逻辑、推荐策略、AI 调用) ├── Mapper/Repository 层(数据库操作) └── AI 服务客户端(封装大模型 API) MySQL 数据库(用户表、菜品表、分类表、订单表、行为表、推荐日志表) 外部 AI 大模型 API整个调用链路大致是:
- 用户在小程序端打开首页。
- 小程序调用后端
/api/recommend/list接口。 - 后端读取当前用户的浏览记录、历史订单、收藏数据。
- 后端计算用户偏好标签,组装推荐请求,调用 AI 大模型 API。
- 大模型返回推荐结果和推荐理由。
- 后端把结果封装成统一响应格式,返回给小程序端展示。
3.3 数据库设计
数据库表设计是毕业设计答辩中的核心内容。下面给出一个常见的外卖推荐系统表结构设计方案,实际字段以源码为准:
| 表名 | 说明 | 核心字段 |
|---|---|---|
| user | 用户表 | id, nickname, avatar, phone, openid, create_time |
| category | 菜品分类表 | id, name, sort_order |
| dish | 菜品表 | id, category_id, name, description, price, image, tags, status |
| order | 订单表 | id, user_id, total_price, status, address, create_time |
| order_item | 订单明细表 | id, order_id, dish_id, dish_name, price, quantity |
| user_behavior | 用户行为表 | id, user_id, dish_id, behavior_type, create_time |
| user_favorite | 用户收藏表 | id, user_id, dish_id, create_time |
| recommend_log | 推荐日志表 | id, user_id, request_content, response_content, create_time |
菜品 tags 字段是 AI 推荐的关键。例如某菜品的 tags 可以是:低卡、微辣、鸡肉、午餐。这样 AI 收到请求时,能够基于标签做语义匹配。
4. 环境准备与前置条件
4.1 后端环境
如果按常见毕业设计项目环境来准备,建议先检查以下内容:
| 环境项 | 建议要求 | 说明 |
|---|---|---|
| JDK | JDK 1.8 或更高 | SpringBoot 2.x 常用 JDK 8;SpringBoot 3.x 需要 JDK 17+ |
| Maven | Maven 3.6+ | 管理 SpringBoot 项目依赖 |
| MySQL | MySQL 5.7 或 8.0 | 数据库存储 |
| IDE | IDEA 或 Eclipse | 导入后端源码 |
| Node.js | 可选 | 部分管理端或插件工具需要使用 |
这里要特别注意 SpringBoot 版本问题。热词里也有“springboot版本太高”这个关注点。很多老项目基于 SpringBoot 2.x 开发,如果你本机装的是 SpringBoot 3.x 或较新的 JDK,可能会遇到 javax 包名改为 jakarta、配置项变化、依赖冲突等问题。稳妥的做法是:拿到源码后先看 pom.xml 里声明的 SpringBoot 版本,不要盲目升级。
4.2 微信小程序环境
微信小程序端需要准备:
- 微信开发者工具(稳定版即可)
- 一个微信小程序 AppID(测试阶段可以使用测试号)
- 如果涉及登录接口,需要在微信公众平台配置合法域名;本地调试可以在开发者工具中勾选“不校验合法域名”
4.3 AI 大模型 API 准备
如果项目要对接大模型 API,需要提前准备好:
- 一个可用的模型服务 API Key
- 完成身份认证和额度开通
- 在代码中配置模型名称、接口地址、API Key
注意:API Key 只能配置在后端服务里,不能直接放到小程序前端代码中。否则前端代码被反编译后,密钥会泄露,产生费用和安全风险。
4.4 目录结构规划
拿到源码后,建议先确认目录结构,避免后面找不到文件。常见的 SpringBoot + 小程序项目目录结构如下:
project-root ├── backend │ ├── src/main/java │ ├── src/main/resources │ └── pom.xml ├── miniapp │ ├── pages │ ├── utils │ ├── app.js │ ├── app.json │ └── project.config.json ├── sql │ └── takeout.sql ├── 论文/ └── 演示PPT/5. 后端 SpringBoot 项目搭建与启动
5.1 导入项目
使用 IDEA 导入后端项目:
# 进入后端目录,使用 Maven 下载依赖 mvn clean install -DskipTests如果项目没有使用 Maven 而是 Gradle,则根据实际构建工具执行对应命令。
导入时最容易遇到的问题有两个:Maven 依赖下载慢、SpringBoot 版本不匹配。建议给 Maven 配置阿里云镜像:
<mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>5.2 修改数据库配置
在src/main/resources/application.yml中配置 MySQL 连接:
spring: datasource: url: jdbc:mysql://localhost:3306/takeout?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: 123456 driver-class-name: com.mysql.cj.jdbc.Driver如果项目使用 SpringBoot 2.x,驱动一般为com.mysql.cj.jdbc.Driver。如果使用旧版本 MySQL 驱动,可能还需要调整。
5.3 初始化数据库
在 MySQL 中创建数据库并导入 SQL 文件:
mysql -u root -pCREATE DATABASE IF NOT EXISTS takeout DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; USE takeout; SOURCE /你的路径/sql/takeout.sql;执行之后,查看核心表是否存在:
SHOW TABLES;预期应看到 user、dish、category、order 等表。
5.4 配置 AI 大模型 API
在配置文件中增加 AI 服务相关配置:
ai: api-key: sk-xxxxxxxxxxxxxxxx model: qwen-plus base-url: https://dashscope.aliyuncs.com/compatible-mode/v1 timeout: 30这里只是通用配置示例,实际参数名以项目源码为准。常见的 AI 接入方式包括:
- 直接调用 OpenAI 兼容接口
- 调用阿里云通义千问 DashScope API
- 调用本地部署的大模型服务(Ollama / vLLM)
- 调用百度千帆、讯飞星火等平台
如果项目支持配置多个模型源,可以设计一个策略接口,方便切换。
5.5 启动后端
# 在项目根目录 mvn spring-boot:run或在 IDEA 中直接运行主类Application。
启动成功后,控制台会输出 Spring Boot 启动日志。如果看到类似下面的日志,说明后端启动成功:
Tomcat started on port(s): 8080 (http) Started Application in 5.32 seconds验证后端是否正常:
curl http://localhost:8080/api/dish/list如果返回 JSON 数据,说明后端接口正常。
5.6 AOP 统一响应与异常处理
毕业设计答辩中比较加分的一个点是统一响应结构。后端可以定义统一的返回结果类:
public class Result<T> { private Integer code; private String message; private T data; }正常情况下 code 为 200,异常时抛出业务异常。这样可以避免小程序端拿到各种不同格式的返回结果。
6. AI 大模型推荐服务实现
6.1 推荐功能设计思路
AI 推荐不是简单的“把菜品列表丢给大模型”。完整链路包括:
- 收集用户行为数据。
- 生成用户偏好标签。
- 从数据库筛选候选菜品。
- 将候选菜品与用户标签组装成 Prompt。
- 调用大模型 API。
- 解析模型返回结果。
- 保存推荐日志。
下面的伪代码展示推荐服务的基本结构:
@Service public class RecommendService { @Autowired private UserBehaviorMapper behaviorMapper; @Autowired private DishMapper dishMapper; @Autowired private AiClient aiClient; public List<Dish> recommend(Long userId) { // 1. 获取当前用户偏好标签 List<String> tags = behaviorMapper.findUserTags(userId); // 2. 获取候选菜品 List<Dish> candidates = dishMapper.findAll(); // 3. 组装数量可控的候选集 List<Dish> topCandidates = candidates.stream() .limit(30) .collect(Collectors.toList()); // 4. 调用 AI 大模型返回推荐结果(示意) // String result = aiClient.recommend(tags, topCandidates); // 5. 返回推荐菜品 return topCandidates; } }6.2 设计推荐 Prompt
AI 推荐效果好不好,Prompt 很关键。给出一套推荐类 Prompt 参考模板:
你是一个外卖点餐推荐助手。 用户偏好标签:辣、鸡肉、快餐、低卡。 候选菜品如下: 1. 鸡胸肉沙拉,价格 28 元,标签:低卡、鸡肉、轻食 2. 麻辣香锅,价格 35 元,标签:辣、午餐、多人餐 3. 黄焖鸡米饭,价格 22 元,标签:鸡肉、午餐 请根据用户偏好推荐 3 个菜品,并给出推荐理由。返回格式为 JSON 数组, 每个元素包含 dishId、reason 两个字段。在实际项目中,建议使用 Jackson 或 Fastjson 将候选菜品列表序列化为 JSON,拼接到 Prompt 中。
6.3 接入大模型 API
如果项目使用 OpenAI 兼容接口,可以封装一个 AiClient。下面给出一个通用示例,实际实现需要根据项目调整:
import com.alibaba.fastjson.JSONObject; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; @Component public class AiClient { @Value("${ai.api-key}") private String apiKey; @Value("${ai.base-url}") private String baseUrl; @Value("${ai.model}") private String model; @Value("${ai.timeout}") private int timeout; public String recommend(String userPrompt) { // 构建请求体 JSONObject body = new JSONObject(); body.put("model", model); body.put("messages", new Object[]{ new JSONObject().fluentPut("role", "system").fluentPut("content", "你是外卖推荐助手。"), new JSONObject().fluentPut("role", "user").fluentPut("content", userPrompt) }); body.put("temperature", 0.3); // 实际调用时需要设置请求头和超时时间 return "解析后的推荐结果"; } }需要注意:上面只是代码骨架,缺少 HTTP 调用细节和异常处理。在真实项目中,建议使用 OpenAI Java SDK 或 Spring 的 RestTemplate / WebClient 完成请求。
6.4 推荐结果解析
大模型返回内容通常是文本,需要转成结构化数据。推荐做法:
- 在 Prompt 中强制指定 JSON 输出格式。
- 后端使用正则或 JSON 解析器提取结果。
- 解析失败时降级为默认推荐策略。
降级方案很重要。真实场景下,大模型 API 可能超时、限流或返回非法格式。系统不应该因为 AI 服务异常导致整个推荐页面崩溃。降级策略可以设计为:
- 按销量排序返回热门菜品。
- 按用户收藏去重后返回相似标签菜品。
- 直接返回最新菜品列表。
6.5 AI 对话推荐功能
除了列表式推荐,还可以在小程序端增加“智能点餐助手”入口。用户输入“我想吃辣的,预算 30 以内”,后端把问题转发给大模型,大模型结合菜单数据输出答案。
这个功能适合作为项目的亮点展示,因为它在演示时效果很直观:用户输入自然语言,AI 返回个性化结果。
7. 微信小程序端实现
7.1 小程序目录结构
微信小程序端通常包含以下页面:
| 页面 | 功能 |
|---|---|
| pages/index/index | 首页,展示推荐菜品、分类入口、轮播图 |
| pages/menu/menu | 菜品列表,支持分类切换和搜索 |
| pages/dish/detail | 菜品详情,展示标签、价格、推荐理由 |
| pages/cart/cart | 购物车 |
| pages/order/order | 订单列表、订单详情 |
| pages/user/user | 个人中心 |
| pages/recommend/recommend | AI 推荐页,支持自然语言输入 |
7.2 小程序请求封装
小程序端调用后端接口时,建议统一封装 request 工具:
const BASE_URL = 'http://localhost:8080/api'; function request(url, method = 'GET', data = {}) { return new Promise((resolve, reject) => { wx.request({ url: BASE_URL + url, method, data, header: { 'Content-Type': 'application/json' }, success(res) { if (res.statusCode === 200) { resolve(res.data); } else { reject(res); } }, fail(err) { reject(err); } }); }); } module.exports = { request };注意:真机调试时需要将localhost改为后端所在电脑的局域网 IP,并在微信公众平台配置合法域名。如果只是本地开发调试,在微信开发者工具中勾选“不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书”即可。
7.3 小程序用户登录
小程序登录的常见流程是:
- 小程序端调用
wx.login()获取 code。 - 将 code 发送到后端。
- 后端调用微信接口换取 openid。
- 后端根据 openid 查找或创建用户,返回自定义登录态 token。
- 小程序端保存 token 到 storage,后续请求携带 token。
wx.login({ success(res) { if (res.code) { wx.request({ url: 'http://localhost:8080/api/auth/login', method: 'POST', data: { code: res.code }, success(response) { const token = response.data.data.token; wx.setStorageSync('token', token); } }); } } });热词里有一个高频问题:“小程序获取登录后的微信用户失败”。出现这个问题的常见原因:
- 小程序没有配置
scope.userInfo或没有使用新版头像昵称填写能力。 - 接口返回的用户信息字段与前端取的不一致。
- openid 获取成功,但用户表插入失败,导致登录接口报错。
- 后端解析 code 的接口请求失败,需要检查 AppSecret 是否正确。
建议处理方式:后端先返回 openid 对应的 userId,前端拿到 userId 后再调用/api/user/info获取用户资料,不要把头像昵称的获取和登录强耦合。
7.4 首页推荐列表展示
小程序首页调用推荐接口:
Page({ data: { recommendList: [], loading: true }, onLoad() { this.loadRecommendList(); }, loadRecommendList() { wx.request({ url: 'http://localhost:8080/api/recommend/list', method: 'GET', success: (res) => { this.setData({ recommendList: res.data.data || [], loading: false }); }, fail: () => { this.setData({ loading: false }); } }); } });7.5 智能点餐助手页面
智能点餐助手是小程序端的 AI 交互入口。页面大致包含输入框、聊天展示区域和发送按钮。用户可以输入:
- “推荐一份适合减脂吃的午餐”
- “预算 20 元能吃什么”
- “我不吃香菜,推荐几个菜”
后端/api/ai/chat接口接收用户输入,调用大模型,返回推荐内容。
const handleSend = () => { const content = this.data.inputValue; if (!content) return; wx.request({ url: 'http://localhost:8080/api/ai/chat', method: 'POST', data: { message: content }, success: (res) => { const reply = res.data.data.reply; // 追加到聊天记录 this.setData({ messages: [...this.data.messages, { role: 'ai', content: reply }], inputValue: '' }); } }); };8. 接口 API 与批量任务
8.1 核心接口列表
一个完整的外卖点餐推荐系统,后端接口通常包括:
| 模块 | 接口 | 方法 | 说明 |
|---|---|---|---|
| 用户 | /api/auth/login | POST | 微信登录 |
| 用户 | /api/user/info | GET | 获取用户信息 |
| 菜品 | /api/dish/list | GET | 菜品列表 |
| 菜品 | /api/dish/detail | GET | 菜品详情 |
| 分类 | /api/category/list | GET | 分类列表 |
| 推荐 | /api/recommend/list | GET | 个性化推荐 |
| 推荐 | /api/recommend/hot | GET | 热门推荐 |
| AI | /api/ai/chat | POST | 智能点餐助手 |
| 购物车 | /api/cart/add | POST | 加入购物车 |
| 订单 | /api/order/submit | POST | 提交订单 |
| 订单 | /api/order/list | GET | 订单列表 |
8.2 推荐接口示例
GET /api/recommend/list响应:
{ "code": 200, "message": "success", "data": [ { "dishId": 1, "name": "鸡胸肉沙拉", "price": 28, "tags": ["低卡", "鸡肉", "轻食"], "reason": "根据你的减脂偏好,鸡胸肉沙拉蛋白质丰富且热量可控。" } ] }8.3 AI Chat 接口示例
POST /api/ai/chat Content-Type: application/json { "message": "推荐一份适合减脂吃的午餐" }响应:
{ "code": 200, "message": "success", "data": { "reply": "推荐你尝试鸡胸肉沙拉(28元),蛋白质含量高,热量较低,搭配少量油醋汁口感更佳。" } }8.4 批量推荐思路
如果推荐结果不需要实时生成,可以设计定时任务批量预计算:
@Component public class RecommendTask { @Scheduled(cron = "0 0 3 * * ?") public void generateDailyRecommend() { // 1. 查询所有活跃用户 // 2. 对每个用户计算偏好标签 // 3. 调用大模型 API 生成推荐列表 // 4. 保存到 recommend_result 表 // 5. 小程序端直接读取预计算结果 } }批量任务的好处是:用户打开首页时响应更快,不依赖大模型实时返回;缺点是数据可能不够新鲜。实际项目中可以选择“热点用户实时计算,普通用户读取缓存”的混合策略。
8.5 批量任务注意事项
- 大模型 API 有 QPS 限制,批量调用时要控制并发数。
- 任务执行需要记录日志,方便失败重跑。
- 推荐结果表要设计唯一索引,避免重复写入。
- 建议使用线程池或消息队列来削峰。
9. 资源占用与性能观察
9.1 后端资源占用
SpringBoot 项目默认使用嵌入式 Tomcat,内存占用通常在 200MB 到 500MB 之间,具体取决于机器配置和业务复杂度。启动时可以在 IDE 或命令行中观察 JVM 内存变化。
如果内存占用过高,可以限制 JVM 堆内存:
java -jar -Xms256m -Xmx512m takeout-server.jar9.2 数据库连接池
项目通常会整合 HikariCP 连接池。如果访问量较大,容易出现连接池不够用的情况。观察指标:
- 连接池活跃连接数
- 等待获取连接的时间
- 慢 SQL 日志
常见优化:
- 增加连接池最大连接数,但不要超过数据库实例上限。
- 给商品列表、用户查询等高频 SQL 增加索引。
- 使用 Redis 缓存菜品列表和推荐结果。
9.3 AI 接口耗时
AI 大模型接口通常需要 1 到 5 秒才能返回。小程序端必须有 loading 状态。如果接口调用时间过长,可以在后端增加超时控制:
ai: timeout: 10建议在小程序端设置 15 秒左右的请求超时,避免用户长时间等待。
9.4 性能优化方向
| 场景 | 优化方案 |
|---|---|
| 菜品列表加载慢 | 增加 Redis 缓存 |
| AI 推荐响应慢 | 批量预计算 + 缓存推荐结果 |
| 用户登录慢 | token 过期延长 + 免登逻辑 |
| 数据库压力大 | 对订单表按月分表 |
| AI 调用失败 | 降级为热门推荐 |
10. 常见问题与排查方法
下面是这个项目开发过程中最容易出现的几类问题,整理成排查表。
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 后端启动失败 | 端口被占用 | netstat -ano检查 8080 端口 | 修改server.port |
| 数据库连不上 | 数据库未启动或密码错误 | 查看控制台异常信息 | 检查配置 |
| 启动报用户不存在 | Maven 依赖未下载完整 | 执行mvn clean install | 重新导入 |
| 小程序请求 404 | 后端接口路径不一致 | 打开控制台查看请求 URL | 前后端接口对齐 |
| 小程序请求失败 | 本地调试未勾选不校验合法域名 | 在工具详情中勾选 | 勾选后重试 |
| 用户登录失败 | AppSecret 错误 | 后端打印 code 换取 openid 响应 | 检查 AppSecret |
| AI 接口超时 | 模型服务响应慢或网络问题 | 查看后端日志 | 增加超时时间 |
| AI 返回内容解析失败 | 模型返回非 JSON 格式 | 打印原始返回结果 | 增加重试或降级 |
| 商品图片加载失败 | 图片地址无法访问 | 检查图片链接 | 使用本地静态资源 |
| 批量任务卡住 | 并发请求触发限流 | 查看任务日志 | 降低并发数 |
11. 最佳实践与使用建议
11.1 项目开发顺序
如果你要基于这个项目做二次开发,建议按照以下顺序:
- 先把数据库导入成功。
- 跑通后端接口。
- 用 Postman 测登录、菜品列表、下单接口。
- 再启动小程序,把页面流程跑通。
- 最后接入 AI 推荐,先用简单 Prompt 验证效果。
- 完成论文和答辩 PPT 的截图素材收集。
11.2 代码管理建议
- 使用 Git 管理源码,每次功能完成提交一次。
- 不要把 API Key 提交到 Git 仓库。
- 数据库 SQL 文件放单独目录。
- 小程序端的接口地址单独抽到 config.js 中。
module.exports = { BASE_URL: 'http://localhost:8080/api' };11.3 答辩演示技巧
如果这是毕业设计,演示时建议按以下顺序:
- 展示小程序端首页和 AI 推荐列表。
- 演示智能点餐助手,输入一句自然语言。
- 展示后端接口返回结果。
- 打开数据库说明关键表结构。
- 展示推荐日志表,说明 AI 调用流程。
- 最后演示管理端菜品管理。
11.4 安全与隐私合规
- 小程序涉及用户信息必须符合微信平台规范。
- 用户敏感数据在传输时建议加密。
- AI 生成内容要经过审核,至少要有过滤机制。
- 不要在前端硬编码 API Key。
- 如果部署到公网,后端接口要加登录校验和频率限制。
12. 总结
这个项目的价值在于把 SpringBoot、微信小程序和 AI 大模型三个能力串成了一条完整的业务链路。从传统外卖管理系统升级到带 AI 推荐的智能点餐系统,技术亮点足够清晰,演示效果也直观。
对于正在做毕业设计选题的人来说,建议先跑通最小闭环:后端启动、数据库导入、小程序登录、菜品浏览、订单提交。这个链路通了之后,再逐步加入 AI 推荐和智能对话。
最容易踩的坑集中在 SpringBoot 版本兼容、小程序本地调试域名校验、API Key 安全、大模型返回结果解析这几个地方。把这几个问题提前处理好,项目开发和答辩都会顺利很多。
如果想进一步扩展,可以考虑加入 Redis 缓存、用户画像标签管理、商家端管理、推荐效果统计、基于用户协同过滤的召回策略,以及把大模型接入升级为流式输出。这些都是能让项目更加完整和出彩的方向。
建议收藏备用,后面开发时可以直接对照这套流程来排错和验证。