门诊排队 — 项目原型设计+概要设计
2026秋软工实践 门诊排队——项目原型设计+概要设计
团队「门诊排队」第二次团队作业:完成了用户端问诊小程序的可交互原型、UML 概要设计、数据库设计,以及配套的可运行 Web 版实现(FastAPI 后端 + 前端页面,44 项自动化测试通过)。
一、作业格式描述
| 项目 | 内容 |
|---|---|
| 作业所属课程 | H202601软件工程与软件工程实践 |
| 作业要求 | 2026秋软工实践团队作业-第二次(原型设计+概要设计) |
| 作业的目标 | 在第一次需求分析与选题的基础上,完成可交互的原型设计(用户端+后台管理)与概要设计:用 UML 表达系统结构、说明领域 Agent 与软件的集成方式,完成数据库设计(ER 图、关系模型、ORM 映射),制定后续开发计划与成员分工,并建立 GitHub 团队仓库沉淀全部设计文档。 |
| 团队名称 | 门诊排队 |
| 团队成员学号-名字 | 102401431-丘南星、102401422-陈嘉俊、102401426-薛强龙、102402128-李韩远、102402129-梁洪睿、102402137-翁齐文、102402131-马天鸿、102402130-林晓捷、102401425-薛昌建、102401415-林豪、102401433-肖志渊、102401428-魏怡健 |
二、团队与项目简介
队名「门诊排队」
项目:智能导诊与挂号导航助手,定位为「诊前分诊导航的行动指引」:
症状输入 → 急症拦截 → 多轮追问 → 结构化报告
系统面向"不知道该挂哪个科、面对挂号平台无从选择"的患者,输出
「主推科室 + 备选科室 + 判断依据 + 挂号指引 + 院内导航 + 沟通话术 + 就医提醒」的结构化报告。
不做诊断、不开处方、不替代医生,全程标注"仅供参考,不替代医生诊断"。项目需求依据见第一次作业《软件需求规格说明书》,本文聚焦原型设计与概要设计。
三、原型设计
3.1 墨刀原型(在线链接)
用户端「问诊小程序」:https://modao.cc/proto/djKmUlT6to17c228Y8MJ7d/sharing?view_mode=read_only&screen=rbpVa6d0lkNEKZqxS
共 5 个页面:启动页 → 对话页 → 多轮追问 → 急症拦截页 → 导诊报告页。原型已导出 PNG,见 3.5 节。
说明:本项目无后台管理端——知识库(科室规则/红旗词)以 JSON 为唯一编辑源、由后端脚本维护,不面向运营人员提供可视化后台;如需后台管理界面,可在后续版本补充。
3.2 原型亮点
- 结论前置的结构化报告卡片:主推科室 + 备选科室 + 判断依据 + 挂号、导航、话术、提醒一次给全,用户拿到的是"可执行的行动指引"。
- 急症拦截红色告警:命中"胸痛伴出冷汗""大出血"等高危词立即跳转红色告警页,提供「拨打 120」「返回修改」两个动作,终止常规分诊流程。
- 一键复制就诊话术:话术根据用户提供的症状信息自动生成,是挂号后向医生描述症状的陈述(起病时间、部位、性质、伴随症状、人群特征),解决"不知道怎么跟医生描述症状"的痛点。
- 多轮追问状态可视化:追问按「部位→性质→时长→人群」逐步补齐,不重复询问,用户能感知进度。
- 隐私优先:不要求微信授权或手机号,会话以随机 UUID 标识,结束即销毁。
- 与真实后端联动:除墨刀设计稿外,团队已实现可运行的 Web 前端 + FastAPI 后端(Agentic RAG 四步流程、44 项自动化测试通过),演示时"界面是设计、逻辑是真实系统"。
3.3 可运行与演示
- Web 演示页:启动后端后访问
http://127.0.0.1:8000(真实调用/api/v1/chat,支持追问/报告/急症三种交互,前端为按墨刀设计 1:1 复刻的页面) - 离线交互原型:不依赖网络,双击 HTML 即可演示完整流程(本地模拟后端逻辑)
- 微信开发者模式:v1 小程序工程可在微信开发者工具中本地运行
3.4 上架说明与演示方式
微信小程序的上架存在两个现实门槛:
- 审核周期较长:小程序提交审核通常需要数周乃至更久,且需反复整改;
- 大模型类目资质要求:涉及大模型能力的类目一般需提供相关合作协议或资质证明。
对于课程项目,这两点在有限周期内难以满足。因此项目的最终呈现方式调整为:
- 网页版(主要形式):后端 FastAPI + Web 前端页面,本地或服务器部署即可访问,不受小程序审核限制;网页版交互与原型一致(症状输入 → 追问 → 报告卡片 → 一键复制话术)。
- 微信开发者模式演示(辅助形式):小程序工程(v1 初版代码已归档)可在微信开发者工具中以开发者模式本地运行演示,不经过上架审核流程。
开发者模式演示仅用于课程展示,不对外发布;若后续需要正式上线小程序,需完成类目资质与合作协议后再提交审核。
3.5 原型界面
注:墨刀导出的清晰度不高,高清效果可在分享链接中查看
( https://modao.cc/proto/djKmUlT6to17c228Y8MJ7d/sharing?view_mode=read_only&screen=rbpVa6d0lkNEKZqxS )
墨刀原型:启动页

墨刀原型:对话页

墨刀原型:多轮追问

墨刀原型:急症拦截页

墨刀原型:导诊报告页

四、概要设计
4.1 系统架构与领域 Agent 集成方式
系统采用前后端分离的四层架构:
展示层 墨刀原型(问诊小程序) / Web 演示前端(墨刀复刻版)
对话气泡 · 结果卡片 · 急症告警 · 一键复制话术
接口层 FastAPI:POST /api/v1/chat · GET /session · GET /health
编排层 Orchestrator(Agent 流程调度 + 会话状态机)
能力层 NLU 信息抽取 · 急症拦截 · 多轮追问 · RAG 检索 · LLM 结构化生成
知识层 SQLite(科室白名单/症状规则/红旗信号/医院/知识文档)+ 会话缓存
领域 Agent 的定制思路(Agentic RAG):
| 环节 | 做法 | 防幻觉/安全设计 |
|---|---|---|
| 信息抽取 | 规则词典 + 正则把口语抽成结构化字段(部位/性质/时长/伴随/人群) | 可审计、零成本;LLM 兜底可选 |
| 急症拦截 | 417 条红旗词纯代码匹配(Ⅰ级 201/Ⅱ级 216,WS/T 591—2018) | 不经过大模型,宁可多拦不可漏拦 |
| 多轮追问 | 状态机按优先级追问缺失字段,去重、上限 3 轮、支持改口重置 | 追问有上限,不会无限循环 |
| 知识检索 | 规则库(434 条规则 / 1849 个关键词)匹配 + 向量证据 top5 | 判断依据只来自检索资料 |
| 结构化生成 | 提示词硬性约束 + Pydantic Schema + 科室白名单枚举校验 | LLM 返回枚举外科室直接拒绝 |
定制前后对比(以"我肚子疼了两天,偶尔反酸"为例):通用大模型可能猜测甚至编造科室、不追问;本系统只能从 1849 个症状关键词命中的科室中选,按优先级追问,输出 8 字段结构化报告——这就是领域定制带来的可预测性与安全性。
4.2 UML 设计
用例图(患者用户 + 大模型服务作为次参与者;9 个用例及 include/extend):

活动图(用户/前端与后端双泳道:输入校验 → 急症短路 → 追问循环 → 白名单校验与降级):

类图(Orchestrator 等 9 个系统类 + 6 个 Pydantic 数据类及关联):

时序图(Agentic RAG 完整时序:抽取→追问→检索→生成→校验;alt 片段为急症拦截):

协作图("改口修正"场景下七个对象的协作与编号消息流):

4.3 数据库设计
详见《门诊排队_数据库设计说明书》。要点:
- 5 张表:
departments(科室白名单,LLM 输出枚举基准)、symptom_rules(症状-科室规则,核心分诊知识)、high_risk_signals(急症红旗信号)、hospitals(福州三甲挂号渠道)、knowledge_docs(检索证据语料) - 联系:科室 1—N 症状规则(
recommended_dept外键);备选科室alt_depts用 JSON 存(有意反范式,逻辑 N:M 虚线标注) - ORM 映射:后端采用 Pydantic + sqlite3,实体类(SymptomInfo/SessionState/TriageResult 等)与库表/缓存存储的映射关系已在说明书 2.4 节完整给出
- 存储策略:知识表落库(SQLite,启动自动建表灌种子);会话状态与任务结果不落库(内存/Redis,TTL 1h),会话结束即销毁,符合隐私设计
- 真实数据量:
departments32、symptom_rules1849 行(434 条规则)、high_risk_signals417 行(Ⅰ级 201/Ⅱ级 216)、hospitals3、knowledge_docs20

【图11:数据库 E-R 图】
五、团队协作记录
5.1 预期开发计划(周表 + 里程碑)
| 周次 | 时间 | 开发安排 | 里程碑与产出 |
|---|---|---|---|
| 第9周 | 11.10–11.16 | 前后端联调:前端完整接入 /api/v1/chat,覆盖追问/结果/急症三种响应;统一错误处理与加载态 |
M1 核心链路贯通:可演示完整 Agent 流程;接口联调测试用例全绿 |
| 第10周 | 11.17–11.23 | 知识库扩充:补科室规则与红旗词(标注来源);接入真实大模型(Kimi)并回归结构化输出与枚举校验 | M2 真实模型可用:LLM 输出回归测试通过 |
| 第11周 | 11.24–11.30 | 前端体验打磨:结果卡片、复制话术、急症页动画;会话存储切换 Redis 预研;部署方案选型 | 前端完成度 90%;部署方案文档 |
| 第12周 | 12.01–12.07 | 上线部署:服务器部署 + 域名/HTTPS;邀请同学真实试用收集反馈 | M3 上线运行:公网可访问地址 + 测试方式 |
| 第13周 | 12.08–12.14 | 按反馈修复缺陷;异常场景兜底完善;性能与安全复查 | 缺陷修复清单;异常处理说明 |
| 第14周 | 12.15–12.21 | 项目收尾:缺陷清理、文档与博客定稿、GitHub 仓库整理 | M4 项目收尾:文档与代码定稿 |
5.2 成员分工表
| 成员 | 学号 | 角色 | 负责的详细开发部分 |
|---|---|---|---|
| 丘南星 | 102401431 | 项目经理 / 统筹答辩 | 需求与进度管理、里程碑跟踪、答辩 PPT、原型与设计评审、项目整合 |
| 陈嘉俊 | 102401422 | 测试 / 前期调研 | 用户需求问卷调研、测试用例设计与执行、急症高危词全量回归 |
| 薛强龙 | 102401426 | 博客撰写 / 仓库 | 团队博客撰写与发布、GitHub 仓库管理与提交规范 |
| 李韩远 | 102402128 | 后端 | 数据库设计与文档(ER 图、关系模型、ORM 映射)、LLM 网关与就诊话术 |
| 梁洪睿 | 102402129 | 后端 / 测试 | 任务四前后端联调、API 边界测试、联调记录 |
| 翁齐文 | 102402137 | 后端 | 编排器 Orchestrator、多轮追问状态机、改口修正 |
| 马天鸿 | 102402131 | 后端 | 知识库扩充(症状规则/红旗词)、数据导入与来源标注 |
| 林晓捷 | 102402130 | 后端 / 测试 | NLU 信息抽取、RAG 规则检索、单元测试 |
| 薛昌建 | 102401425 | 前端 / UML | UML 活动图/时序图/协作图;前端联调 |
| 林豪 | 102401415 | 前端 | 前端页面实现(墨刀复刻版)与联调记录、v1 小程序归档与演进说明 |
| 肖志渊 | 102401433 | 原型 / 调研 | 墨刀原型设计、现场调研照片素材 |
| 魏怡健 | 102401428 | 前端 / UML | UML 用例图/类图;前端交互细节 |
5.3 协作过程记录
后端组协作记录(任务分工与代码提交):

前端组协作记录(原型设计与 UML 图稿分工):

- 需求与设计:使用腾讯文档协同撰写需求规格说明书;原型用墨刀多人协作设计;设计评审通过在线会议完成。
- 代码管理:GitHub 团队仓库按功能分支开发,每位成员使用自己的账号提交到个人分支,由项目经理统一合并 PR,保证每人都留下贡献记录。
- 测试:测试组维护《联调测试用例表》,安全相关(急症红旗词)做全量回归,任何人改动必须运行
pytest;当前 44 项自动化测试全部通过。 - 文档同步:系统设计说明书、数据库设计说明书、博客与代码保持同步更新。
5.4 近期迭代与变更记录(11-07 ~ 11-09)
知识库扩充:在原有规则基础上补充常见口语部位与俗语表达(覆盖泌尿、妇科、骨科、口腔等),并补充眼科、精神心理科、内分泌科、疼痛科等科室的症状-科室规则与口语变体。规则库 425 → 434 条,关键词行 1775 → 1849 行。
缺陷修复:① 问"腹痛/胸痛"被追问部位(部位词典缺单字兜底)→ 补齐并重排"长词优先"顺序;② 含"眼"字的部位俗语被误判为"眼部"(单字兜底词顺序问题)→ 词典顺序修复,同类隐患(手指、额头、脚趾、手腕)一并修复;③ 部位命名自然化(按规范部位名输出)。
就诊话术重构:话术从"挂号用"改为挂号后向医生描述症状的陈述,包含起病时间、部位、性质、伴随症状与人群特征。
前端:按墨刀导出稿 1:1 复刻 Web 演示页(启动页、对话页、急症页、报告弹窗、复制话术弹窗),并接入真实后端。
六、GitHub 仓库与设计文档
| 项目 | 链接 |
|---|---|
| GitHub 团队仓库 | LinkWalker/Hospital-Guide |
| 系统设计说明书 | 系统设计说明书.pdf |
| 数据库设计说明书 | 数据库设计说明书.pdf |
成员贡献概览:

浙公网安备 33010602011771号