| 项目 |
内容 |
| 这个作业属于哪个课程 |
课程社区 |
| 这个作业的要求在哪里 |
作业要求 |
| 我在这个课程的目标是 |
团队合作,分工完成软件的完整开发流程 |
| 这个作业在哪个具体方面帮助我实现目标 |
讨论确定服务器等基础设施准备 |
功能规格说明书(Functional Specification)
1. 项目概述
1.1 项目背景与目标
本项目旨在为北京航空航天大学学生打造一款一站式校园学习生活工具箱。针对当前校园数字化服务入口分散、操作流程割裂、缺乏面向学期制复杂学业规划的痛点,将智慧日程管理、AI学习规划、校园生活服务整合于统一平台。
核心目标: 实现“看一个界面就知道今天该做什么”,提供从日程规划到知识掌握的全链路校园助手。
1.2 产品定位
- 名称: 学习生活工具箱(暂定)
- 形态: 微信小程序(基于 uni-app 跨端开发,优先适配微信小程序环境)
- 用户群体: 北航在校本科生、研究生(V1.0 阶段)
1.3 术语定义
- POI: Point of Interest,校园内的兴趣点(如教学楼、食堂、快递点、打印店)。
- RAG: Retrieval-Augmented Generation,检索增强生成,用于基于知识库的AI问答。
- 博雅: 北航特有的博雅课程/讲座活动体系。
2. 用户角色与特征
| 角色 |
特征描述 |
核心需求 |
| 普通学生用户 |
拥有北航统一认证账号/学号,日常依赖课表、需要参加博雅、有考试与DDL压力。 |
快速查看今日安排、一键导入课表、找到教室/快递点、利用AI辅助复习预习。 |
| 系统管理员 |
运维人员或开发者。 |
管理POI数据、审核UGC内容(如有)、监控AI调用额度、查看系统日志。 |
3. 功能性需求
3.1 用户认证与基础模块 (M0)
| ID |
功能名称 |
详细描述 |
输入/前置条件 |
输出/后置条件 |
| F-U-01 |
微信授权登录 |
用户通过微信一键登录(wx.login 获取 code 换取 openid)。 |
用户点击登录按钮。 |
生成系统 Token,进入主界面。 |
| F-U-02 |
学号绑定 |
绑定北航学号与统一认证账号(用于爬取或同步课表数据)。 |
输入学号、密码,通过邮箱验证码验证。 |
学号与微信账号关联,获得课表导入权限。 |
| F-U-03 |
个人信息管理 |
查看/修改头像、昵称、默认校区偏好。 |
已登录状态。 |
偏好设置保存至缓存及数据库。 |
3.2 智慧日程模块 (M1)
3.2.1 数据源管理
| ID |
功能名称 |
详细描述 |
| F-C-01 |
课表一键导入 |
爬虫/模拟登录机制: 用户绑定后,后端模拟登录教务系统获取当前学期个人课表。 解析规则: 识别上课周次、节次、地点、教师。 冲突处理: 识别单双周、实验课单独分班、临时调停课。 |
| F-C-02 |
外部日程接入 |
支持手动添加 博雅活动、考试倒计时、自定义DDL。 |
3.2.2 视图与交互
| ID |
功能名称 |
详细描述 |
UI 交互说明 |
| F-V-01 |
日程统一视图 |
将课表、博雅、考试、DDL 融合在同一时间轴/日历格中展示。 |
日视图: 时间轴形式,高亮当前时间线。 周视图: 表格形式,颜色区分课程/活动类型。 月视图: 圆点标记忙碌程度。 |
| F-V-02 |
冲突检测与提醒 |
添加新日程时,若时间段与现有课表/日程重叠,前端标红提示。 |
弹窗警告:“该时段已有课程[课程名],是否继续添加?” |
| F-V-03 |
日程导航联动 |
点击日程卡片上的地点字段,直接跳转至 地图模块 并规划路线。 |
例如:点击“主M101”,跳转地图并显示从当前位置到主楼的步行路线。 |
| F-V-04 |
AI 智能排程 |
用户语音/文字输入待办杂事(如“明天下午要跑步、写高数作业、取快递”),调用 LLM 解析并建议合理的执行时段。 |
用户可一键将 AI 生成的计划拖拽或点击采纳至日程表。 |
3.3 智能学习助手模块 (M2)
| ID |
功能名称 |
详细描述 |
技术实现要点 |
| F-AI-01 |
知识库构建 |
支持用户上传 PDF/Word 课件、教材章节。 |
后端解析文本切片,存入 Chroma 向量数据库。 |
| F-AI-02 |
学期预习规划 |
基于用户课表(课程名+教材),自动生成 周粒度预习计划。 |
Prompt 设计:输入课程名 + 校历周次,输出每周应阅读的章节范围。 |
| F-AI-03 |
课程知识问答 |
基于 RAG 的对话功能。用户提问“解释一下傅里叶变换”,AI 结合上传的课件上下文回答。 |
使用 DeepSeek 大模型 + Chroma 检索增强。 |
| F-AI-04 |
学习计划导入 |
在 AI 对话中生成的复习计划,支持一键 导出为日程 添加到 M1 模块。 |
前端解析 AI 回复中的 Markdown 表格或 JSON 结构。 |
3.4 快捷入口与校园导览模块 (M3)
3.4.1 校园生活导航(智能地图)
| ID |
功能名称 |
详细描述 |
| F-M-01 |
POI 分类检索 |
预设分类:教学楼、食堂、快递点、打印店、校医院、运动场馆。 |
| F-M-02 |
场景化问路 |
不局限于“搜地点”,支持场景描述,如:“哪里能取圆通快递?”、“主楼哪个门离 M101 最近?”(V1.0 依赖人工标注数据,V2.0 引入 AI 理解)。 |
| F-M-03 |
营业状态展示 |
展示 POI 的营业时间(如食堂窗口时间、图书馆闭馆时间),并在非营业时段置灰显示。 |
| F-M-04 |
路线规划 |
调用 腾讯地图微信小程序 SDK 实现校内步行/骑行路线规划。 |
3.4.2 快捷入口聚合
| ID |
功能名称 |
详细描述 |
| F-L-01 |
Webview 跳转 |
整合高频链接:教务系统、智慧北航、网费充值、体育场馆预约。 |
| F-L-02 |
高频问答库 |
整理纯文本 Q&A:校园卡丢了怎么办、校车时刻表、宿舍报修电话。 |
| F-L-03 |
学业工具集 |
GPA 计算器(支持百分制/五级制转换规则)、学分统计进度条。 |
3.5 边界条件与异常处理
3.5.1 用户认证与基础模块
- 当用户拒绝微信授权时,系统应停留在登录页,并提示授权后方可使用核心功能。
- 当学号、统一认证信息或邮箱验证码校验失败时,系统应进行提示,并允许重新输入。
- 当登录状态失效或 Token 过期时,系统应要求用户重新登录,且不得继续访问需要鉴权的数据。
- 当用户重复绑定已关联学号时,系统应提示已绑定状态,避免重复写入。
3.5.2 智慧日程模块
- 当课表导入失败时,系统应提示失败原因,并提供重新导入或手动录入方案。
- 当课表数据解析不完整时,系统应优先展示已成功识别的信息,并对缺失字段进行标记。
- 当新增日程与已有事件发生时间冲突时,系统不得默认覆盖原有安排,需保留冲突处理入口,并由用户决定是否继续保存。
- 当用户输入的开始时间晚于结束时间,或缺少标题、时间等必要字段时,系统应阻止保存并提示修改。
- 当 AI 生成的日程存在时间重叠、字段缺失或语义不清时,系统不得直接写入日历,需由用户确认后再导入。
- 当导航服务异常时,系统应保留地点文本信息,并提示用户稍后重试。
3.5.3 智能学习助手模块
- 当上传文件格式不受支持时,系统应拒绝导入并提示支持的文件类型范围。
- 当文件解析失败、内容为空或知识库构建失败时,系统应提示导入失败原因。
- 当当前课程尚未上传资料时,系统应提示暂无知识库内容。
- 当 AI 未检索到足够相关内容时,系统应明确提示未找到相关信息,避免输出误导性回答。
- 当 AI 生成的学习计划无法解析为结构化日程时,系统应支持用户手动编辑后再导入。
3.5.4 快捷入口与校园导览模块
- 当用户未授权定位权限时,系统应允许继续浏览地图与 POI 信息,但路线规划功能应提示需开启定位。
- 当 POI 缺少营业时间、联系电话或分类信息时,系统应显示“信息暂缺”,不得显示错误内容。
- 当搜索无匹配结果时,系统应提示未找到相关地点或服务。
- 当地图接口调用失败或网络异常时,系统应提示加载失败,并允许用户刷新重试。
- 当外部快捷入口无法打开时,系统应提示跳转失败,不得导致主程序崩溃。
- 当高频问答内容未收录时,系统应提示暂无相关答案。
3.5.5 系统运行边界
- 在无网络状态下,系统应自动进入离线降级模式,禁止发起课表同步、地图导航和 AI 问答等在线请求。
- 当教务系统、地图服务或模型服务不可用时,系统应对对应功能进行降级处理,并阻止用户继续发起无效请求。
- 当用户短时间内频繁调用 AI 能力时,系统应进行频率限制,并提示稍后再试。
- 当系统检测到数据同步延迟时,应提示当前内容可能不是最新结果。
4. 非功能性需求
4.1 性能要求
- 响应时间: 课表导入过程(含爬虫抓取)需在前端显示进度条,平均耗时 < 5s。
- 地图加载: 地图 SDK 初始化及 POI 标注渲染 < 2s。
- AI 流式响应: 首个 Token 生成时间 < 1.5s,支持流式打字机效果。
4.2 安全性
- 数据隔离: 严格校验 JWT Token,确保用户 A 无法读取用户 B 的课表及日程数据。
- 敏感信息: 用户教务密码不落地存储,仅用于换取临时 Cookie/Session 后立即丢弃,或采用北航统一认证 OAuth 标准协议(视校方开放情况)。
4.3 可用性
- 新生友好: 首次进入应用展示功能导览蒙层(Onboarding)。
- 离线支持: 课表数据、校历数据需缓存至本地 Storage,断网状态下仍可查看已缓存日程。
4.4 可扩展性
- 代码结构需预留 多角色接口(如后续增加教师端查看学生提交情况)。
5. 外部接口与数据依赖
| 接口/数据源 |
用途 |
获取方式 |
风险预案 |
| 北航教务系统 |
课表抓取 |
模拟登录/爬虫 |
若教务系统改版,需提供手动录入/拍照识别兜底方案。 |
| 腾讯地图 SDK |
校内导航、定位 |
API 调用 |
校内楼宇内导航需补充人工绘制路网数据。 |
| DeepSeek API |
AI 对话与规划 |
RESTful API |
需配置 API Key 轮转池,限制单用户日调用次数防止刷量。 |
| 北航邮箱系统 |
学号绑定验证 |
SMTP / 第三方推送 |
需确认北航邮箱白名单策略。 |
6. 界面原型与流程约束
6.1 核心页面清单
- 今日概览页(首页): 显示当前天气、下一节课倒计时、今日待办清单、快捷功能金刚区。
- 日程日历页: 承载 M1 模块的所有视图切换。
- 校园导览页: 顶部搜索栏 + 分类图标 + 腾讯地图组件。
- AI 助手页: 对话气泡流 + 底部文件上传入口。
- 个人中心页: 账号绑定状态、GPA 计算入口、设置。
6.2 业务流程约束
- 状态同步: 用户在 AI 模块生成的日程,必须在日历页实时刷新可见(通过 EventBus 或全局状态管理)。
- 权限前置: 用户未绑定学号时,隐藏课表导入功能,并提示“绑定后解锁”。
7. 验收标准
7.1 用户认证与基础模块验收
- 用户点击微信登录后,系统能够成功完成身份认证并进入主界面。
- 用户完成学号、统一认证信息及邮箱验证码校验后,系统能够成功绑定账号,并开放课表导入权限。
- 用户在个人中心修改昵称、头像或默认校区偏好后,重新进入页面仍能正确显示已保存信息。
7.2 智慧日程模块验收
- 用户完成课表导入后,系统能够正确展示课程名称、上课时间、周次、地点和教师信息。
- 对于单双周课程、实验课、停课/补课等复杂排课情况,系统能够正确识别并在日程中准确展示。
- 用户手动添加博雅活动、考试、DDL 等事件后,系统能够在日视图、周视图、月视图中正常显示。
- 当用户新增事件与已有课程或日程发生时间重叠时,系统能够给出冲突提示,且提示内容包含冲突对象名称。
- 用户点击日程中的地点字段后,系统能够跳转至地图页面,并生成从当前位置到目标地点的路线信息。
- 用户输入自然语言待办后,系统能够生成可采纳的结构化日程建议,且用户确认后可成功写入日历。
7.3 智能学习助手模块验收
- 用户上传 PDF 或 Word 课件后,系统能够成功完成文档解析,并可在对应课程下发起问答。
- 用户发起课程问题时,系统能够基于上传资料返回与课程内容相关的回答,而不是仅返回通用回答。
- 系统能够基于课表与课程资料生成周粒度学习/预习计划。
- 用户对 AI 生成的学习计划执行“导入日程”操作后,相关计划能够作为事件出现在智慧日程模块中。
7.4 快捷入口与校园导览模块验收
- 用户进入校园导览页后,系统能够按分类展示教学楼、食堂、快递点、打印店、校医院、运动场馆等 POI。
- 用户搜索场景化问题或地点关键词后,系统能够返回匹配的目标地点或服务信息。
- 对于配置了营业时间的 POI,系统能够根据当前时间正确显示营业/非营业状态。
- 用户选择目标地点后,系统能够生成校内步行或骑行路线,并展示预计耗时。
- 用户点击快捷入口后,系统能够正确跳转至对应教务、缴费、预约或学习平台页面。
- 用户查询高频问答内容时,系统能够返回对应校园生活问题的文本答案。
- 用户输入成绩与学分数据后,系统能够正确输出 GPA 结果与学分统计结果。
7.5 非功能性需求验收
- 课表导入过程应提供前端进度反馈,平均耗时应满足文档要求。
- 地图页面初始化及 POI 渲染应满足文档规定的性能要求。
- AI 对话应支持流式响应,首个响应时间应满足文档规定的性能要求。
- 在未登录或 Token 非法情况下,系统不得返回其他用户的课表、日程或学习数据。
- 在无网络情况下,系统仍能够展示本地缓存的课表和日程数据。
7.6 验收结论判定
- 核心功能项(第 1—20 条)全部通过,方可认定系统满足基本业务验收要求。
- 非功能项(第 21—25 条)中如有未通过项,应记录为性能或稳定性缺陷,并在上线前完成修复。