2026秋软工实践 海底小纵队——项目原型设计+概要设计
| 项目 | 内容 |
|---|---|
| 所属课程 | 202601 软件工程 - 福州大学 |
| 作业要求 | 2026秋软工实践团队作业-第二次(原型设计+概要设计) |
| 作业目标 |
在第一次作业《需求分析》的基础上,完成软件的原型设计与概要设计:
|
| 团队名称 | 海底小纵队 |
| 团队成员 | 052401304 李思淇 102301228 林郑嘉同 102401108 李铭媛 102401202 洪雅琳 102401307 陈媛 102401402 冯安娜 102401405 王怡婷 102401406 陈婉凤 102401409 陈宝荣 102401411 陈博淇 102401604 马英慧 |
原型设计
设计工具:墨刀
注:数据维护(食材/菜库/规则/知识库)由数据岗离线完成,不设在线后台管理界面; 数据经「导入 → 质检 → 审核 → 生效」四步进入正式库, 全程留审计记录。
原型说明

系统设计秉承简约原则,设计为单一功能集成式页面,不另设页面跳转。色调以白色为主,辅以清新绿,给人“健康、清爽”的视觉体验。整体设计参考现在主流大语言模型网页端界面,降低用户的使用门槛,页面从左到右分为三栏:会话管理栏、主对话栏、工具栏。各栏具体说明如下
(1)会话管理栏

- 会话管理:部件①和②同现在的主流大模型网页,点击①开启新对话,②中以时间分栏记录历史对话记录
- 个人信息编辑:点击部件③弹出选项,选择个人档案即可查看并编辑。健康目标等字段在设置常见选项同时支持自定义选项,在为用户提供方便时满足自由度需求。
(2)主对话栏:

① 对话框:同主流LLM页面,以气泡形式呈现用户提示词和智能体回复
② 快捷按钮:设置常用提示词选项,点击即可发送按钮中的内容至对话中
③ 输入栏:自由输入提示词,点击右侧发送按钮即可发送
(3)工具栏:

工具栏作为智能体输出的存储器,负责存储智能体的各类输出。具体显示内容由智能体输出决定。
其中,工具①(“食材清单”)和工具②(“当前规划”)展示用户当前确认的方案的对应内容,随用户当前规划实时变动,历史方案和膳食报告则是固定存档,记录历史确认的规划。
领域 Agent 交互流程
- 配餐规划:用户发送请求 → Agent 理解意图 → Agent 提取用户档案与历史记录,调用工具/知识 → 返回结果 → 确认规划

- 落地指导:用户点击确认规划 → Agent调用工具/知识 → 返回食材清单与规划详情(含食谱做法与营养分析) → 用户点击右侧工具栏图标展开查看

- 膳食报告:用户发送请求 → Agent 理解意图 → Agent 提取用户档案与历史记录,调用工具/知识 → 返回结果 → 用户查看

概要设计
系统总体架构
系统按「五层业务架构 + 两个横切层」组织:五层自上而下逐层调用,初始化层位于底层负责环境准备,评测层贯穿五层负责质量观测。系统分层总览如下图所示。

系统的核心分工是确定性计算与智能决策分离:规则引擎(确定性工具)负责计算与生成,Agent 负责理解、决策、沟通;大模型不直接计算数值。各层的核心职责如下表所示:
| 层 | 核心职责 |
|---|---|
| 数据层 | 数据持久化:档案、食材、菜、方案、会话等实体存储 |
| 知识库层 | 知识检索:权威资料向量化,支撑结论可溯源 |
| 规则引擎层 | 候选生成:确定性计算候选食谱 |
| Agent 层 | 意图路由与编排:理解自然语言,编排确定性工具完成询问 / 配餐 / 调整 |
| 接口层 | 对外服务:统一 REST API 与流式对话 |
| 初始化层 | 环境准备:建表、灌入种子数据、首次向量化 |
| 评测层 | 质量观测:量化生成正确性、解释稳定性与性能 |
系统的技术选型如下:
| 层 | 技术栈 |
|---|---|
| 前端 | Vue3 + Vite + Element Plus |
| 后端 | FastAPI(Python 3.13),REST + 流式 SSE |
| 数据库 | PostgreSQL 18 + pgvector 扩展 |
| Agent 层 | Agno 框架 |
| 大模型 | DeepSeek(生成/对话);向量化使用共享 embedding 模型 |
UML 设计
用例图(需求分析)

本图展示了“膳食搭配智能体系统”的顶层用例。系统以“对话”为核心交互形态,分为普通用户与系统管理员两种角色。用户端聚焦“配餐、调整、咨询”三大对话场景,辅以轻量档案维护;管理端负责维持智能体运行所需的底层知识与规则库。
活动图(业务流程)

如图所示,核心的配餐流程为:对话发起 → 意图识别 → 读档案与历史(信息不足则追问)→ 确定性工具生成候选 → 换一换 / 确认 → 固定落库,并分支到营养咨询路径。
类图(系统结构)
系统核心实体类及关联如下图所示:

时序图(重要算法模块)
下图描述规则引擎五步算法(算目标 → 构造候选 → 候选差异化 → 跨日微量平衡与回溯 → 输出候选 + 解释)与 SSE 流式对话链路的对象交互时序:

数据库设计
ER 图

核心实体关系:用户 1:N 方案、方案 1:N 餐位、餐位 1:N 候选、候选 1:N 候选菜式 N:1 菜式;菜式 N:1 做法规则、菜式 1:N 配料 N:1 食材;方案 1:1 食材清单、方案 1:1 营养报告;会话 1:N 消息(可引用方案)。
关系数据模型
各实体的属性见类图,此处主要梳理各表的主键与外键
| Schema | 关系(表) | 主键 | 外键 |
|---|---|---|---|
| core | ingredient(食材) |
ingredient_id | source_id → data_source |
| core | dish(菜式) |
dish_id | cooking_rule_id → cooking_rule |
| core | dish_ingredient(配料) |
dish_ingredient_id | dish_id → dish;ingredient_id → ingredient |
| core | cooking_rule(做法规则) |
rule_id | — |
| core | nutrient(营养素) |
nutrient_id | — |
| core | nutrient_reference(参考值) |
nutrient_reference_id | nutrient_id → nutrient |
| core | health_condition(疾病) |
condition_id | — |
| core | condition_nutrient_rule(疾病规则) |
rule_id | condition_id → health_condition;nutrient_id → nutrient |
| core | symptom_nutrient_map(症状映射) |
symptom_nutrient_map_id | nutrient_id → nutrient |
| core | goal_structure_map(目标映射) |
goal | — |
| knowledge | knowledge_doc(知识文档) |
knowledge_doc_id | — |
| knowledge | nutrient_knowledge(营养素知识) |
nutrient_id | — |
| app | profile(用户档案) |
user_id | — |
| app | meal_plan(方案) |
meal_plan_id | user_id → profile |
| app | meal_slot(餐位) |
meal_slot_id | meal_plan_id → meal_plan |
| app | meal_candidate(候选) |
candidate_id | meal_slot_id → meal_slot |
| app | meal_candidate_dish(候选菜式) |
(candidate_id, dish_id) | candidate_id → meal_candidate;dish_id → core.dish |
| app | shopping_list(食材清单) |
shopping_list_id | meal_plan_id → meal_plan |
| app | nutrition_report(营养报告) |
nutrition_report_id | meal_plan_id → meal_plan |
| app | conversation(会话) |
conversation_id | user_id → profile |
| app | message(消息) |
message_id | conversation_id → conversation;referenced_plan_id → meal_plan |
| app | nutrition_result(营养结果) |
nutrition_result_id | user_id → profile |
| audit | import_batch / import_issue / condition_rule_review |
import_batch_id / issue_id / review_id | import_issue.import_batch_id → import_batch |
对象关系映射
| 实体类(类图) | 库表(Schema) | 说明 |
|---|---|---|
| Profile | app.profile |
用户档案 |
| Ingredient | core.ingredient |
食材 |
| Dish | core.dish |
菜式 |
| MealPlan | app.meal_plan |
方案 |
| MealSlot | app.meal_slot |
餐位 |
| MealCandidate | app.meal_candidate |
候选 |
| MealCandidateDish | app.meal_candidate_dish |
候选明细(弱实体) |
| ShoppingList | app.shopping_list |
食材清单 |
| NutritionReport | app.nutrition_report |
方案营养报告 |
| SymptomNutritionMap | core.symptom_nutrition_map |
症状—营养素映射 |
| Conversation | app.conversation |
会话 |
| Message | app.message |
消息 |
映射经 SQLAlchemy 声明式模型实现:实体类即 ORM 模型类,__tablename__ 对应上表库表名。类图未单列实体类的其余表以关联表、主数据、知识或审计表承载,其字段在类图中以属性或外部引用体现。
数据存储与管理说明
(一)存储方式:四个 Schema,三类数据
(1)Schema划分:
系统数据统一存于 PostgreSQL 18 单库 diet_agent,按归属划分为四个 Schema(各 Schema 下的表清单见「关系数据模型」):
| Schema | 职责 |
|---|---|
core |
权威数值字典(食材、菜式、营养素、规则等) |
knowledge |
文本知识(供 RAG 检索) |
app |
业务数据(档案、方案、会话等) |
audit |
导入与审核留痕 |
(2)存储形态:
| 数据类型 | 存储方式 |
|---|---|
| 结构化数值与业务关系 | 关系表 |
| 半结构化内容(候选宏量区间、清单聚合、报告汇总) | jsonb |
| 文本知识 | pgvector 向量检索 |
(3)三类数据的落库方式
- 领域知识:权威资料(食物成分表、膳食指南、DRIs)经离线「导入 → 质检 → 审核 → 生效」入库,运行时不再依赖外部数据源;数值进
core、文本进knowledge。每条数据带来源、版本、导入批次,食材另标质量等级(权威 / 估算 / 待核查),可溯源。 - 用户交互记录:对话以 SSE 流式交互,存入
conversation(会话)、message(消息);工具调用与结构化输出一并留存,便于复盘评测。 - 任务执行结果:规则引擎生成的方案按「方案 → 餐位 → 候选 → 候选菜式」四级落库(状态机 生成中 → 候选可换 → 已固定),固定后汇总出
shopping_list(食材清单)与营养报告,中间结果以jsonb快照保存供回溯。
(二)管理方式:权限、质量、一致性与安全
- 权限:后端以非超级用户
diet_app连接,按 Schema 授权——core/knowledge只读、app读写、audit只增;规则启用需独立审核角色;对话 Agent 不直连数据库,一律经后端,写库由确定性工具执行。 - 数据质量:食材分「权威 / 估算 / 待核查」三态;过敏原分「含 / 不含 / 未核查」,未核查食材不向过敏用户标记安全;
NULL表示未知而非零值。 - 一致性:外键、唯一、检查约束保证取值合法;固定方案在同一事务内提交,失败整体回滚;食材、菜式、历史方案软删除,保留既有引用。
- 安全:身高体重、疾病、过敏等敏感信息加密存储、最小采集;按用户标识区分并校验归属,日志不记录完整个人资料。
- 备份恢复:dump + 可重复执行的 SQL 脚本交付,新环境部署与空库恢复均测试。
团队协作记录
开发计划时间安排
| 周次 | 阶段 | 里程碑 | 产出 |
|---|---|---|---|
| 第 7–8 周 | 需求分析 + 答辩 | 需求文档定稿 答辩通过 |
需求分析文档、博客、答辩 PPT |
| 第 9–10 周 | 原型 + 概要设计 | 原型定稿、两份设计书定稿 | 原型链接、系统设计说明书 PDF 数据库设计说明书 PDF |
| 第 11 周 | 数据库改造 + 前端开发 | ① 轻量档案(扁平字段) + 方案/候选状态机表落地 ② 对话主界面 + 工具栏 + 轻量档案界面完成 |
① 四 schema + 字段字典 v1.2 + 后端接口改造 ② 可演示前端界面 |
| 第 12 周 | 后端 + Agent 改造 | ① 规则引擎五步算法跑通 ② 意图路由 + Function Calling + 工具编排 + SSE 流式 |
生成 / 换候选 / 固定接口 方案生成 结构化输出 |
| 第 13 周 | 联调 + 改进 | 核心流程端到端打通 | 可演示前端、联调 Demo |
| 第 14 周 | 测试 + 交付 + 答辩 | 验收通过、上线、答辩 | 测试报告、交付包、答辩 PPT |
分工安排
| 学号 | 姓名 | 角色 | 负责的详细开发部分 |
|---|---|---|---|
| 102401108 | 李铭媛 | PM | 项目统筹与排期、架构设计、需求与里程碑管理、博客与文档维护、最终交付定稿 |
| 052401304 | 李思淇 | 产品 A | 前期:调研问卷设计与分析,确定用户画像、使用场景,撰写用户调研部分文档 后期:验收前端用户体验 |
| 102401202 | 洪雅琳 | 产品 B | 前期:功能需求梳理、验收标准编写,撰写需求文档功能规约部分 后期:验收后端功能与业务流程 |
| 102301228 | 林郑嘉同 | Agent A | RAG 知识检索、营养解释、Agent 输出契约与评测 |
| 102401409 | 陈宝荣 | Agent B | 意图路由、Function Calling 工具编排、规则引擎五步算法 |
| 102401307 | 陈媛 | 数据岗 A | 领域知识入库:食材 / 菜式 / 营养素数据清洗、种子数据、概念结构设计 |
| 102401411 | 陈博淇 | 数据岗 B | 数据库逻辑 / 物理设计、数据字典、ORM 实现、视图与函数 |
| 102401406 | 陈婉凤 | UI 设计 | UI 规范与视觉设计、前端样式系统 |
| 102401405 | 王怡婷 | 前端 | 对话主界面、工具栏四面板、轻量档案界面、SSE 流式渲染 |
| 102401402 | 冯安娜 | 后端 | 接口设计、确定性工具 / 规则引擎实现、数据库访问层 |
| 102401604 | 马英慧 | 测试 | 测试用例与验收测试、部署与 GitHub 统筹、原型 / 文档链接可访问性检查 |
本次作业协作过程记录
团队通过 飞书 与 QQ 进行分工协作与沟通,以下为部分协作过程的聊天记录截图,涵盖文档分工撰写、原型设计反馈、系统架构改进等内容:
原型设计·群意见交流
|
原型设计·设计A交流记录
|
原型设计·设计B(前端岗辅助)交流记录
|
系统设计文档撰写分工
|
飞书共享文档
|
飞书文档填写记录
|
数据库设计文档填写协作
|
架构改进意见交流
|
Github仓库说明
本次作业中的文档协作撰写主要以飞书云文档形式展开,后期统筹后统一将文档上传,后续在实际开发过程中会继续补充代码文件。目前 Github 仓库的目录结构如下:
dietary-agent
├── README.md # 仓库导航说明
└── docs
├── assignment_1 # 第一次作业
│ ├── README.md
│ ├── requirements/ # 需求分析文档
│ ├── survey/ # 用户调研数据
│ ├── agent-logs/ # 智能体定制效果对比
│ └── presentation/ # 答辩PPT
└── assignment_2 # 第二次作业
├── README.md
├── prototype_link.txt
├── 海底小纵队_系统设计说明书.pdf
├── 海底小纵队_数据库设计说明书.pdf
└── 膳食搭配智能体_数据库交付包_v1.1_2026-10-22/
交付物与链接
| 交付物 | 链接 |
|---|---|
| GitHub 团队仓库 | dietary-agent |
| 概要设计说明书(2份) | https://pan.baidu.com/s/1Y6GkN_5HMSUedHwlAo3Rwg?pwd=ijfb |
| 原型设计展示链接 | 膳宝-专用膳食搭配智能体 |

浙公网安备 33010602011771号