2026秋软工实践 FitPulse——项目原型设计+概要设计

项目 内容
作业所属课程 202601软件工程
作业要求 2026秋软工实践团队作业第二次
作业的目标 在第一次需求分析的基础上,完成软件原型设计(用户端+管理后台),进行概要设计(系统架构、UML建模),设计数据库结构,制定详细开发计划,并建立团队GitHub仓库作为项目文档与代码的管理中心
团队名称 FitPulse
团队成员学号-名字 102401317-罗炜、102401529-陈加豪、102401527-林复彬、102401521-陈辉腾、102401218-罗堉楠、102401328-马锦城、102401531-徐心铭、102401121-张智轩、102401119-林祺皓、102401203-连向薇、102401222-李江炜

一、原型设计(40%)

1.1 原型设计工具与在线展示

  • 设计工具:墨刀(Modao)+ HTML/CSS 高保真原型
  • 原型展示链接:🔗 在线预览(GitHub托管) | 📁 源代码

1.2 设计理念

FitPulse 是一款面向学生健身新手的「随身智能教练」。原型设计围绕以下核心理念展开:

  1. 对话即交互:用户与智能Agent通过自然语言对话完成所有操作——查询动作、生成计划、上传纠错,无需复杂菜单层级。
  2. 三屏合一:教练对话、训练计划、个人记录三个核心视图通过底部导航一键切换。
  3. Agent 可见:设计上让用户清楚感知「正在和智能教练对话」,而非传统的表单填写式工具。
  4. 虚拟陪练形象:加入 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)

classDiagramclass 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 图(实体-关系图)

erDiagramUser ||--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 PKvarchar nicknamevarchar avatar_urlvarchar fitness_levelvarchar goaljson equipmentint weekly_daysdatetime created_atdatetime updated_at}Exercise {varchar exercise_id PKvarchar name UKvarchar categoryjson target_musclesvarchar difficultytext instructionsjson image_urlsvarchar source}TrainingPlan {varchar plan_id PKvarchar user_id FKint week_numberdate start_datedate end_datevarchar statusdatetime created_at}PlanDay {varchar day_id PKvarchar plan_id FKint day_indexvarchar focus_areaint estimated_minutesboolean completed}PlanExercise {varchar id PKvarchar day_id FKvarchar exercise_id FKint setsint repsint rest_secondsboolean done}PostureCorrection {varchar correction_id PKvarchar user_id FKvarchar image_urlvarchar detected_exercisetext overall_assessmenttext safety_notedatetime created_at}CorrectionIssue {varchar issue_id PKvarchar correction_id FKvarchar body_parttext problem_descriptiontext correction_advicevarchar severity}KnowledgeChunk {varchar chunk_id PKvarchar modulevarchar exercise_id FKtext contentjson tagsvarchar sourcevector embedding}AgentSession {varchar session_id PKvarchar user_id FKvarchar current_intentjson contextdatetime created_atdatetime last_active_at}Message {varchar message_id PKvarchar session_id FKvarchar roletext contentdatetime timestamp}ToolCall {varchar call_id PKvarchar message_id FKvarchar tool_namejson argstext resultdatetime executed_at}WorkoutRecord {varchar record_id PKvarchar user_id FKvarchar plan_id FKint day_indexdatetime completed_attext feedbackint difficulty_rating}Feedback {varchar feedback_id PKvarchar user_id FKvarchar typetext contentvarchar statusdatetime 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托管)

原型设计中的重要突出特点

  1. Agent 驱动对话式交互:不同于传统应用的表单+列表模式,FitPulse 原型以对话为核心交互方式。

  2. 智能体可见性设计:Agent 回答带有角色标识、知识出处标注。

  3. AI 虚拟陪练形象:创新加入卡通健身教练动画人物——浮动动画呈现,通过对话气泡与用户互动,提供陪伴感和激励机制,解决居家健身「缺乏陪伴」的核心痛点。

  4. 安全边界内嵌:伤痛信号检测 → 建议就医的安全兜底路径。

  5. 后台知识库可管理:领域知识不是写死在代码里,而是通过后台知识库管理界面可增删改,支持持续迭代优化。


六、后端设计展示

所有后端设计图已在第二章「概要设计」中展示,包括:

  • 系统架构图(四层架构)
  • 用例图(系统功能边界与参与者)
  • 活动图(训练计划生成流程、动作纠错流程)
  • 类图(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