2026秋软工实践 FitPulse——项目原型设计+概要设计
2026秋软工实践 FitPulse——项目原型设计+概要设计
| 项目 | 内容 |
|---|---|
| 作业所属课程 | 202601软件工程 |
| 作业要求 | 2026秋软工实践团队作业第二次 |
| 作业的目标 | 在第一次需求分析的基础上,完成软件原型设计(用户端+管理后台),进行概要设计(系统架构、UML建模),设计数据库结构,制定详细开发计划,并建立团队GitHub仓库作为项目文档与代码的管理中心 |
| 团队名称 | FitPulse |
| 团队成员学号-名字 | 102401317-罗炜、102401529-陈加豪、102401527-林复彬、102401521-陈辉腾、102401218-罗堉楠、102401328-马锦城、102401531-徐心铭、102401121-张智轩、102401119-林祺皓、102401203-连向薇、102401222-李江炜 |
一、原型设计(40%)
1.1 原型设计工具与在线展示
1.2 设计理念
FitPulse 是一款面向学生健身新手的「随身智能教练」。原型设计围绕以下核心理念展开:
- 对话即交互:用户与智能Agent通过自然语言对话完成所有操作——查询动作、生成计划、上传纠错,无需复杂菜单层级。
- 三屏合一:教练对话、训练计划、个人记录三个核心视图通过底部导航一键切换。
- Agent 可见:设计上让用户清楚感知「正在和智能教练对话」,而非传统的表单填写式工具。
- 虚拟陪练形象:加入 AI 虚拟陪练人物(卡通健身教练),以动画形象呈现于对话页和计划页,提供陪伴感和鼓励反馈,降低健身过程的枯燥感。
1.3 用户端应用原型
1.3.1 首页——智能教练对话
用户打开应用即进入与 FitPulse 智能教练的对话界面:
- 欢迎引导:首次进入时,Agent 主动问候并采集用户基本信息(健身水平、目标、可用器械、每周可训练天数),以对话气泡形式逐条询问,降低填写负担。
- 对话输入:底部固定输入框 + 发送按钮,支持文字输入;右侧「📷」按钮支持拍照/上传动作照片用于纠错。
- 回答展示:Agent 回答以富文本卡片形式呈现——文字说明、配图、结构化列表(如训练计划表格),并标注知识出处(如「参考:运动解剖学·深蹲篇」)。
- 快捷入口:对话顶部提供三个快捷按钮——「🔍 查动作」「📋 生成计划」「🩺 动作纠错」,点击后自动填入引导性提问。
- 虚拟陪练形象:页面顶部展示 AI 虚拟陪练动画人物(卡通健身教练),以浮动动画效果呈现,并配有「AI虚拟陪练在线」标记。Agent 消息旁配有小尺寸虚拟形象 + 对话气泡,如「你好!我是你的AI虚拟陪练,会一直陪着你训练,加油!💪」,增强陪伴感和激励机制。

1.3.2 训练计划页
- 计划列表:按日期展示当前周的训练计划,每天一张卡片,包含:日期、训练部位、动作列表(动作名+组数+次数+休息时间)、预计时长。
- 计划详情:点击卡片展开完整计划,每个动作配有要领缩略图、目标肌群标注。
- 完成打卡:每个动作可勾选「已完成」,当日全部完成时卡片变为绿色并显示「✅ 今日完成」。
- 刷新计划:顶部「🔄 重新生成」按钮,点击后 Agent 根据用户最新状态重新生成一周计划。

1.3.3 动作纠错页
- 上传入口:支持两种方式——「📸 拍照」实时拍摄动作照片、「🖼️ 从相册选择」上传已有照片。
- 纠错结果:上传后 Agent 分析并返回结构化纠错反馈:
- 整体评价(如「俯卧撑整体不错,但有一个关键问题需要调整」)
- 问题列表(每条标注问题部位 + 问题描述 + 纠正建议 + 参考图对比)
- 安全提示(如有疼痛/不适,建议停止并就医)
- 历史记录:下方按时间倒序展示历史纠错记录,可展开查看详情。

1.3.4 个人中心
- 个人资料:头像、昵称、健身水平、目标、可用器械,均可编辑修改。
- 训练统计:本周训练天数、累计训练次数、总训练时长、完成率环形图。
- 我的纠错:历史纠错记录汇总入口。
- 关于 FitPulse:版本信息、使用帮助、反馈入口。

1.4 后台管理原型
后台管理面向系统管理员,用于管理知识库内容和查看系统运行状态:
- 知识库管理:三大领域知识模块(标准动作/肌肉发力/错误姿势)的条目列表,支持新增、编辑、删除、批量导入。每条知识包含标题、模块分类、正文内容、配图、出处来源。
- 用户管理:用户列表(ID、昵称、注册时间、训练天数),支持查看用户详情。
- 系统概览:仪表盘——总用户数、今日活跃用户、本周纠错次数、知识库条目数、API 调用量趋势图。
- 反馈管理:用户反馈列表,支持标记处理状态。


1.5 智能体交互界面与任务流程
FitPulse 的核心差异在于「Agent 驱动的对话式交互」。原型中重点设计了三条 Agent 任务流程:
流程一:查询动作要领
用户点击「🔍 查动作」→ 输入框自动填入"我想了解……"
→ 用户输入"深蹲的标准动作"
→ Agent 识别意图 → 调用「动作库查询」工具 → 检索知识库
→ 返回结构化回答:
📌 深蹲(标准动作)
目标肌群:股四头肌、臀大肌、核心
起始姿势:双脚与肩同宽,脚尖微外展……
动作轨迹:吸气下蹲至大腿与地面平行……
呼吸:下蹲吸气,起身呼气
节奏:2-1-2(下2秒-底停1秒-上2秒)
⚠️ 常见错误:膝内扣、塌腰、重心前移
📷 [配图:深蹲标准姿势]
📚 参考:运动解剖学·下肢篇
流程二:生成训练计划
用户点击「📋 生成计划」
→ Agent 检查用户档案(已采集过则跳过)
→ 若未采集:依次询问「你的健身水平?」「目标?」「有什么器械?」「每周能练几天?」
→ 调用「训练计划生成」工具
→ 输出结构化周计划卡片(动作+组数+次数+休息+配图+选择理由)
→ 用户可「保存到我的计划」
流程三:动作纠错
用户点击「🩺 动作纠错」→ 拍照/选照片上传
→ Agent 接收图片 → 调用「动作纠错」工具
→ 结合「标准动作」+「错误姿势危害」知识分析
→ 返回纠错卡片:
整体评价 + 问题列表(问题部位/描述/纠正/参考图)
→ 若检测到明显伤痛信号 → 走安全边界:建议就医
1.6 UI 设计说明
- 配色方案:主色活力橙
#FF6B35,辅色深灰#2D2D2D,背景浅灰#F5F5F5,强调健康、活力、专业的品牌感。 - 字体:系统默认中文字体(苹方/PingFang SC / 微软雅黑),标题加粗,正文常规。
- 圆角卡片:所有内容以圆角卡片承载,视觉上温和友好。
- 底部导航:三个Tab——「💬 教练」「📋 计划」「👤 我的」,教练Tab居中突出。
- 交互动效:对话气泡淡入、卡片点击微缩放、纠错结果逐条展开,提升操作反馈感。
二、概要设计(40%)
2.1 系统架构设计
FitPulse 采用前后端分离 + Agent 编排架构,整体分为四层:
┌────────────────────────────────────────────────────────────┐
│ 用户接入层 │
│ 响应式网页(移动端优先) │
│ React SPA · 对话/计划/纠错/个人中心 │
└────────────────────────┬───────────────────────────────────┘
│ HTTPS / WebSocket
┌────────────────────────▼───────────────────────────────────┐
│ API 网关层 │
│ Nginx 反向代理 · 路由分发 · 限流 · 鉴权 │
└────────────────────────┬───────────────────────────────────┘
│
┌────────────────────────▼───────────────────────────────────┐
│ 业务编排层(核心) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ 意图识别 │ │ 工具调度 │ │ 上下文管理 │ │
│ │ Router │ │ Dispatcher │ │ Context Manager │ │
│ └──────┬──────┘ └──────┬──────┘ └──────────┬──────────┘ │
│ │ │ │ │
│ ┌──────▼────────────────▼─────────────────────▼──────────┐ │
│ │ Agent 编排引擎 (Orchestrator) │ │
│ │ 接收用户输入 → 意图分类 → 装配上下文 → 调度工具 → 生成响应 │ │
│ └────────────────────────┬───────────────────────────────┘ │
└───────────────────────────┼─────────────────────────────────┘
│
┌───────────────────────────▼─────────────────────────────────┐
│ 能力支撑层 │
│ ┌──────────┐ ┌──────────────┐ ┌────────────────────────┐ │
│ │ LLM API │ │ 知识检索 RAG │ │ 工具集 (Tools) │ │
│ │ (Claude) │ │ (向量检索+重排)│ │ 计划生成/纠错/动作查询 │ │
│ └──────────┘ └──────────────┘ └────────────────────────┘ │
└───────────────────────────┬─────────────────────────────────┘
│
┌───────────────────────────▼─────────────────────────────────┐
│ 数据持久层 │
│ ┌──────────┐ ┌──────────────┐ ┌────────────────────────┐ │
│ │ MySQL │ │ 向量数据库 │ │ 对象存储 (OSS) │ │
│ │ 用户/计划 │ │ Milvus/Chroma │ │ 动作图片/纠错照片 │ │
│ │ /记录 │ │ 知识向量 │ │ │ │
│ └──────────┘ └──────────────┘ └────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
架构说明
| 层 | 职责 | 技术选型 |
|---|---|---|
| 用户接入层 | 前端界面,用户交互 | React 18 + TailwindCSS,移动端优先响应式布局 |
| API 网关层 | 统一入口,流量控制 | Nginx + JWT 鉴权 |
| 业务编排层 | Agent 核心:意图识别、工具调度、上下文管理、生成响应 | Python (FastAPI) + LangChain/LlamaIndex |
| 能力支撑层 | LLM 调用、知识检索、工具执行 | Claude API、Chroma/Milvus、自定义工具 |
| 数据持久层 | 业务数据、知识向量、文件存储 | MySQL 8.0、向量数据库、MinIO/OSS |
2.2 智能体集成设计
2.2.1 Agent 与系统的集成方式
FitPulse 的智能体不是独立的对话机器人,而是深度嵌入软件系统的编排核心:
用户输入(文字/图片)
│
▼
┌──────────────────┐
│ 系统提示词 │ ← 角色设定:专业健身教练
│ System Prompt │ 输出规范、安全边界
└──────┬───────────┘
│
▼
┌──────────────────┐
│ 意图分类器 │ ← 判断用户意图类别:
│ Intent Router │ 动作查询 / 计划生成 / 动作纠错 / 闲聊
└──────┬───────────┘
│
├── 动作查询 ──→ [知识检索 RAG] ──→ [组装上下文] ──→ LLM 生成
│
├── 计划生成 ──→ [采集用户档案] ──→ [计划生成工具] ──→ LLM 润色
│
├── 动作纠错 ──→ [图片预处理] ──→ [知识检索] ──→ [纠错工具] ──→ LLM 分析
│
└── 闲聊 ──→ 直接 LLM 回复(不触发工具)
2.2.2 领域知识在系统中的作用
| 知识模块 | 存储方式 | 检索方式 | 在Agent中的作用 |
|---|---|---|---|
| 标准动作 | 结构化条目 + 向量 | 语义检索(按动作名/目标肌群/描述) | 回答动作要领、提供配图、作为纠错基准 |
| 肌肉发力 | 结构化条目 + 向量 | 语义检索(按动作名/肌群) | 解释发力感、分析代偿、回答"为什么酸这里" |
| 错误姿势危害 | 结构化条目 + 向量 | 语义检索(按动作名/错误类型) | 定位纠错原因、评估风险、给出纠正步骤 |
2.2.3 工具调用与任务流程
| 工具名称 | 触发条件 | 输入 | 输出 | 调用的领域知识 |
|---|---|---|---|---|
query_exercise |
用户询问动作要领 | 动作名/肌群名 | 动作卡片(要领+图文+出处) | 标准动作、肌肉发力 |
generate_plan |
用户要求生成计划 | 用户档案(水平/目标/器械/时间) | 结构化周计划 | 标准动作、肌肉发力 |
correct_posture |
用户上传动作照片/描述不适 | 图片 + 可选文字描述 | 纠错卡片(问题+纠正+对比) | 标准动作、错误姿势危害 |
get_progress |
用户查询训练进度 | 用户ID | 统计数据+可视化数据 | 用户训练记录 |
2.3 UML 设计
2.3.1 用例图(Use Case Diagram)
┌─────────────────────────────────────────┐
│ FitPulse 系统 │
│ │
┌──────────┐ │ ┌──────────────────────────────┐ │
│ │ 查询动作要领 │ │ │ │
│ │─────────────────▶│ 「查询动作要领」 │ │
│ │ │ │ extend: 显示配图 │ │
│ │ │ │ extend: 标注知识出处 │ │
│ │ │ └──────────────────────────────┘ │
│ │ │ │
│ 普通 │ 生成训练计划 │ ┌──────────────────────────────┐ │
│ 用户 │─────────────────▶│ 「生成训练计划」 │ │
│ │ │ │ include: 采集用户档案 │ │
│ │ │ │ extend: 保存到我的计划 │ │
│ │ │ └──────────────────────────────┘ │
│ │ │ │
│ │ 动作纠错 │ ┌──────────────────────────────┐ │
│ │─────────────────▶│ 「动作纠错」 │ │
│ │ │ │ include: 上传动作照片 │ │
│ │ │ │ extend: 安全就医建议 │ │
│ │ │ └──────────────────────────────┘ │
│ │ │ │
│ │ 打卡/记录 │ ┌──────────────────────────────┐ │
│ │─────────────────▶│ 「训练打卡与进度查看」 │ │
└──────────┘ │ └──────────────────────────────┘ │
│ │
┌──────────┐ │ ┌──────────────────────────────┐ │
│ │ 管理知识库 │ │ │ │
│ 系统 │─────────────────▶│ 「知识库管理」 │ │
│ 管理员 │ │ │ CRUD知识条目、批量导入 │ │
│ │ 管理用户 │ └──────────────────────────────┘ │
│ │─────────────────▶│ 「用户管理」 │
│ │ 查看系统概览 │ └──────────────────────────────┘ │
│ │─────────────────▶│ 「系统概览仪表盘」 │
└──────────┘ │ └──────────────────────────────┘ │
└─────────────────────────────────────────┘
2.3.2 活动图(Activity Diagram)——训练计划生成流程
┌──────┐
│ 开始 │
└──┬───┘
│
▼
┌─────────────────┐
│ 用户请求生成计划 │
└────────┬────────┘
│
▼
┌─────────────────┐ ┌─────────────────┐
│ 检查用户档案 │────▶│ 档案不完整 │
│ 是否完整? │ │ 逐项询问采集 │
└────────┬────────┘ └────────┬────────┘
│ 完整 │ 采集完成
▼ ▼
┌─────────────────────────────────────┐
│ 调用「训练计划生成」工具 │
│ 输入:水平/目标/器械/可用时间/偏好 │
└────────────────┬────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ RAG 检索相关动作 │
│ 按目标肌群 + 器械筛选 + 难度匹配 │
└────────────────┬────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 规则引擎编排 │
│ · 每周训练天数 → 分割训练部位 │
│ · 每个动作 3-4 组 × 8-15 次 │
│ · 组间休息 60-90s │
│ · 热身 + 主体训练 + 拉伸 │
└────────────────┬────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ LLM 组装并润色 │
│ · 为每个动作选择理由生成说明文字 │
│ · 标注注意事项 │
│ · 配图标注 │
└────────────────┬────────────────────┘
│
▼
┌─────────────────┐
│ 返回结构化周计划 │
│ 展示给用户 │
└────────┬────────┘
│
┌────▼────┐
│ 用户操作 │
└─┬───┬──┘
│ │
保存 │ │ 重新生成
│ │
▼ ▼
┌────┐ ┌──────────┐
│结束│ │回到「检查 │
└────┘ │用户档案」 │
└──────────┘
2.3.3 活动图(Activity Diagram)——动作纠错流程
┌──────┐
│ 开始 │
└──┬───┘
│
▼
┌─────────────────┐
│ 用户上传动作照片 │
│ + 可选文字描述 │
└────────┬────────┘
│
▼
┌─────────────────┐
│ 图片预处理 │
│ · 格式校验 │
│ · 尺寸标准化 │
│ · 质量检查 │
└────────┬────────┘
│
┌────▼────┐
│ 描述是否 │
│ 包含动作名?│
└─┬───┬──┘
│ │
是 │ │ 否
│ │
▼ ▼
┌──────────┐ ┌──────────────┐
│ 直接检索 │ │ 视觉分析估测 │
│ 对应动作 │ │ 动作类型 │
│ 知识 │ │ (多模态模型) │
└────┬─────┘ └──────┬───────┘
│ │
└──────┬───────┘
│
▼
┌─────────────────────────────────────┐
│ RAG 检索:标准动作 + 错误姿势危害 │
│ 同时获取「应该怎样」和「常见错法」 │
└────────────────┬────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ 调用「动作纠错」工具 │
│ · 对比标准姿势 vs 用户照片 │
│ · 识别偏差部位 │
│ · 匹配已知错误类型 │
└────────────────┬────────────────────┘
│
▼
┌─────────────────────────────────────┐
│ LLM 生成纠错报告 │
│ · 整体评价 │
│ · 问题列表(部位/描述/纠正/参考图) │
│ · 安全兜底检查 │
└────────────────┬────────────────────┘
│
┌──────▼──────┐
│ 是否检测到 │
│ 伤痛信号? │
└──┬──────┬───┘
│ │
是 │ │ 否
│ │
▼ ▼
┌─────────────┐ ┌──────────────┐
│ 追加安全提示 │ │ 返回纠错卡片 │
│ 建议停止并 │ │ │
│ 就医 │ │ │
└──────┬──────┘ └──────┬───────┘
│ │
└───────┬───────┘
│
▼
┌──────┐
│ 结束 │
└──────┘
2.3.4 类图(Class Diagram)
classDiagram
class User {
+String userId
+String nickname
+String avatarUrl
+String fitnessLevel
+String goal
+String[] equipment
+Int weeklyDays
+DateTime createdAt
+DateTime updatedAt
+getProfile() UserProfile
+updateProfile(data) void
}
class Exercise {
+String exerciseId
+String name
+String category
+String[] targetMuscles
+String[] synergists
+String difficulty
+String equipmentNeeded
+String instructions
+String breathing
+String tempo
+String[] imageUrls
+String[] commonErrors
+String source
}
class KnowledgeChunk {
+String chunkId
+String module
+String exerciseId
+String content
+String[] tags
+String source
+Float[] embedding
+DateTime createdAt
}
class TrainingPlan {
+String planId
+String userId
+Int weekNumber
+DateTime startDate
+DateTime endDate
+PlanDay[] days
+String explanation
+String status
+generatePlan(user) void
+updateProgress(dayIndex, exerciseIndex, done) void
}
class PlanDay {
+Int dayIndex
+String focusArea
+PlanExercise[] exercises
+Int estimatedMinutes
+Boolean completed
}
class PlanExercise {
+String exerciseId
+Int sets
+Int reps
+Int restSeconds
+String notes
+Boolean done
}
class PostureCorrection {
+String correctionId
+String userId
+String imageUrl
+String userDescription
+String detectedExercise
+CorrectionIssue[] issues
+String overallAssessment
+String safetyNote
+DateTime createdAt
}
class CorrectionIssue {
+String bodyPart
+String problemDescription
+String correctionAdvice
+String referenceImageUrl
+String severity
}
class WorkoutRecord {
+String recordId
+String userId
+String planId
+Int dayIndex
+DateTime completedAt
+String feedback
+Int difficultyRating
}
class AgentSession {
+String sessionId
+String userId
+Message[] history
+String currentIntent
+Map~String,Object~ context
+DateTime createdAt
+DateTime lastActiveAt
}
class Message {
+String role
+String content
+ToolCall[] toolCalls
+DateTime timestamp
}
class ToolCall {
+String toolName
+Map~String,Object~ args
+String result
+DateTime executedAt
}
class SystemConfig {
+String key
+String value
+String description
}
class Feedback {
+String feedbackId
+String userId
+String type
+String content
+String status
+DateTime createdAt
}
User "1" --> "*" TrainingPlan : 拥有
User "1" --> "*" WorkoutRecord : 记录
User "1" --> "*" PostureCorrection : 纠错
User "1" --> "*" AgentSession : 对话
User "1" --> "*" Feedback : 反馈
TrainingPlan "1" --> "*" PlanDay : 包含
PlanDay "1" --> "*" PlanExercise : 包含
PlanExercise "*" --> "1" Exercise : 引用
PostureCorrection "1" --> "*" CorrectionIssue : 包含
AgentSession "1" --> "*" Message : 包含
Message "1" --> "*" ToolCall : 触发
KnowledgeChunk "*" --> "1" Exercise : 关联
2.3.5 时序图(Sequence Diagram)——生成训练计划
用户 前端 API网关 编排器 RAG服务 LLM API 计划工具 数据库
│ │ │ │ │ │ │ │
│ 点击生成计划 │ │ │ │ │ │ │
│────────────▶│ │ │ │ │ │ │
│ │ POST /plan │ │ │ │ │ │
│ │─────────────▶│ │ │ │ │ │
│ │ │ 路由+鉴权 │ │ │ │ │
│ │ │────────────▶│ │ │ │ │
│ │ │ │ 查用户档案 │ │ │ │
│ │ │ │──────────────────────────────────────────▶│
│ │ │ │◀──────────────────────────────────────────│
│ │ │ │ │ │ │ │
│ │ │ │ 档案不完整 → 返回采集问题 │ │
│ │◀────────────────────────────│ │ │ │ │
│ 回答采集问题 │ │ │ │ │ │ │
│────────────▶│─────────────▶│────────────▶│ │ │ │ │
│ │ │ │ 按目标肌群检索知识 │ │
│ │ │ │──────────▶│ │ │ │
│ │ │ │◀──────────│ │ │ │
│ │ │ │ 相关知识条目 │ │
│ │ │ │ │ │ │ │
│ │ │ │ 调用计划生成工具 │
│ │ │ │───────────────────────────────────────────────────────▶│
│ │ │ │◀───────────────────────────────────────────────────────│
│ │ │ │ 结构化计划数据 │
│ │ │ │ │ │ │ │
│ │ │ │ 组装 prompt(系统提示词+知识+用户档案+计划数据+输出格式) │
│ │ │ │───────────────────────▶│ │ │
│ │ │ │◀───────────────────────│ │ │
│ │ │ │ 润色后的计划文本 │ │ │
│ │ │ │ │ │ │ │
│ │ │ │ 保存计划到数据库 │
│ │ │ │───────────────────────────────────────────────────────▶│
│ │ │ │◀───────────────────────────────────────────────────────│
│ │ │ │ │ │ │ │
│ │ 返回计划卡片 │ │ │ │ │ │
│ │◀────────────────────────────│ │ │ │ │
│ 展示计划 │ │ │ │ │ │ │
│◀───────────│ │ │ │ │ │ │
2.3.6 协作图(Collaboration Diagram)——动作纠错场景
┌──────────────────────────────────────────────────────────────────┐
│ 动作纠错协作场景 │
│ │
│ ┌──────────┐ │
│ │ 用户 │ │
│ └────┬─────┘ │
│ │ │
│ 1. 上传动作照片 + 文字描述 │
│ │ │
│ ▼ │
│ ┌────────────────────────────────────────────┐ │
│ │ 前端 (React SPA) │ │
│ │ ┌──────────────────────────────────────┐ │ │
│ │ │ 纠错上传组件 │ │ │
│ │ │ · 拍照/选照片 │ │ │
│ │ │ · 预览 + 文字描述输入 │ │ │
│ │ │ · 上传进度 │ │ │
│ │ └──────────────────────────────────────┘ │ │
│ └──────────────────┬───────────────────────┘ │
│ │ 2. POST /api/correct (multipart/form) │
│ ▼ │
│ ┌────────────────────────────────────────────┐ │
│ │ 业务编排器 (Orchestrator) │ │
│ │ 3. 图片预处理 │ │
│ │ 4. 意图分类 → "动作纠错" │ │
│ │ 5. 调用视觉模型分析动作类型 │ │
│ │ 6. 组装纠错工具调用参数 │ │
│ │ 7. 返回纠错报告给前端 │ │
│ └───┬──────────────┬──────────────┬─────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌──────────┐ ┌───────────┐ ┌──────────┐ │
│ │ LLM API │ │ RAG 服务 │ │ 纠错工具 │ │
│ │ (Claude) │ │ │ │ (Tool) │ │
│ │ │ │ 按动作名 │ │ │ │
│ │ 视觉分析 │ │ 检索: │ │ 对比: │ │
│ │ +文本生成 │ │ · 标准动作 │ │ 用户图 │ │
│ │ │ │ · 错误姿势 │ │ vs │ │
│ │ │ │ · 纠正方法 │ │ 标准图 │ │
│ └──────────┘ └───────────┘ └──────────┘ │
│ │ │ │ │
│ └──────────────┴──────────────┘ │
│ │ │
│ ▼ │
│ ┌────────────────────────────────────────────┐ │
│ │ 数据存储层 │ │
│ │ ┌──────────┐ ┌──────────────────────┐ │ │
│ │ │ MySQL │ │ 对象存储 (OSS) │ │ │
│ │ │ 纠错记录 │ │ 用户上传的原始照片 │ │ │
│ │ │ 用户档案 │ │ 标注后的对比图 │ │ │
│ │ └──────────┘ └──────────────────────┘ │ │
│ └────────────────────────────────────────────┘ │
│ │
│ 消息传递: │
│ 1→2: uploadImage(image, description) │
│ 2→3: preprocess(image) → normalizedImage │
│ 3→4: classifyIntent("动作纠错") │
│ 4→5: analyzeImage(normalizedImage) → detectedExercise │
│ 5→6: searchKnowledge(detectedExercise, ["标准动作","错误姿势"]) │
│ 5→7: comparePosture(normalizedImage, referenceImages) → issues │
│ 6→7: generateReport(issues, knowledge) → correctionReport │
│ 7→2: return correctionReport │
│ 2→1: display correctionReport │
└──────────────────────────────────────────────────────────────────┘
三、数据库设计
3.1 ER 图(实体-关系图)
erDiagram
User ||--o{ TrainingPlan : "拥有"
User ||--o{ WorkoutRecord : "记录"
User ||--o{ PostureCorrection : "发起纠错"
User ||--o{ AgentSession : "对话"
User ||--o{ Feedback : "提交反馈"
TrainingPlan ||--o{ PlanDay : "包含"
PlanDay ||--o{ PlanExercise : "包含"
PlanExercise }o--|| Exercise : "引用"
PostureCorrection ||--o{ CorrectionIssue : "包含"
AgentSession ||--o{ Message : "包含"
Message ||--o{ ToolCall : "触发"
Exercise ||--o{ KnowledgeChunk : "关联知识"
User {
varchar user_id PK
varchar nickname
varchar avatar_url
varchar fitness_level
varchar goal
json equipment
int weekly_days
datetime created_at
datetime updated_at
}
Exercise {
varchar exercise_id PK
varchar name UK
varchar category
json target_muscles
varchar difficulty
text instructions
json image_urls
varchar source
}
TrainingPlan {
varchar plan_id PK
varchar user_id FK
int week_number
date start_date
date end_date
varchar status
datetime created_at
}
PlanDay {
varchar day_id PK
varchar plan_id FK
int day_index
varchar focus_area
int estimated_minutes
boolean completed
}
PlanExercise {
varchar id PK
varchar day_id FK
varchar exercise_id FK
int sets
int reps
int rest_seconds
boolean done
}
PostureCorrection {
varchar correction_id PK
varchar user_id FK
varchar image_url
varchar detected_exercise
text overall_assessment
text safety_note
datetime created_at
}
CorrectionIssue {
varchar issue_id PK
varchar correction_id FK
varchar body_part
text problem_description
text correction_advice
varchar severity
}
KnowledgeChunk {
varchar chunk_id PK
varchar module
varchar exercise_id FK
text content
json tags
varchar source
vector embedding
}
AgentSession {
varchar session_id PK
varchar user_id FK
varchar current_intent
json context
datetime created_at
datetime last_active_at
}
Message {
varchar message_id PK
varchar session_id FK
varchar role
text content
datetime timestamp
}
ToolCall {
varchar call_id PK
varchar message_id FK
varchar tool_name
json args
text result
datetime executed_at
}
WorkoutRecord {
varchar record_id PK
varchar user_id FK
varchar plan_id FK
int day_index
datetime completed_at
text feedback
int difficulty_rating
}
Feedback {
varchar feedback_id PK
varchar user_id FK
varchar type
text content
varchar status
datetime created_at
}
3.2 关系数据模型
| 表名 | 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|---|
| users | user_id | VARCHAR(36) | PK | UUID |
| nickname | VARCHAR(50) | NOT NULL | 昵称 | |
| avatar_url | VARCHAR(500) | 头像URL | ||
| fitness_level | ENUM('beginner','intermediate','advanced') | NOT NULL | 健身水平 | |
| goal | ENUM('lose_fat','build_muscle','improve_posture','general') | NOT NULL | 目标 | |
| equipment | JSON | 可用器械列表 | ||
| weekly_days | TINYINT | 1-7 | 每周可训练天数 | |
| created_at | DATETIME | NOT NULL, DEFAULT NOW() | ||
| updated_at | DATETIME | NOT NULL, ON UPDATE NOW() | ||
| exercises | exercise_id | VARCHAR(36) | PK | |
| name | VARCHAR(100) | UK, NOT NULL | 动作名称 | |
| category | VARCHAR(50) | NOT NULL | 分类(胸/背/腿/肩/核心/全身) | |
| target_muscles | JSON | NOT NULL | 目标肌群 | |
| synergists | JSON | 协同肌群 | ||
| difficulty | ENUM('beginner','intermediate','advanced') | NOT NULL | ||
| equipment_needed | VARCHAR(200) | 所需器械 | ||
| instructions | TEXT | NOT NULL | 动作要领(Markdown) | |
| breathing | VARCHAR(500) | 呼吸方法 | ||
| tempo | VARCHAR(50) | 动作节奏 | ||
| image_urls | JSON | 配图URL列表 | ||
| common_errors | JSON | 常见错误列表 | ||
| source | VARCHAR(500) | 知识出处 | ||
| created_at | DATETIME | NOT NULL | ||
| training_plans | plan_id | VARCHAR(36) | PK | |
| user_id | VARCHAR(36) | FK→users, NOT NULL | ||
| week_number | INT | NOT NULL | 第几周 | |
| start_date | DATE | NOT NULL | ||
| end_date | DATE | NOT NULL | ||
| status | ENUM('active','completed','abandoned') | DEFAULT 'active' | ||
| explanation | TEXT | 计划说明 | ||
| created_at | DATETIME | NOT NULL | ||
| plan_days | day_id | VARCHAR(36) | PK | |
| plan_id | VARCHAR(36) | FK→training_plans, NOT NULL | ||
| day_index | TINYINT | NOT NULL, 1-7 | 星期几 | |
| focus_area | VARCHAR(100) | NOT NULL | 训练部位 | |
| estimated_minutes | INT | 预估时长(分钟) | ||
| completed | BOOLEAN | DEFAULT FALSE | ||
| plan_exercises | id | VARCHAR(36) | PK | |
| day_id | VARCHAR(36) | FK→plan_days, NOT NULL | ||
| exercise_id | VARCHAR(36) | FK→exercises, NOT NULL | ||
| sets | TINYINT | NOT NULL | 组数 | |
| reps | SMALLINT | NOT NULL | 次数 | |
| rest_seconds | SMALLINT | DEFAULT 60 | 组间休息(秒) | |
| notes | VARCHAR(500) | 备注 | ||
| done | BOOLEAN | DEFAULT FALSE | ||
| sort_order | TINYINT | DEFAULT 0 | 排序 | |
| posture_corrections | correction_id | VARCHAR(36) | PK | |
| user_id | VARCHAR(36) | FK→users, NOT NULL | ||
| image_url | VARCHAR(500) | NOT NULL | 上传的图片URL | |
| user_description | TEXT | 用户文字描述 | ||
| detected_exercise | VARCHAR(100) | 识别出的动作 | ||
| overall_assessment | TEXT | 整体评价 | ||
| safety_note | TEXT | 安全提醒 | ||
| created_at | DATETIME | NOT NULL | ||
| correction_issues | issue_id | VARCHAR(36) | PK | |
| correction_id | VARCHAR(36) | FK→posture_corrections, NOT NULL | ||
| body_part | VARCHAR(50) | NOT NULL | 问题部位 | |
| problem_description | TEXT | NOT NULL | 问题描述 | |
| correction_advice | TEXT | NOT NULL | 纠正建议 | |
| reference_image_url | VARCHAR(500) | 参考配图 | ||
| severity | ENUM('mild','moderate','severe') | DEFAULT 'moderate' | ||
| knowledge_chunks | chunk_id | VARCHAR(36) | PK | |
| module | ENUM('standard_action','muscle_activation','error_harm') | NOT NULL | 知识模块 | |
| exercise_id | VARCHAR(36) | FK→exercises, NULLABLE | 关联动作 | |
| content | TEXT | NOT NULL | 知识内容 | |
| tags | JSON | 检索标签 | ||
| source | VARCHAR(500) | 出处 | ||
| embedding | VECTOR(1536) | 向量(Claude embedding) | ||
| created_at | DATETIME | NOT NULL | ||
| agent_sessions | session_id | VARCHAR(36) | PK | |
| user_id | VARCHAR(36) | FK→users, NOT NULL | ||
| current_intent | VARCHAR(50) | 当前意图 | ||
| context | JSON | 上下文状态 | ||
| created_at | DATETIME | NOT NULL | ||
| last_active_at | DATETIME | NOT NULL | ||
| messages | message_id | VARCHAR(36) | PK | |
| session_id | VARCHAR(36) | FK→agent_sessions, NOT NULL | ||
| role | ENUM('user','assistant','system','tool') | NOT NULL | ||
| content | TEXT | NOT NULL | ||
| timestamp | DATETIME | NOT NULL | ||
| tool_calls | call_id | VARCHAR(36) | PK | |
| message_id | VARCHAR(36) | FK→messages, NOT NULL | ||
| tool_name | VARCHAR(100) | NOT NULL | ||
| args | JSON | 调用参数 | ||
| result | TEXT | 返回结果 | ||
| executed_at | DATETIME | NOT NULL | ||
| workout_records | record_id | VARCHAR(36) | PK | |
| user_id | VARCHAR(36) | FK→users, NOT NULL | ||
| plan_id | VARCHAR(36) | FK→training_plans | ||
| day_index | TINYINT | NOT NULL | ||
| completed_at | DATETIME | NOT NULL | ||
| feedback | TEXT | 训练感受 | ||
| difficulty_rating | TINYINT | 1-5 | 难度评价 | |
| feedbacks | feedback_id | VARCHAR(36) | PK | |
| user_id | VARCHAR(36) | FK→users, NOT NULL | ||
| type | ENUM('bug','feature','praise','other') | NOT NULL | ||
| content | TEXT | NOT NULL | ||
| status | ENUM('pending','processing','resolved') | DEFAULT 'pending' | ||
| created_at | DATETIME | NOT NULL |
3.3 对象关系映射(ORM 映射)
以 Python SQLAlchemy 为例,核心实体与库表的映射关系:
| 实体类 | 库表 | 映射说明 |
|---|---|---|
User |
users |
equipment 字段使用 JSON 类型映射为 Python list;fitness_level/goal 使用 Enum 类型 |
Exercise |
exercises |
target_muscles/image_urls 等用 JSON 类型;instructions 为 Markdown 文本 |
TrainingPlan |
training_plans |
与 PlanDay 为一对多关系,通过 plan_days 反向引用 |
PlanDay |
plan_days |
与 PlanExercise 为一对多关系 |
PlanExercise |
plan_exercises |
通过 exercise_id 外键关联 Exercise |
PostureCorrection |
posture_corrections |
与 CorrectionIssue 为一对多关系 |
KnowledgeChunk |
knowledge_chunks |
embedding 字段为 VECTOR 类型,由向量数据库插件处理 |
AgentSession |
agent_sessions |
context 为 JSON 字典,存储会话中间状态 |
Message |
messages |
与 ToolCall 为一对多关系 |
WorkoutRecord |
workout_records |
同时关联 User 和 TrainingPlan |
3.4 领域知识与智能体数据存储设计
3.4.1 知识库存储
- 结构化管理:三大领域知识模块(标准动作/肌肉发力/错误姿势危害)以结构化条目存储在
knowledge_chunks表中,每条知识关联到具体的Exercise。 - 向量化存储:知识条目通过 Claude Embedding API 向量化(1536维),存入向量数据库(Chroma/Milvus)。用户提问时通过语义相似度检索 Top-K 条相关知识,注入 LLM 上下文。
- 出处标注:每条知识记录
source字段,Agent 回答时标注引用,实现可追溯。
3.4.2 用户交互记录存储
- 会话记录:
agent_sessions+messages+tool_calls三表记录完整的对话历史,支持上下文连续对话、工具调用回溯。 - 训练记录:
workout_records记录每次训练完成情况,difficulty_rating和feedback用于分析计划合理性和调整难度。 - 纠错记录:
posture_corrections+correction_issues记录每次纠错的完整结果,支持用户回溯查看。
3.4.3 任务执行结果存储
- 训练计划:
training_plans+plan_days+plan_exercises三表完整存储生成计划,用户可随时查看和修改完成状态。 - 工具调用日志:
tool_calls表记录每次工具调用的参数和结果,用于分析 Agent 行为、优化工具效果、调试排错。
四、团队协作记录(20%)
4.1 预期开发计划时间安排
以下计划从第二次作业截止日期(2026.11.09)开始,覆盖后续全部开发阶段,直至最终答辩。
| 周次 | 日期范围 | 阶段 | 里程碑 | 产出 |
|---|---|---|---|---|
| 第9周 | 11.10–11.16 | 环境搭建与知识库整理 | 开发环境就绪、知识库初版完成 | ① 云服务器/数据库/向量数据库部署完成 ② 三大领域知识库各≥15条结构化条目 ③ 知识向量化入库 |
| 第10周 | 11.17–11.23 | Agent 核心开发 | Agent 原型跑通三大任务 | ① 系统提示词定稿 ② RAG 检索链路跑通 ③ 三大工具(动作查询/计划生成/纠错)可独立调用 |
| 第11周 | 11.24–11.30 | 前端 + 后端联调 | 前后端联调通过 | ① 前端对话/计划/纠错三个页面开发完成 ② API 接口联调通过 ③ 端到端流程可走通 |
| 第12周 | 12.01–12.07 | 功能完善与测试 | 功能冻结、测试完成 | ① 所有核心功能完成 ② 测试用例全部通过 ③ UI 细节优化 |
| 第13周 | 12.08–12.14 | 典型案例对比与上线 | 系统上线、典型案例完成 | ① 部署上线(公网可访问) ② 定制前vs定制后三组对比案例完成 ③ 用户验收测试 |
| 第14周 | 12.15–12.21 | 答辩准备 | 答辩材料完成 | ① PPT 定稿 ② 现场演示流程排练 ③ 博客总结 |
| 第15周 | 12.22–12.28 | 答辩与复盘 | 答辩完成 | ① 现场答辩 ② 复盘总结 |
4.2 预期开发计划分工安排
| 序号 | 学号-姓名 | 角色 | 详细负责部分 | 所属阶段 |
|---|---|---|---|---|
| 1 | 102401317-罗炜 | 队长/项目统筹 | 整体规划、进度管理、风险把控、答辩主讲、架构设计 | 全阶段 |
| 2 | 102401529-陈加豪 | 产品经理/需求 | 需求细化、用户画像完善、PRD更新、验收标准跟踪 | 第9-12周 |
| 3 | 102401527-林复彬 | 领域知识研究员A | 「标准动作」库:深蹲/俯卧撑/平板支撑/弓步/臀桥/卷腹/肩推等≥15个动作的要领+配图整理 | 第9-10周 |
| 4 | 102401521-陈辉腾 | 领域知识研究员B | 「肌肉发力」+「错误姿势危害」库:每个动作的肌群分析+常见错误+纠正方法,≥15条错误条目 | 第9-10周 |
| 5 | 102401218-罗堉楠 | 提示词工程师 | 系统提示词设计、角色设定、输出格式规范、安全边界、few-shot样例编写 | 第10周 |
| 6 | 102401328-马锦城 | RAG/知识库工程师 | 知识切片策略、向量化、Chroma/Milvus部署、检索+重排链路、出处标注 | 第9-11周 |
| 7 | 102401531-徐心铭 | 后端/API集成 | FastAPI服务端、Claude API集成、数据库设计落地、计划生成/纠错/查询API | 第9-11周 |
| 8 | 102401121-张智轩 | 前端工程师 | React页面开发:对话界面、计划展示、纠错上传、个人中心、响应式适配 | 第11-12周 |
| 9 | 102401119-林祺皓 | 工具调用/流程编排 | 工具定义(schema设计)、Agent任务流程编排、意图路由、上下文管理 | 第10-11周 |
| 10 | 102401203-连向薇 | 测试工程师 | 测试用例编写、功能测试、三组典型案例对比(定制前vs定制后)、验收报告 | 第12-13周 |
| 11 | 102401222-李江炜 | UI/UX设计+文档 | 界面视觉设计、原型设计(墨刀)、PPT美化、博客撰写与排版、文档管理 | 第9-14周 |
4.3 本次作业协作过程记录
4.3.1 分工记录
| 任务 | 负责人 | 完成情况 |
|---|---|---|
| 原型设计(用户端 4 页面 + 后台管理 3 页面) | 李江炜、罗炜 | ✅ 已完成 |
| 原型交互流程设计(三条 Agent 任务流程) | 罗炜、罗堉楠 | ✅ 已完成 |
| 系统架构设计(四层架构图) | 罗炜、徐心铭 | ✅ 已完成 |
| UML 建模(用例图/活动图/类图/时序图/协作图) | 罗炜、林祺皓 | ✅ 已完成 |
| 数据库设计(ER图/关系模型/ORM/知识存储) | 徐心铭、马锦城 | ✅ 已完成 |
| 开发计划与分工安排 | 罗炜、陈加豪 | ✅ 已完成 |
| 系统设计说明书文档 | 罗炜、陈加豪 | ✅ 已完成 |
| 数据库设计说明书文档 | 徐心铭、马锦城 | ✅ 已完成 |
| 博客撰写与排版 | 李江炜、罗炜 | ✅ 已完成 |
| GitHub 团队仓库建立 | 罗炜 | ✅ 已完成 |


五、原型设计展示
- 原型展示链接:在线预览(GitHub托管)
原型设计中的重要突出特点
-
Agent 驱动对话式交互:不同于传统应用的表单+列表模式,FitPulse 原型以对话为核心交互方式。
-
智能体可见性设计:Agent 回答带有角色标识、知识出处标注。
-
AI 虚拟陪练形象:创新加入卡通健身教练动画人物——浮动动画呈现,通过对话气泡与用户互动,提供陪伴感和激励机制,解决居家健身「缺乏陪伴」的核心痛点。
-
安全边界内嵌:伤痛信号检测 → 建议就医的安全兜底路径。
-
后台知识库可管理:领域知识不是写死在代码里,而是通过后台知识库管理界面可增删改,支持持续迭代优化。
六、后端设计展示
所有后端设计图已在第二章「概要设计」中展示,包括:
- 系统架构图(四层架构)
- 用例图(系统功能边界与参与者)
- 活动图(训练计划生成流程、动作纠错流程)
- 类图(Mermaid 格式,完整实体关系)
- 时序图(训练计划生成时序)
- 协作图(动作纠错协作场景)
- ER 图(数据库实体关系)
以上设计图在博客中以 ASCII Art / Mermaid 格式呈现。在《系统设计说明书》和《数据库设计说明书》PDF 中将提供更规范的图形版本。
七、GitHub 仓库与文档下载(5')
| 资源 | 链接 |
|---|---|
| GitHub 团队仓库 | https://github.com/power819/FitPulse |
| FitPulse_系统设计说明书.pdf | GitHub下载 |
| FitPulse_数据库设计说明书.pdf | GitHub下载 |
说明:PDF 文档将上传至团队 GitHub 仓库
docs/目录,同时提供云盘备用下载链接。
八、参考资料
- 软件系统设计说明书国标参考:GB/T 8567-2006《计算机软件文档编制规范》
- 数据库设计说明书国标参考:GB/T 8567-2006
- UML 建模参考:OMG UML 2.5 Specification
- 智能体平台参考:文心智能体平台、Kimi+、ChatGPT/GPTs、扣子、Dify、LangChain

浙公网安备 33010602011771号