这次我们来看一个可以直接作为计算机毕业设计的完整项目:SpringBoot + 微信小程序 + AI大模型智能校园导航系统。
这套项目不是你常见的静态校园地图展示,而是把“找楼、问路、查教室”这类校园场景,接入了AI大模型,用户可以直接通过自然语言提问,比如“从东门到图书馆怎么走”“三号教学楼在哪个位置”“明天下午三教有空教室吗”,系统会解析意图、匹配楼宇POI数据,再返回导航结果或AI回答。
从项目交付物看,它包含源码、LW(毕业论文)、PPT 和讲解,也就是说它是一套能直接用于答辩、演示和二次开发的完整课设/毕设方案,不需要再去东拼西凑“后端代码 + 小程序模板 + AI接口”三套东西。
文章会围绕这套系统的架构设计、后端SpringBoot接口开发、微信小程序页面组织、AI大模型接入方式、功能测试、部署排错展开。如果你想快速判断“这个毕设项目值不值得做”“技术栈熟不熟”“答辩会问哪些问题”,这篇文章可以直接收藏。
1. 核心能力速览
| 能力项 | 说明 |
|---|---|
| 项目类型 | 计算机毕业设计 / 课程设计完整项目 |
| 后端技术 | SpringBoot(Java) |
| 前端技术 | 微信小程序原生开发 |
| AI能力 | 接入AI大模型接口,实现智能问答、意图理解、导航辅助 |
| 核心功能 | 校园楼宇搜索、路径规划辅助、AI问答、用户收藏、浏览记录 |
| 数据库 | MySQL(建议 5.7 或 8.0) |
| 启动方式 | IDEA 启动 SpringBoot + 微信开发者工具预览小程序 |
| API 服务 | SpringBoot RESTful 接口,可独立被小程序或其他端调用 |
| 批量任务 | 支持楼宇 POI 数据批量导入,建议在管理接口中提供 Excel/JSON 导入 |
| 交付物 | 源码 + LW论文 + PPT + 讲解 |
| 适合人群 | 计算机专业毕业生、Java 后端学习者、微信小程序开发者 |
项目本身不要求高显存、不依赖本地GPU推理,AI大模型调用走云端API,因此普通开发机(8G内存以上即可)就能跑通。后面部署章节会给出详细环境清单。
2. 适用场景与使用边界
适用场景:
- 毕业设计/课程设计:技术栈主流,前后端分离,扩展点充足,答辩时有完整业务逻辑可讲。
- SpringBoot 学习者:能学到 RESTful 接口设计、MyBatis 持久层操作、统一返回结构、异常处理、第三方 API 调用。
- 微信小程序开发者:能学到页面导航、请求封装、地图展示、搜索交互、登录态管理。
- AI大模型应用开发:能学到如何把大模型接口封装成后端服务,并在业务场景中做 Prompt 设计和意图解析,而不是只写一个“聊天机器人”Demo。
使用边界:
- 校园地图数据(楼宇坐标、平面图)需要来自校方或第三方开放数据,商用或公开部署前必须确认授权。
- 小程序发布上线需要在微信公众平台配置合法域名,且域名需要完成 ICP 备案;本地开发预览时可在开发者工具中勾选“不校验合法域名”。
- 接入大模型接口时,要遵循对应服务商的调用规范、配额限制和内容安全要求,不能把用户隐私数据直接透传给第三方模型。
- 系统定位是教学演示与校园场景辅助工具,不建议用于要依赖实时人流、施工改道、紧急疏散等高实时高可靠场景。
如果后续计划在人脸识别、语音克隆、数字人等方向扩展,涉及肖像与人声素材时必须获得明确授权,且要在论文中说明合规边界。
3. 系统架构与技术选型
整体架构可以拆成三个层次:微信小程序端、SpringBoot服务端、AI大模型服务。
3.1 整体架构
微信小程序端(用户交互) ↓ HTTPS/JSON SpringBoot 服务端(业务逻辑 + 数据持久化 + AI接口代理) ↓ HTTP AI 大模型 API(意图识别 / 智能问答)小程序端负责页面展示和用户操作,包括首页导航、楼宇搜索、AI对话、个人中心。所有业务数据都通过 SpringBoot 接口获取,不直接连接数据库。
SpringBoot 服务端承担核心业务:楼宇 POI 的 CRUD、搜索接口、路径规划数据准备、用户收藏记录、AI 对话代理。AI 请求由后端统一转发,避免在小程序端暴露 API Key,也方便做 Prompt 管理、日志记录和限流。
3.2 技术选型
| 技术点 | 选型建议 | 说明 |
|---|---|---|
| 后端框架 | Spring Boot 2.7.x 或 3.x | 需根据 JDK 版本决定,JDK8 建议 2.7.x |
| ORM | MyBatis 或 MyBatis-Plus | 国内项目常用,减少 SQL 编写量 |
| 数据库 | MySQL | 存楼宇、POI、用户、收藏、反馈等数据 |
| 前端 | 微信小程序原生 | 不引入额外框架,调试方便,适合毕设展示 |
| AI 接入 | HTTP 调用云端大模型接口 | 后端封装统一代理接口 |
| 构建工具 | Maven | 依赖管理清晰 |
| 接口规范 | RESTful + JSON | 小程序端 wx.request 直接对接 |
这里不限定具体大模型服务商,实际操作时你只需要把你的 AI 接口地址、API Key、模型名称写在配置文件里,然后在上层封装一个AiService,统一处理请求参数、超时和返回解析。
4. 环境准备与前置条件
4.1 环境清单
| 环境项 | 建议版本 | 说明 |
|---|---|---|
| JDK | 1.8 或 11 | SpringBoot 2.x 可运行在 JDK8 上 |
| Maven | 3.6+ | 用于依赖下载和项目打包 |
| MySQL | 5.7 / 8.0 | 需要新建数据库并执行 SQL 脚本 |
| 开发工具 | IDEA 或 Eclipse | IDEA 更适合 SpringBoot 开发 |
| 微信开发者工具 | 最新稳定版 | 用于打开小程序工程并预览 |
| 小程序 AppID | 测试号或已注册 AppID | 可在微信公众平台申请 |
| AI 大模型 API Key | 按服务商要求申请 | 后端调模型时使用 |
4.2 SpringBoot 启动准备
如果拿到的源码是 Maven 工程,先在 IDEA 中导入项目,等待依赖下载完成。确认application.yml里的数据库连接信息:
server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/campus_navigation?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai username: root password: your_password driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: mapper-locations: classpath*:mapper/**/*.xml type-aliases-package: com.campus.navigation.entity ai: api-url: https://your-ai-api.example.com/v1/chat/completions api-key: your-api-key model: your-model-name timeout-seconds: 60需要注意:数据库名、账号密码都要按本机实际情况改;AI 配置里的 api-url 和 model 必须与你申请的服务商一致。
4.3 微信开发者工具准备
用微信开发者工具导入小程序前端目录,填入自己的 AppID。本地调试时,在“详情 - 本地设置”里勾选“不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书”。这样后端地址可以直接写http://localhost:8080。
如果后续要真机预览或发布上线,就必须把后端部署到公网服务器,配置 HTTPS 域名,并在微信公众平台后台配置服务器域名白名单。
5. 数据库设计与后端核心接口
5.1 数据表设计
数据库是整个系统的地基。校园导航场景至少需要这几张表:
-- 楼宇信息表 CREATE TABLE t_building ( id BIGINT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL COMMENT '楼宇名称', code VARCHAR(50) COMMENT '楼宇编号', address VARCHAR(255) COMMENT '楼宇地址/位置描述', longitude DECIMAL(10,6) COMMENT '经度', latitude DECIMAL(10,6) COMMENT '纬度', floor_count INT COMMENT '楼层数', description TEXT COMMENT '楼宇简介', create_time DATETIME DEFAULT CURRENT_TIMESTAMP, update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); -- 用户表 CREATE TABLE t_user ( id BIGINT PRIMARY KEY AUTO_INCREMENT, openid VARCHAR(100) NOT NULL UNIQUE COMMENT '微信openid', nickname VARCHAR(50), avatar_url VARCHAR(255), create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 收藏表 CREATE TABLE t_favorite ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL, building_id BIGINT NOT NULL, create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 导航反馈表 CREATE TABLE t_feedback ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT, content TEXT COMMENT '用户反馈', create_time DATETIME DEFAULT CURRENT_TIMESTAMP ); -- AI 问答日志表 CREATE TABLE t_ai_chat_log ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT, question TEXT COMMENT '用户问题', answer TEXT COMMENT '模型回答', intent VARCHAR(50) COMMENT '识别出的意图', create_time DATETIME DEFAULT CURRENT_TIMESTAMP );实际项目中可能还有 POI 点位表、路线表、公告表等扩展表,具体以源码里的 SQL 脚本为准。拿到项目后,建议先看resources下的sql或db目录,把建表脚本执行一遍,再启动后端。
5.2 核心接口设计
| 接口 | 方法 | 说明 |
|---|---|---|
/api/building/search | GET | 根据关键词搜索楼宇 |
/api/building/{id} | GET | 查看楼宇详情 |
/api/path/plan | GET | 获取起点到终点的导航信息 |
/api/user/login | POST | 微信登录,获取 openid 并返回 token |
/api/favorite/add | POST | 收藏楼宇 |
/api/favorite/list | GET | 收藏列表 |
/api/ai/chat | POST | 发送用户问题到 AI 大模型,返回回答 |
/api/feedback/submit | POST | 提交用户反馈 |
接口返回统一使用Result<T>结构,前端拿到后先判断code再解析data:
{ "code": 200, "message": "success", "data": {} }设计统一返回结构的作用是让小程序端的请求封装更简单,无论返回的是楼宇列表、路径规划结果,还是 AI 对话文本,前端都只做一层解析。
5.3 楼宇搜索接口示例
@RestController @RequestMapping("/api/building") public class BuildingController { @Resource private BuildingService buildingService; @GetMapping("/search") public Result<List<Building>> search(@RequestParam("keyword") String keyword) { List<Building> list = buildingService.searchByNameOrCode(keyword); return Result.success(list); } }Service 里通过 MyBatis-Plus 的like条件查询即可。关键词为空时返回全部列表,方便小程序端做“全部楼宇”展示。
5.4 AI 大模型接入设计
AI 接入是这套系统的亮点,但不要把它做成一个简单的“聊天接口”。更合理的做法是:
- 后端定义 Prompt 模板,把校园导航的业务背景注入进去;
- 用户在页面输入问题;
- 后端收到问题后,先做关键词匹配或意图识别,判断用户是想“找楼”还是“闲聊”;
- 如果是找楼,先查本地数据库把候选楼宇数据组装进 Prompt,再请求大模型生成自然语言回答;
- 把回答返回小程序端。
这样既发挥了大模型的自然语言能力,又保证楼宇数据的准确性,不会出现模型“胡编”了一个不存在的楼的情况。
通用调用示例:
@Service public class AiChatService { @Value("${ai.api-url}") private String apiUrl; @Value("${ai.api-key}") private String apiKey; @Value("${ai.model}") private String model; @Resource private RestTemplate restTemplate; public String chat(String userMessage) { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.setBearerAuth(apiKey); Map<String, Object> requestBody = new HashMap<>(); requestBody.put("model", model); requestBody.put("messages", List.of( Map.of("role", "system", "content", buildSystemPrompt()), Map.of("role", "user", "content", userMessage) )); requestBody.put("temperature", 0.7); HttpEntity<Map<String, Object>> request = new HttpEntity<>(requestBody, headers); try { ResponseEntity<Map> response = restTemplate.postForEntity(apiUrl, request, Map.class); // 根据实际接口返回结构解析 content 字段 return extractContent(response.getBody()); } catch (RestClientException e) { log.error("AI request failed", e); return "抱歉,AI 服务暂时不可用,请稍后再试。"; } } }注意:不同服务商的请求路径、鉴权方式、返回 JSON 结构可能不同。拿到真实接口文档后,把apiUrl、requestBody和extractContent里的解析逻辑替换成对应格式即可。
6. 微信小程序端开发
6.1 小程序页面结构
| 页面 | 路径 | 说明 |
|---|---|---|
| 首页 | pages/index/index | 校园地图、常用入口、推荐楼宇 |
| 搜索 | pages/search/search | 关键词搜索楼宇,结果列表展示 |
| AI 导航 | pages/chat/chat | 对话框形式,与大模型交互 |
| 楼宇详情 | pages/detail/detail | 楼宇介绍、位置、收藏按钮 |
| 我的 | pages/profile/profile | 用户信息、收藏列表、反馈入口 |
对毕设项目来说,页面不用多,核心流程完整即可:搜索楼宇 → 查看详情 → AI 问路 → 收藏记录。
6.2 请求封装示例
在utils/request.js中封装 wx.request,方便所有页面调用接口:
const BASE_URL = 'http://localhost:8080'; function request(url, method, data) { return new Promise((resolve, reject) => { wx.request({ url: BASE_URL + url, method: method || 'GET', data: data || {}, header: { 'Content-Type': 'application/json' }, success(res) { if (res.data.code === 200) { resolve(res.data.data); } else { wx.showToast({ title: res.data.message || '请求失败', icon: 'none' }); reject(res.data); } }, fail(err) { wx.showToast({ title: '网络异常', icon: 'none' }); reject(err); } }); }); } module.exports = { request };6.3 AI 对话页面
AI 对话页面是典型的“消息列表 + 输入框”结构。用scroll-view承载消息,用输入框收集用户问题,点击发送后调用/api/ai/chat接口。
<view class="chat-page"> <scroll-view scroll-y class="message-list"> <view wx:for="{{messages}}" wx:key="id" class="message {{item.role}}"> <text>{{item.content}}</text> </view> </scroll-view> <view class="input-bar"> <input placeholder="请输入你的问题" bindinput="onInput" value="{{inputValue}}" /> <button bindtap="sendMessage">发送</button> </view> </view>在sendMessage中处理逻辑:
async sendMessage() { const content = this.data.inputValue.trim(); if (!content) return; this.setData({ messages: [...this.data.messages, { role: 'user', content }], inputValue: '' }); const reply = await request('/api/ai/chat', 'POST', { question: content }); this.setData({ messages: [...this.data.messages, { role: 'assistant', content: reply }] }); }页面本身不用关心 AI 接口细节,后端返回什么文本,页面就渲染什么文本。如果想增强体验,可以加 loading 状态和“正在输入”提示,避免用户重复点击。
6.4 地图展示问题
校园导航系统的核心之一就是地图。实际项目里常见两种方案:
一是使用微信小程序自带的地图组件<map>,把楼宇坐标点作为 marker 在地图上标注出来。这种方案实现简单,但需要真实经纬度数据,并且做路径规划时需要调用第三方地图服务。
二是使用自定义绘制平面图,把校园地图图片作为底图,按比例把楼宇坐标映射成图片上的像素坐标。这种方案展示效果更直观,且不依赖第三方地图 SDK,适合校园这种小范围场景。
具体使用哪种方案,要看源码里给你预留的是坐标字段还是像素坐标字段。如果打算自行二开,建议优先选地图组件方案,后续扩展室内定位能力更容易。
7. 功能测试与效果验证
拿到项目后,先不要急着改代码,按照下面的顺序跑通整条链路,再考虑二次开发。
7.1 后端接口测试
启动 SpringBoot 前先确认三项:MySQL 已启动且已导入 SQL 脚本、application.yml数据库密码正确、Maven 依赖下载完成。
启动成功后,可以用浏览器或 Postman 直接测接口:
| 测试接口 | 请求示例 | 预期结果 |
|---|---|---|
| 楼宇搜索 | GET/api/building/search?keyword=图书馆 | 返回包含“图书馆”字段的楼宇列表 |
| 楼宇详情 | GET/api/building/1 | 返回 id=1 的楼宇完整信息 |
| AI 对话 | POST/api/ai/chat,body 为{"question": "东门到图书馆怎么走"} | 返回自然语言描述或结构化路径信息 |
7.2 AI 对话测试用例
| 测试维度 | 输入示例 | 关注点 |
|---|---|---|
| 基础问答 | “你好” | 模型是否能正常回复,超时时间多少 |
| 楼宇查询 | “三号教学楼在哪” | 是否能从数据库匹配到正确楼宇 |
| 路径规划 | “从南门到体育馆怎么走” | 是否返回合理的描述性路径 |
| 多轮对话 | “图书馆几点开放”“那自习室呢” | 系统是否有上下文记忆,无记忆时如何降级 |
| 无效输入 | “今天天气怎么样” | 模型是否会如实回答无法处理,而不是编造校园信息 |
| 超长文本 | 输入一段 500 字的问题 | 接口是否报错,超时如何处理 |
前端验证可以通过微信开发者工具完成,重点看:
- 小程序能否拉起后端接口,控制台没有跨域或请求失败报错;
- AI 输入“图书馆”能触发搜索跳转或返回位置信息;
- 收藏、查看详情、提交反馈整条操作链是否正常。
7.3 批量数据导入验证
毕设项目通常不会只预置三五条楼宇数据,测评时老师很可能要求“导入全校所有楼宇”。因此建议准备一个批量导入接口,或者用 SQL 脚本 + 数据集方式导入。
通用做法是在后端加一个/api/admin/building/import接口,接收 JSON 数组或 Excel 文件:
[ { "name": "第一教学楼", "code": "J1", "address": "东门南侧", "longitude": 113.123456, "latitude": 23.123456, "floorCount": 6, "description": "主要教学楼之一" }, { "name": "图书馆", "code": "LIB", "address": "校园中心", "longitude": 113.234567, "latitude": 23.234567, "floorCount": 8, "description": "含自习区和借阅区" } ]服务端批量插入前先做数据校验,比如楼宇名称不能重复、经纬度必须在合理范围内。导入完成后返回成功条数和失败原因,方便批量排查。
8. 性能与资源占用观察
这个项目不涉及本地大模型推理,因此没有显存压力,主要关注的是内存、CPU、网络延迟和数据库连接。
| 资源 | 观察点 | 说明 |
|---|---|---|
| JVM 内存 | IDEA/命令行启动日志,或用 JConsole 查看 | SpringBoot 默认堆内存 256M 起步,8G 内存的开发机无压力 |
| 数据库连接 | 是否有连接池配置,默认最大连接数 | 毕设场景下连接数不用调太高 |
| AI 接口延迟 | 等服务的响应时间 | 常见范围为 1 到 5 秒,取决于模型和网络 |
| 小程序请求量 | 开发者工具 Network 面板 | 本地调试主要看请求是否堆积、是否有失败请求 |
在 IDEA 启动时,如果发现内存偏高,可以限制启动内存:
java -Xms256m -Xmx512m -jar campus-navigation.jarAI 请求是最容易出现性能瓶颈的环节。几个优化建议:
- 在
AiChatService里设置合理的超时时间,建议 30 到 60 秒,超时后返回兜底文案; - 相同问题可以缓存,10 分钟内重复提问直接返回历史结果;
- 对话历史记录只保存最近 10 条,避免请求体过大导致接口迟迟不返回;
- 接口加上简单的用户级别限流,比如同一用户 5 秒内只能发一条 AI 请求,防止误操作造成 API 费用超支。
9. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| SpringBoot 启动失败 | 端口被占用或数据库连接失败 | 看控制台报错,检查 8080 端口和 MySQL 账号密码 | 关闭占用进程,修改server.port,更正application.yml |
| 小程序请求后返回 404 | 路径访问错误或后端未启动 | 检查 Network 面板请求 URL,对比后端的@RequestMapping路径 | 修正请求路径,或重新打包启动后端 |
| 小程序本地预览请求失败 | 未开启“不校验合法域名” | 打开开发者工具详情设置 | 勾选“不校验合法域名” |
| MySQL 中文乱码 | 数据库或连接字符集不对 | 查看表中数据是否乱码,检查连接 URL | 在application.yml连接串中加入characterEncoding=utf8 |
| AI 接口一直超时 | 网络不通、API Key 错误或模型名不对 | 用 Postman 直接调 AI 接口,看返回状态码 | 修正 API Key 和模型名,检查网络连通性 |
| AI 回答与校园数据不一致 | 本地数据未注入 Prompt | 查看后端日志中发送给模型的请求体 | 在 Prompt 模板中拼接近距离楼宇数据 |
| 表不存在 | 未执行 SQL 脚本 | 查看 MySQL 中是否有对应数据库表 | 执行源码中的建表脚本,确认库名与配置一致 |
| 路径规划结果与实际不符 | 坐标数据失真 | 检查楼宇经纬度或像素坐标映射关系 | 校正坐标数据,或在返回结果中提示“仅供参考” |
| 小程序真机预览失败 | 后端地址不是公网地址 | 真机无法访问 localhost | 将后端部署到公网服务器并配置 HTTPS 域名 |
答辩前最容易被问到的几个坑:
- 为什么 AI 回答“图书馆几点关门”的时候,模型说得不准?
回答思路:图书馆开放时间属于运营数据,需要通过后端在 Prompt 中注入校园公告数据库数据,而不是完全依赖模型自身知识。 - 为什么不用大模型直接返回路径规划结果?
回答思路:大模型不具备实时坐标计算能力,路径规划采用的是地图坐标 + 预置路径数据,大模型负责自然语言理解和结果展示,两者各司其职。
10. 最佳实践与使用建议
10.1 目录结构建议
拿到源码以后,建议先按照下面的维度梳理目录:
campus-navigation-backend SpringBoot 后端工程 campus-navigation-miniapp 微信小程序前端工程 sql 数据库脚本 docs 接口文档、数据字典 assets 近景图片、地图底图、答辩素材保持前后端工程分离,SQL 脚本独立存放。论文里的数据字典、E-R 图和接口表都从这套结构中整理,答辩时找资料会方便很多。
10.2 Prompt 管理
不要在每个调 AI 的地方散写 Prompt。统一放一个常量类或配置文件中,方便答辩时演示“如果希望模型更精确地识别楼宇,只需要调整 Prompt 模板”的过程。
public class PromptTemplates { public static final String NAVIGATION_SYSTEM_PROMPT = """ 你是一个校园智能导航助手。你的任务是根据用户输入,推荐校园内的楼宇或路线。 已知楼宇信息如下: {buildingData} 请用简洁、友好的自然语言回答用户问题。如果无法确定,请说明当前数据中暂时没有该楼宇信息。 """; }10.3 安全合规提醒
项目里涉及的 AI 大模型调用,不应在论文或演示中使用任何未授权的第三方接口。答辩时讲清楚你使用的是哪家合法服务、申请方式和调用限制。不能通过非正规渠道获取接口密钥,也不要在代码里提交真实密钥。
另一方面,用户 openid 属于敏感信息,需要做脱敏存储和访问控制。数据库不要明文保存密码,接口层要校验 token。论文里可以专门写一小节“系统安全设计”,这是加分项。
10.4 演示环境准备
答辩或演示前,建议准备一套独立的最小环境:
- 提前启动 MySQL、后端服务和微信开发者工具;
- 准备 10 条以上楼宇测试数据,覆盖“图书馆、教学楼、食堂、宿舍、体育馆”等高频场景;
- 写好 3 到 5 条 AI 测试问题,保证现场输入后能返回稳定答案;
- 把后端恢复出厂配置的步骤写在 README 里,避免答辩现场端口被占用、数据库连错。
11. 总结与下一步
这套项目最值得尝试的点,是它把 SpringBoot、微信小程序和 AI 大模型三个技术方向串成了一条完整的业务链路。相比单写一个“SpringBoot 增删改查”或者“小程序登录 Demo”,这套系统的表达空间更大,答辩时能讲的东西也更多。
拿到项目后,第一步不要急着改功能,先按文档把数据库初始化、后端启动、小程序预览三步跑通。后端能访问、首页能出数据、AI 能回复,再逐步优化搜索排序、路径展示和收藏逻辑。
最容易踩的坑有三个:数据库初始化失败、AI 接口超时、小程序合法域名没配置。这三个问题排查完,整个系统的骨架基本就稳定了。
后续可以扩展的方向包括:接入校园公告和课表数据做多模态查询、增加室内楼层导航、把 AI 回答落库形成知识库检索、增加管理后台做数据可视化统计。每一个方向都能单独作为论文的创新点来写,也可以继续作为毕业设计的深入优化内容。
如果你正在选毕设题目,或者已经准备拿这套项目开工,建议先对照文章第 4 节的环境清单把开发环境配好。能跑通,再谈优化;能演示,再谈创新。