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 是一款面向学生健身新手的「随身智能教练」。原型设计围绕以下核心理念展开:

  1. 对话即交互:用户与智能Agent通过自然语言对话完成所有操作——查询动作、生成计划、上传纠错,无需复杂菜单层级。
  2. 三屏合一:教练对话、训练计划、个人记录三个核心视图通过底部导航一键切换。
  3. Agent 可见:设计上让用户清楚感知「正在和智能教练对话」,而非传统的表单填写式工具。
  4. 虚拟陪练形象:加入 AI 虚拟陪练人物(卡通健身教练),以动画形象呈现于对话页和计划页,提供陪伴感和鼓励反馈,降低健身过程的枯燥感。

1.3 用户端应用原型

1.3.1 首页——智能教练对话

用户打开应用即进入与 FitPulse 智能教练的对话界面:

  • 欢迎引导:首次进入时,Agent 主动问候并采集用户基本信息(健身水平、目标、可用器械、每周可训练天数),以对话气泡形式逐条询问,降低填写负担。
  • 对话输入:底部固定输入框 + 发送按钮,支持文字输入;右侧「📷」按钮支持拍照/上传动作照片用于纠错。
  • 回答展示:Agent 回答以富文本卡片形式呈现——文字说明、配图、结构化列表(如训练计划表格),并标注知识出处(如「参考:运动解剖学·深蹲篇」)。
  • 快捷入口:对话顶部提供三个快捷按钮——「🔍 查动作」「📋 生成计划」「🩺 动作纠错」,点击后自动填入引导性提问。
  • 虚拟陪练形象:页面顶部展示 AI 虚拟陪练动画人物(卡通健身教练),以浮动动画效果呈现,并配有「AI虚拟陪练在线」标记。Agent 消息旁配有小尺寸虚拟形象 + 对话气泡,如「你好!我是你的AI虚拟陪练,会一直陪着你训练,加油!💪」,增强陪伴感和激励机制。

FitPulse_首页-教练对话

1.3.2 训练计划页

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

FitPulse_训练计划页

1.3.3 动作纠错页

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

FitPulse_动作纠错页

1.3.4 个人中心

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

FitPulse_个人中心

1.4 后台管理原型

后台管理面向系统管理员,用于管理知识库内容和查看系统运行状态:

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

FitPulse_后台-知识库

FitPulse_后台-系统概览

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 团队仓库建立 罗炜 ✅ 已完成

image
image


五、原型设计展示

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

  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
posted @ 2026-11-08 23:06  power1897  阅读(5)  评论(0)    收藏  举报