存档日期:
存档编号:
JIANGSU NORMAL UNIVERSITY KEWEN COLLEGE
本科生毕业设计
题
目:基于关联知识体系与游戏激励机制的
中医药研学辨识系统的设计与实现
姓
名:
樊 诗 煜
专
业:
软件工程
年
级:
2023 级
学
号:
7230264112
指 导 教 师:
王伟、陈祥
江苏师范大学科文学院印制
设计原创性声明
本人郑重声明:所呈交的毕业设计,是在导师的指导下,独立进
行研究所取得的成果,所有数据、图片资料真实可靠。除文中已经注
明引用的内容外,本设计的研究成果不包含他人享有著作权的内容。
对本设计所涉及的研究工作做出贡献的个人和集体,均已在设计中以
明确的方式标明。本设计的知识产权归属培养单位。
本人签名:
年
月
日
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
设计版权使用授权书
本设计“基于关联知识体系与游戏化激励机制的中医药辨识研学
系统的设计与实现”是本人在校期间所完成学业的组成部分,是在江
苏师范大学科文学院教师的指导下完成的,因此,本人特授权江苏师
范大学科文学院可将本毕业论文的全部或部分内容编入有关书籍、数
据库保存,可采用复制、印刷、网页制作等方式将论文文本和经过编
辑、批注等处理的论文文本提供给读者查阅、参考,可向有关学术部
门和国家有关部门或机构呈送复印件和电子文档。本毕业论文无论做
何种处理,必须尊重本人的著作权,署明本人姓名。
作者签名:
年
指导教师签名:
月
日
年
I
月
日
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
基于关联知识体系与游戏化激励机制的中医药辨识研
学系统的设计与实现
摘
要
针对传统中医药科普平台知识碎片化、学习方式单一、缺少真伪药材实操辨
识训练和持续激励的问题,设计并实现了一套面向普通学习者的中医药辨识研学
系统。系统以药材、混淆伪品、功效、方剂、归经和四季养生主题为核心实体,
采用 MySQL 与 Neo4j 协同存储:MySQL 负责用户、题库、卡牌、任务和学
习记录等事务数据,Neo4j 负责实体关系网络及关联查询;FastAPI 图谱服务在
Neo4j 不可用时读取同源 relations.csv 快照。系统实现多维知识查阅、关联图谱、
双图真伪辨识、卡牌收集与方剂合成、季节任务、错题强化、每日翻牌和本草智
问 AI 助手。AI 通过 OpenRouter 兼容接口提供受控科普问答,并采用配置检
查、超时重试和本地模板回退,不参与判题、奖励和医疗决策。
该论文有图 22 幅,表 34 个,参考文献 42 篇。
关键词:中医药科普;关联知识图谱;游戏化学习;药材辨识;大语言模型
I
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
Design and Implementation of a TCM Herb
Identification and Research-Learning System Based
on an Associative Knowledge System and Gamified
Incentives
Abstract
To address fragmented knowledge, monotonous learning activities, insufficient
authenticity-identification practice, and weak long-term motivation in traditional
Chinese medicine science popularization platforms, this thesis designs and
implements a research-learning system for ordinary learners. Herbs, confusing
substitutes, efficacy, prescriptions, meridians, and seasonal wellness topics are
modeled as related entities. MySQL stores transactional data such as users, quizzes,
cards, missions, and learning records, while Neo4j supports associative queries
through an independent FastAPI service with a relations.csv fallback. The system
provides multidimensional herb browsing, a visual knowledge graph, two-image
authenticity quizzes, herb card collection, prescription synthesis, seasonal missions,
wrong-answer reinforcement, a daily memory challenge, and a controlled AI science
assistant. OpenRouter is accessed through an OpenAI-compatible interface with input
constraints, timeout retry, and local template fallback. The AI component is isolated
from scoring, inventory, rewards, diagnosis, and treatment decisions. Functional,
security, exception, and integration tests were used to verify the implementation.
The design has 22 figures, 34 tables, and 42 references.
Key Words: TCM science popularization; knowledge graph; gamified learning; herb
identification; large language model
II
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
目
录
摘 要 ............................................................ I
Abstract ......................................................... II
目 录 ............................................................ 1
图清单 ............................................................ 3
表清单 ................................. Ошибка! Закладка не определена.
1 绪论 ............................................................ 1
1.1 研究背景 .................................................... 1
1.2 研究意义 .................................................... 2
1.3 国内外研究现状 .............................................. 2
1.4 研究内容与技术路线 .......................................... 3
2 相关理论与研究方法 .............................................. 6
2.1 大数据数据挖掘基本概念 ...................................... 6
2.2 银行风险评估理论 .............. Ошибка! Закладка не определена.
2.3 数据预处理方法 .............................................. 6
2.4 相关性分析方法 ................ Ошибка! Закладка не определена.
2.5 K-means 聚类方法............... Ошибка! Закладка не определена.
2.6 SVM 风险预测方法............... Ошибка! Закладка не определена.
2.7 方法作用汇总 .................. Ошибка! Закладка не определена.
3 数据与预处理理论 ..................... Ошибка! Закладка не определена.
3.1 数据来源与字段构成 ............ Ошибка! Закладка не определена.
3.2 数据质量检查 .................. Ошибка! Закладка не определена.
3.3 类别变量坏账率分析 ............ Ошибка! Закладка не определена.
3.4 相关性分析 .................... Ошибка! Закладка не определена.
4 模型设计理论与实验实现 ............... Ошибка! Закладка не определена.
4.1 模型整体架构 .................. Ошибка! Закладка не определена.
4.2 K-means 聚类实验设计........... Ошибка! Закладка не определена.
4.3 SVM 坏账风险预测实验........... Ошибка! Закладка не определена.
4.4 评价指标设计 .................. Ошибка! Закладка не определена.
4.5 实验代码与输出文件 ............ Ошибка! Закладка не определена.
1
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
5 结果预判与理论分析 ................... Ошибка! Закладка не определена.
5.1 实验结果解释 .................. Ошибка! Закладка не определена.
5.2 K-means 与 SVM 模型对比......... Ошибка! Закладка не определена.
5.3 银行风控场景应用价值 .......... Ошибка! Закладка не определена.
5.4 局限性分析 .................... Ошибка! Закладка не определена.
6 总结与展望 ........................... Ошибка! Закладка не определена.
6.1 研究总结 ...................... Ошибка! Закладка не определена.
6.2 未来展望 ...................... Ошибка! Закладка не определена.
2
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
图清单
图序号
图名称
页码
图 3-1
系统总体架构图
图 3-2
系统分层架构图
图 3-3
用户端用例图
图 3-4
管理端用例图
图 3-5
用户端功能结构图
图 3-6
管理端功能结构图
图 3-7
游戏化研学闭环图
图 3-8
系统 MySQL E-R 图
图 3-9
Neo4j 图实体关系图
图 3-10
MySQL—CSV—Neo4j 同步流程图
图 5-1
用户登录与注册页面
图 5-2
多维药材检索与知识图谱页面
图 5-3
双图真伪辨识页面
图 5-4
卡牌图鉴与方剂合成页面
图 5-5
季节任务页面
图 5-6
错题强化页面
图 5-7
本草智问 AI 对话页面
图 5-8
本草智问移动端界面
图 5-9
AI 问答收藏详情弹窗
图 5-10
管理员数据看板页面
图 5-11
题库热区管理页面
图 5-12
图谱关系管理页面
3
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
表清单
表序号
表名称
页码
表 2-1
系统角色与权限边界
表 2-2
用户端功能需求
表 2-3
管理端功能需求
表 3-1
用户端功能模块设计
表 3-2
管理端功能模块设计
表 3-3
游戏化机制与业务事件映射
表 3-4
sys_user 用户表
表 3-5
herb_category 药材分类表
表 3-6
herb 药材信息表
表 3-7
herb_relation 药材关系兼容表
表 3-8
question 辨识题目表
表 3-9
sys_relation 统一知识关系表
表 3-10
user_answer_record 用户答题记录表
表 3-11
learning_event 学习事件表
表 3-12
user_card 用户卡牌库存表
表 3-13
formula 方剂表
表 3-14
user_formula 用户方剂表
表 3-15
badge 勋章定义表
表 3-16
user_badge 用户勋章表
表 3-17
mission 季节任务表
表 3-19
user_favorite 用户药材收藏表
表 3-20
user_daily_check_in 每日签到表
表 3-21
memory_challenge 记忆挑战表
表 3-22
ai_content_draft AI 内容草稿表
表 3-23
ai_chat_favorite AI 问答收藏表
表 3-24
数据库索引、唯一约束与事务设计
表 4-1
任务进度的统计来源与时间口径
表 4-2
大模型请求的字段与约束
表 4-3
单次 AI 请求的状态转换
表 4-4
八角行为框架与系统机制的对应关系
表 5-1
主要 REST 接口
表 6-1
本次快速测试结果
表 6-2
AI 验证的证据范围
表 6-3
测试证据汇总
4
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
变量注释表
Entity
RELATED
统一图实体节点标签
统一图关系类型
τ
连接或读取超时阈值
m
CSV 关系快照记录数
k
单次查询返回的关系数
M
错题掌握度百分比
d
题目难度,取 1 至 3
PBKDF2
带盐的口令派生算法
Prompt
发送给大语言模型的上下文指令
5
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
1 绪论
1.1 研究背景与意义
1.1.1 中医药科普数字化与实训化的研究背景
中医药知识具有历史传承时间长、理论体系复杂、术语数量多和实践依赖性
强等特征。中药材学习不仅涉及名称、别名、性味归经与功效主治,还涉及药材
外观、断面以及与混淆伪品的鉴别差异。传统纸质教材和一般科普网站通常按照
“药材名称—文字说明”的线性方式组织内容,学习者需要在多个页面之间反复切
换,才能将单味药材与伪品、方剂和养生主题联系起来。这种组织方式适合查找
单个知识点,却不利于形成结构化、网络化的知识认知。
《“十四五”中医药发展规划》提出加强中医药文化传播平台、科普服务和数
字化建设,并鼓励中医药与动漫游戏等融合发展[1]。这一政策背景为面向公众的
数字化研学服务提供了方向。对于金银花与山银花、半夏与水半夏等题库中涉及
的辨识对象,单次文字阅读难以替代反复观察和比较,因而本课题同时提供结构
化知识查阅与图像辨识训练。
从本课题的业务需求看,需要解决三个相互联系的问题:药材、方剂与功效
信息的关联导航,正伪品图片的反复对比训练,以及将错误反馈转化为后续复习
入口。上述问题是本系统确定功能范围的依据,不作为对所有现有中医药平台的
统计结论。
本课题旨在设计并实现一个中医药辨识研学系统,将药材知识组织、双图辨
识训练、卡牌收集、方剂合成、季节任务和错题强化整合在统一的业务闭环中。
系统将教材级药材、混淆伪品、经典方剂、功效和四季养生主题纳入统一实体模
型,并结合关系数据库与图数据库协同架构,既保证强事务业务数据的一致性,
也为知识图谱可视化和关联问答提供支撑。从应用角度看,系统的意义在于为普
通学习者提供低门槛的观察、比较和复习环境,同时明确科普学习边界,不承担
临床诊断与处方开具职责。
1
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
1.1.2 游戏化激励与受控 AI 问答在中医药研学中的研究意义
游戏化概念、教学设计和实证综述为将目标、反馈与奖励引入学习活动提供
了参考[2,3,4]。本系统参考八角行为框架[5],以关卡和勋章表达阶段成就,以卡牌
图鉴表达积累,以季节任务表达时间约束,并将错题状态反馈到复习入口。这些
机制旨在连接学习行为与后续任务,其学习效果仍需独立评价。
大语言模型为自然语言科普问答提供了新的交互方式,但流畅文本不等同于
可靠事实。近年的中文医学人工智能研究与教育应用调查均提示,模型应用需要
明确使用边界、输出责任和人工复核要求[6,7]。因此,本系统将生成文本与确定
性业务规则分离,并通过提示词和界面提示限制应用范围。
本系统将 AI 定位为受业务边界约束的科普助手。提示词要求不提供疾病诊
断、处方或个体化剂量,后端限制输入长度,模型调用失败时提供本地学习提示。
答题判定、积分经验、卡牌库存和任务计算均不由大模型决定。提示词约束不是
医学正确性保证,其有效性需要通过内容审查和专门测试进一步评价。
1.2 国内外研究现状
1.2.1 中医药知识图谱应用研究现状
中医药领域已有工作围绕知识图谱平台、语义知识组织、典籍知识融合、动
态知识管理、古籍知识图谱以及中医药教育中的人工智能应用展开研究。相关
CNKI 收录研究分别从语义组织、知识融合、服务体系、知识组织对策、数字化
科普平台和人工智能助教等角度讨论领域知识服务[8,9,10,11,12,13,14,15,16]。国外知识图
谱综述进一步从知识表示、实体与关系抽取、查询验证等方面总结了通用方法,
相关中医药知识图谱研究提出了中医药知识图谱平台,相关中医药智能问答研究
讨论了基于中医药知识图谱的问答实现,相关大模型知识图谱研究则探索了利用
大语言模型辅助中医药图谱构建[17,18,19,20]。这些研究为药材、功效、方剂和养生
主题的结构化表达提供了参考,但其研究对象与本研学平台不同,不宜以单篇论
文的模型指标直接替代学习闭环评价。
从工程需求看,构建关联网络后仍需处理实体命名一致性、学习任务连接和
运行依赖三个问题。药材名称、同义词及类型混用会影响节点合并;图谱查询结
果需要与题库和复习入口连接,才能进入训练过程;独立图数据库则增加了本机
部署和故障处理环节。这些是本系统设计需要解决的约束,不将其表述为上述文
献已经共同证明的行业缺陷。
本系统以 MySQL 关系表维护业务知识,以 CSV 快照发布关联数据,并使
用 Neo4j 提供一跳关系查询。近年的中医药数字化传播和教学资源研究强调了知
识组织、平台服务与教学活动之间的衔接[1,21]。普通药材详情直接读取 MySQL 中
2
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
的当前关系;Neo4j 连接不可用时,独立图谱服务使用启动时加载的 CSV 列表
回退。该设计减少基础知识浏览对图数据库的依赖,但 CSV 更新需重新加载,
查询执行阶段的异常也仍需要补充捕获,不能视为已经解决全部数据一致性问
题。
1.2.2 游戏化学习机制研究现状
国内 CNKI 研究从沉浸式课程、人工智能驱动教学、学习应用、高校课程和
课堂实践等角度讨论游戏化设计与学习反馈[22,23,24,25,26,27]。国外研究则经历了概
念界定、教学设计和实证评价三个阶段:相关游戏化研究给出游戏化的概念边界,
相关教学游戏化研究从学习与教学角度讨论游戏机制设计,相关游戏化实证研究
对实证研究进行综述[2,3,4]。相关游戏化元分析研究的元分析分别考察认知、动机
和行为学习结果,报告 Hedges’ g 分别为 0.49(95%置信区间[0.30,0.69])、0.36
([0.18,0.54])和 0.25([0.04,0.46])[28];在方法质量较高的子样本中,部分动机
和行为结果不再稳定。该证据支持审慎考察游戏化的学习价值,不能替代本系统
在中医药研学情境中的效果验证。
上述研究提示,需要区分参与行为与知识掌握。在线学习者画像和个性化学
习路径研究也表明,学习反馈应与学习者状态及后续任务连接,而不能仅以活跃
度替代掌握评价[29]。积分和活跃度能够描述使用过程,却不能单独证明学习效
果;短期任务完成也不等同于长期记忆。对本系统而言,奖励机制应连接可记录
的答题、收集和复习活动,同时保留作答正确率与连续正确次数等过程指标,避
免用奖励数量替代知识评价。
本系统将正确答题、卡牌收集、方剂合成与阶段任务连接起来,并通过错误
记录提供复习入口。签到和记忆挑战同样发放奖励,因此并非所有积分都代表辨
识知识掌握。现有测试验证业务规则和数据更新,不预设已证明游戏化提高学习
成绩。
1.2.3 大语言模型在中医药科普中的应用现状
近年的 CNKI 研究讨论了中医药典籍知识融合推理、图谱检索增强、
GraphRAG 问答、医学教育中的大模型应用以及医学人工智能素养等问题
[6,7,9,16,29,30,31]
。国外研究提供了 Transformer、自回归语言模型和检索增强生成的
基础方法:Vaswani 等提出 Transformer 架构,Brown 等展示了大规模语言模型的
少样本学习能力,Lewis 等将外部检索结果引入生成过程[32,33,34]。相关医学检索
增强基准研究构建的 MIRAGE 基准包含 5 个医学问答数据集的 7,663 个问题,
并比较了 41 种语料库、
检索器和模型组合;在其评估的 6 个语言模型上,MedRAG
相较思维链提示基线的平均准确率相对提升最高约 18%[35]。该 18%为相对提升
3
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
而非百分点,且局限于相应医学问答基准,不能直接外推为本系统的中医药科普
效果。
生成式科普需要关注幻觉、知识时效和医疗边界。已有研究将幻觉视为自然
语言生成系统的重要风险,健康人工智能治理还涉及透明性、责任和输出风险
[36,37]
。检索增强有助于将外部信息引入回答,但并不自动保证检索内容或生成结
论正确[34,35]。本课题因此将医疗建议限制、生成状态标识和失败提示作为应用设
计要求,不以提示词约束代替医学审核。
本系统采用知识库查询与生成式科普并行的方式。FastAPI 图谱问答根据药
材词表和关系快照返回模板答案与图结构;本草智问根据问题、偏好及最近对话
调用 OpenRouter,当前并未自动将图谱证据注入 Prompt,也没有重复问题缓存。
模型失败时返回学习方向提示,而非重新执行关键词检索。该职责分工保持核心
判题和奖励链路独立,检索增强只列入后续研究方向。
1.2.4 研究问题、形成原则与本系统对策
综合上述研究,本文将待解决的问题归纳为四类:第一,药材、功效、方剂
与辨识题目之间缺少面向学习任务的统一关联;第二,游戏化研究虽报告了认知、
动机和行为层面的平均效应,但参与指标不能替代知识掌握评价;第三,大语言
模型能够改善自然语言交互,却伴随幻觉、知识时效和医疗边界风险;第四,独
立图数据库和外部模型会引入连接失败、超时和服务成本等运行约束。上述归纳
分别受到中医药知识组织研究、游戏化元分析和医学问答基准的启发[8,14,28,35]。
针对上述问题,系统形成“问题—原因—对策”的对应关系:知识关联不足的
原因是业务表、关系快照和图数据库的职责边界不清,对策是由 MySQL 维护业
务事实、由 CSV 承担可发布快照并由 Neo4j 提供一跳关系查询;参与行为难以
反映掌握程度的原因是奖励与学习证据混合,对策是将答题正确率、连续正确次
数、错题复习和奖励事件分开记录;生成式问答风险的原因是模型输出具有不确
定性,对策是限制科普范围、标识生成状态、执行一次重试并在失败时返回模板
提示;外围服务故障的原因是网络和上游依赖不可控,对策是将判题、库存和任
务计算保留在 Spring Boot 确定性事务中。
由此得到四项设计原则:以结构化数据支撑可追溯事实,以游戏化事件连接
学习行为,以受控 Prompt 扩展科普交互,以本地快照和模板回退维持核心功能
连续性。本文后续章节将分别从算法、服务模型、业务模块和测试证据验证这些
原则的可实现性;对于尚未开展的学习成效、医学准确率和高并发性能评价,仅
作为研究边界说明,不作既成结论。
4
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
1.3 研究内容
本课题围绕系统的可落地性与业务闭环性,重点开展以下几方面研究:
(1)业务建模与协同数据架构:
设计药材、题目、方剂、任务和学习行为之间的关系,采用 MySQL 维护事
务数据,CSV 发布关系快照,Neo4j 提供关联查询。
(2)双图辨识与错题强化机制:
实现正伪品图片比较、局部放大与解析反馈,以连续正确次数描述当前掌握
状态,并从未掌握历史错题中抽取专项练习题。
(3)游戏化驱动与方剂闭环算法:
基于八角行为理论构建激励机制,实现卡牌概率掉落算法与基于事务的“材
料扣减—方剂合成—勋章发放”原子化闭环。
(4)受控 AI 助手与请求容错:
构建包含问题、用户偏好和有限历史的 Prompt 上下文,采用配置检查、一
次重试与本地回退,明确生成式回答不参与业务判定。
系统全栈集成与测试验证:实现用户端与管理端的接口连接,通过快速测试、
保留的集成测试报告和源码核验分析功能规则与权限边界,并说明尚未覆盖的故
障和性能场景。
1.4 本章小结
本章从研究背景与意义、国内外研究现状、研究内容三个方面论述了课题的
来源与必要性。分析表明,传统中医药科普在知识关联、真伪辨识实训和持续学
习激励方面仍有改进空间;知识图谱适合组织药材及其关联实体,游戏化机制能
够提供可见的学习反馈,受控大语言模型能够改善自然语言问答和知识拓展,但
医学科普场景必须设置明确的安全边界。
基于上述认识,本文确定采用 Vue 3 + Spring Boot + MySQL + FastAPI +
Neo4j 的分层架构,以双图辨识、卡牌方剂合成、季节任务和错题强化形成学习
闭环,并将大语言模型 AI 助手作为不影响核心规则的受控辅助服务,为后续章
节的系统设计与实现奠定理论和技术基础。
5
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
2 系统需求分析与关键技术
2.1 可行性分析
2.1.1 技术可行性分析
系统面向毕业设计展示与小规模试用,采用 Vue、Spring Boot 和 MySQL 实
现核心业务,独立 FastAPI 服务提供关联查询。技术可行性主要来自已有分层接
口和可执行代码,不据此推断已满足高并发要求。图谱连接失败回退与 AI 异常
提示减少外围依赖对主业务的影响,但完整故障覆盖仍须通过测试确认。
2.1.2 经济可行性分析
项目依托现有个人计算机与开源框架开展开发,不需为本机原型额外购买商
业组件授权。AI 接入可选择免费额度或低成本接口,但云资源、运维和上游额
度仍可能产生费用。当前没有形成完整成本核算,经济可行性限定为毕业设计原
型能够复用现有资源,不等同于实际运营零成本。
2.1.3 操作可行性分析
用户端以研学地图为统一入口,知识查阅、双图辨识、卡牌图鉴、方剂合成、
季节任务、错题强化和 AI 问答按照学习流程组织,用户无需理解数据库字段即
可完成操作。答题结果、卡牌获得和任务进度由系统自动记录,减少手工登记。
管理员端采用搜索、筛选、分页和弹窗表单维护药材、题库、方剂、关系和任务,
上传图片后可以直接预览和配置热区。项目还配置了环境检查和服务状态检查工
具,能够辅助非技术人员完成启动和验收。
2.1.4 社会/安全可行性分析
系统面向科普与学习训练,不将方剂合成理解为临床配方生成。口令采用
PBKDF2,Spring Boot 业务接口使用会话与角色校验,用户级数据按登录用户查
询;上传使用类型与内容头检查,库存扣减使用事务和条件更新。AI 提示词明
确医学边界,相关风险仍需领域审核[37]。这些是工程控制措施,不构成对合规
性或医学安全性的完整证明。
6
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
2.2 用户角色与业务流程分析
2.2.1 用户角色与权限边界
系统设置普通学习用户和管理员两类角色。普通学习用户以研学活动为主,
能够浏览药材和图谱、进行真伪辨识、查看错题、收集卡牌、合成方剂、参加季
节任务、签到和使用本草智问 AI 助手。用户只能读取公开知识内容以及与自身
账号关联的学习数据,例如个人收藏、答题记录、卡牌库存、勋章和问答收藏。
用户不能新增或修改药材、题库图片、方剂配方、图谱关系和任务配置,也不能
查询其他用户的隐私数据。
管理员维护药材、图片、题库解析和热区、方剂材料、关系与任务配置,并
查看用户学习统计。额外掉卡概率与稀有度权重当前固定在后端代码,用户管理
页面以查询和统计为主,未提供用户角色变更或封禁功能。前端路由守卫不能替
代后端角色校验,权限边界如表 2-1 所示。
表 2-1 系统角色与权限边界
角色
普通学习用户
管理员
可访问功能
可写入数据
明确禁止
知识查阅、图谱浏览、
个人答题、收藏、卡牌、 修改公共知识、
辨识闯关、图鉴、方剂、
合成记录、任务领取、 查看他人数据、
任务、错题、AI 问答、
AI 问答收藏
访问管理接口
个人中心
数据看板、用户管理、
药材、题库、方剂、关
系、任务管理
公共知识与运营配置
代替用户提交答
题、绕过审计修
改核心事件
Spring Boot 的/api/**业务接口除登录注册外需要会话,静态 uploads 资源单
独开放。Axios 自动携带 Authorization 请求头,未登录或会话失效返回 401,普
通用户访问管理接口返回 403。FastAPI 端口独立提供/health 和/ask,目前没有
Sa-Token 拦截,公网部署需要为该服务另外设置网络入口和访问控制。
2.2.2 研学闭环业务流程
系统将一次完整研学活动抽象为“发现知识—观察辨识—获得反馈—形成积
累—针对性复习”的闭环。用户可以从研学地图进入知识库,按分类、药性、归
经或关键词查找药材;详情页展示药材信息,并通过图谱连接伪品、功效、方剂
和养生主题。用户进入辨识闯关后,系统按难度抽取题目,展示目标药材的正品
图与伪品图,用户提交选择后由后端判定答案,答对获得积分、经验和卡牌,答
错记录错题并展示辨识解析图片。
卡牌获得事件进入用户库存和学习事件账本,方剂页面根据库存计算材料缺
口。缺少材料时可以前往辨识或使用积分兑换;材料齐全时,合成接口在事务中
7
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
检查库存并通过条件更新扣减、扣减配方数量、写入合成记录,并在首次合成时
发放勋章。季节任务在查询或领取时根据答题记录、卡牌事件、错题掌握事件和
合成记录计算进度,完成后由用户主动领取奖励。错题强化模块按照药材和掌握
状态筛选历史错题,连续答对达到阈值后将题目标记为已掌握,从专项抽题候选
中排除。
2.3 系统功能与非功能需求
2.3.1 系统功能需求分析
根据角色和业务流程,系统功能需求划分为用户端、管理端和公共支撑三部
分。
表 2-2 用户端功能需求
编号
功能模块
U1
知识查阅
按分类、功效、药性、
药材列表、详情
归经筛选并支持关键
和关联实体
词模糊检索
图谱探索
展示药材与伪品、方
剂、功效、养生主题的
关系
U3
辨识闯关
随机抽题、双图选择、 对错结果、积分、
即时判定、解析和热区 经验、卡牌或错
查看
题
U4
卡牌与方剂
查看库存、兑换缺口材
料、校验配方并合成方
剂
U5
季节任务
查看任务周期、目标、 任务状态和奖励
进度和奖励并领取
到账记录
U6
错题强化
查看错题详情、按掌握
度筛选并专项重做
重做记录、掌握
度变化
U7
AI 科普助手
自然语言提问、快捷问
题、连续追问、重新生
成和收藏
AI 回答或本地
回退回答
U8
个人中心
查看等级、积分、勋章、
收藏和账号信息
个人学习档案
U2
主要需求
输出结果
可拖拽缩放的关
系图谱
合成记录、方剂
百科和勋章
表 2-3 管理端功能需求
编号
A1
功能模块
主要需求
数据看板
展示用户数、活跃数、答题
量、卡牌量及真实统计折线
图、饼图
8
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
编号
功能模块
主要需求
A2
药材管理
新增、编辑、删除药材,上
传主图并维护禁忌和用法
A3
题库管理
维护正品/伪品图片、答案、
难度、解析和辨识热区
A4
方剂管理
配置方剂组成、卡牌数量、
奖励和勋章规则
A5
关系管理
新增、删除药材与伪品、方
剂、功效及主题关系
A6
任务管理
配置季节、时间范围、目标
类型、目标值和奖励
A7
用户管理
查询账号、角色、等级、积
分、答题和任务数据
2.3.2 系统非功能需求分析
(1)可用性。核心判题、库存和任务不应依赖外部模型在线。图谱连接失
败时可读取本地快照,AI 异常时应返回明确的回退提示;对于查询执行错误与
响应时间仍需单独测试,不以连接回退代替全场景可用性保证。
(2)可靠性。方剂合成应保持跨表原子性,库存扣减不得小于零。同一用
户方剂记录、签到日期和奖励事件键使用唯一约束;任务进度按用户与任务唯一
记录。请求级幂等和并发领奖仍需完善,不将事件去重等同于所有接口重复提交
安全。
(3)安全性。Spring Boot 业务接口采用 Token 会话与角色校验,管理员接
口拒绝普通用户访问;上传检查 MIME 类型、业务大小上限及文件头,服务端
绑定对象 ID 和文本参数。独立图谱服务需单独保护,公开部署不得沿用开发环
境示例口令。
(4)可维护性。代码按 Controller、Service、Mapper、Entity 和 DTO 分
层,外部服务通过独立客户端封装;配置项通过环境变量管理;公共分页、异常
响应和文件处理采用统一工具;数据库变更使用版本化 SQL 脚本,便于初始化
和升级。
(5)可扩展性。药材、题目、方剂、任务和关系均采用数据驱动方式,新
增内容无需修改前端核心逻辑。AI Provider 采用 OpenAI 兼容协议封装,未来
可替换模型或接入私有部署;Neo4j 与 CSV 双数据源使图谱规模扩大时可以平
滑迁移。
(6)性能与兼容性。管理端先获取接口返回列表,再在前端切片分页,分
页只控制展示数量,不减少服务端一次返回的数据量。前端支持现代浏览器,图
9
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
谱容器和窄屏布局使用明确尺寸约束;大规模数据与并发性能仍需补充测量。
2.4 相关技术与选型分析
2.4.1 后端开发技术
Spring Boot 2.7.18 是系统主业务服务的基础框架,负责 REST 接口、事务
和统一配置。系统按 Controller、Service、Mapper 和 Entity/DTO 分层:控制器
处理参数与响应,服务层编排规则和事务,Mapper 负责持久化访问。该边界使
用户、题库、卡牌和任务模块能够独立演进。
从部署形态看,系统当前采用模块化单体,而不是将每个业务拆成独立微服
务。图谱能力作为 FastAPI 独立服务运行,AI 作为外部 Provider 接入,已经
形成“核心事务集中、外围能力可替换”的边界。未来用户规模扩大时,可以将
AI 网关、图谱服务和统计服务独立部署,主业务层无需大范围重写。
MyBatis-Plus 提供通用 Mapper 和条件构造器,减少重复数据访问代码。
系统使用 LambdaQueryWrapper 完成药材筛选、答题历史、任务和用户统计等
条件查询;管理端当前主要在前端对接口返回数组进行分页切片,未启用服务端
分页插件。复杂原子更新保留显式 SQL,并使用经过校验的参数绑定[38]。
Sa-Token 用于登录会话和角色校验。登录接口创建 Token,拦截器检查会话,
管理员控制器通过 ADMIN 角色注解限制访问,权限失败分别返回 401 和 403。
选型与本系统所需接口匹配,不据此声称其性能或安全性优于其他认证框架。
2.4.2 前端开发技术
前端采用 Vue 3 与 Composition API 组织页面状态、请求、表单和图表逻辑。
响应式依赖跟踪用于触发相关渲染更新,便于展示任务进度、卡牌库存和 AI 文
本逐字呈现[39]。
Vite 作为构建工具,开发阶段采用原生 ESM 和按需编译,启动速度较快,
生产构建则生成可部署的静态资源。Pinia 用于保存登录用户、角色和基础配置,
并配合持久化策略在刷新页面后恢复会话状态;Axios 通过请求拦截器统一添加
Token,通过响应拦截器处理 401、403、业务错误和网络异常,页面组件只关注
成功数据和交互反馈。
ECharts 用于关系图谱和管理员数据看板。图谱使用力导向布局并支持拖动
缩放,节点点击在当前药材列表中匹配后加载 MySQL 详情;非药材节点并不统
一拥有独立详情页。数据看板折线图横轴为热门药材类别,而不是时间轴;环形
图展示高频错误药材,不能将其称为按日期的学习趋势。
10
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
2.4.3 基础算法与第三方模型
系统图谱检索采用 jieba 分词进行轻量级实体识别。用户输入问题后,
FastAPI 对文本分词,并在 herbs.csv 加载的药材名称和别名中进行匹配;命中
药材后查询其一跳 RELATED 关系,未命中时返回空图和提示。jieba 不承担医
学语义推理,其作用是将自然语言输入转换为可查询的药材实体,适合当前教材
级数据规模。
当前算法体系包括词表实体识别、一跳关系过滤、两阶段卡牌抽取、事务材
料扣减以及连续正确次数统计。具体规则和复杂度将在第四章说明;没有嵌入向
量或相似度排序调用,不将参考材料中的算法计入当前实现。
AI 助手通过 OpenRouter 的 OpenAI 兼容协议接入文本生成模型。请求包
含用户问题、季节、适用人群、回答形式和最近对话上下文,提示词要求仅输出
科普解释,不进行诊断、处方和个体化剂量建议。对外状态包括 CONFIGURED、
LOCAL_FALLBACK、SUCCESS 和 FALLBACK,一次重试属于 Provider 内部
过程;具体模型和调用参数在第四章说明。
2.4.4 数据存储与服务支撑环境
MySQL 负责保存强一致、可审计和需要事务处理的数据,包括用户、药材、
题目、答题记录、卡牌库存、方剂、合成记录、任务、收藏、勋章和学习事件。
卡牌扣减使用带 quantity 条件的原子更新,方剂合成和任务领取在 Spring 事务
中完成;数据库通过主键、唯一键和业务级关联校验约束数据完整性。
Neo4j 负责保存适合关联查询的数据。节点统一使用 Entity 标签,以 type
和 name 作为组合唯一键;关系统一使用 RELATED 类型,并在关系属性 type
中保存业务语义。当前 /ask 接口执行药材的一跳关系查询。MySQL 是关系维
护事实来源,Neo4j 是查询投影,后台关系变更后通过显式发布脚本同步 CSV
和图数据库;当 Neo4j 未配置或连通性验证失败时,FastAPI 从内存中的 CSV
快照构建相同结构[40]。
FastAPI 用 于 封 装 实 体 识 别 、 图 谱 查 询 和健 康 检 查 接 口 , 并 自动 提 供
OpenAPI 文档;Neo4j Driver 负责图数据库连接,jieba 负责分词。当前项目采
用 PowerShell 脚本启动 Spring Boot、FastAPI 和 Vue,尚未完成容器化部署;
Docker 仅作为后续可扩展方案[41]。
2.5 本章小结
本章从可行性、角色权限、业务闭环、功能需求、非功能需求和技术选型六
个方面分析系统建设条件,明确采用 Spring Boot、Vue 3、MySQL、Neo4j 和
11
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
FastAPI 的协同架构,并为第三章总体设计、数据库模型和图谱设计提供依据。
12
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
3 系统总体设计
3.1 系统设计原则与总体架构
3.1.1 系统设计原则
本系统的总体设计遵循以下原则:
(1)业务闭环原则。知识查阅、双图辨识、卡牌收集、方剂合成、季节任
务和错题强化不是相互独立的页面,而是通过答题结果、卡牌获得和学习事件连
接为连续流程。
(2)确定性优先原则。答题判定、积分经验、卡牌库存、方剂合成和任务
领取均由后端规则计算;AI 只承担科普文本生成,不得修改核心业务结果。
(3)数据分工原则。MySQL 保存业务数据和关系维护事实,Neo4j 保存发
布后的关系投影,CSV 承担发布快照和本机连接失败时的备用关系来源。当前
图谱接口执行一跳出向查询。
(4)低耦合原则。Vue 通过 Axios 访问 Spring Boot 和独立 FastAPI 接口,
主业务集中在 Service 层,OpenRouter 请求由后端客户端封装,页面不直接连接
数据库或持有模型密钥。
(5)安全与可维护原则。系统采用最小权限、参数校验、密码哈希、上传
限制、事务和幂等约束;数据库变更按版本脚本管理,便于部署、回滚和后续扩
展。
3.1.2 分层架构设计
系统采用前后端分离的分层架构。视图展示层基于 Vue 3、Pinia、Axios 和
ECharts,提供用户端和管理端页面;控制层由 Spring Boot Controller 负责路由、
参数校验、身份认证和统一响应;业务逻辑层由 Service、事务组件和领域规则
完成判题、奖励、卡牌合成、任务统计、错题掌握和 AI 编排;数据访问与支撑
层包括 MyBatis-Plus Mapper、MySQL、前端直连的 FastAPI 图谱接口及后端封
装的 OpenRouter 客户端。
13
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
图 3-1 系统总体架构图
图 3-2 系统分层架构图
3.2 系统用例模型设计
用例模型从参与者、系统边界和业务目标三个层面描述系统功能。系统主要
包含普通学习用户和管理员两类参与者。普通学习用户通过登录后访问研学地
14
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
图、关联知识库、辨识闯关、卡牌方剂、季节任务、错题强化、每日翻牌、本草
智问和个人中心;管理员在完成角色鉴权后访问数据看板及内容治理功能,并可
通过“返回用户端”入口体验普通用户功能。用例之间使用 <<include>> 表示
一个完整业务必须执行的子功能,使用 <<extend>> 表示在特定条件下追加的可
选行为。
3.2.1 用户端用例分析
用户端以普通学习用户为主要参与者。登录/注册用例负责建立会话和识别
用户身份;首页研学地图用例汇总等级、积分、经验、当前学习路径、每日签到
和季节推荐。关联知识库用例包括分类筛选、关键词搜索、药材详情查看、性味
归经与功效用量查看以及关联实体图谱探索。辨识闯关用例从随机题或错题专项
训练获取题目,用户选择正品或伪品图片后提交答案,系统返回正误判定、辨识
解析、热区信息和奖励结果。
15
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
图 3-3 用户端用例图
3.2.2 管理端用例分析
管理端参与者为管理员。管理员登录后由 Sa-Token 进行角色校验,进入数
据看板、用户数据管理、药材信息管理、辨识题库管理、方剂配伍管理、知识图
谱关系管理和季节研学任务管理。数据看板用例从真实业务表聚合学习用户数、
近七天活跃用户、药材和题目数量、答题次数、正确率、任务领取率,并通过
ECharts 展示热门药材训练次数折线图和高频薄弱药材占比饼图。用户数据管理
用例支持按账号或昵称搜索,并查看用户等级、积分、经验、答题、正确率、卡
牌、方剂和任务领奖数据。
16
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
图 3-4 管理员端用例图
3.3 系统功能模块设计
3.3.1 用户端功能结构
用户端以研学地图为入口,按照“发现知识—辨识练习—奖励积累—复习巩
固”的顺序组织功能。知识库提供分类筛选、关键词检索、药材详情和关联图谱;
辨识闯关展示正品与伪品双图,支持答案判定、解析图片和热区查看;本草图鉴
维护卡牌库存、材料缺口和方剂合成;季节任务根据答题、收集、错题掌握和合
成事件更新进度;错题强化提供分类复习和连续答对评估;本草智问提供自然语
17
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
言科普;个人中心汇总等级、积分、收藏、勋章和账号设置。
图 3-5 用户端功能结构图(占位符,正式排版时插入用户端功能树)
表 3-1 用户端功能模块设计
模块
子功能
业务说明
数据结果
研学地图
学习概览、任务提醒、
路径导航
汇总用户当前研学状
态
等级、积分、任
务进度
关联知识库
分类、关键词、详情、
图谱
从多维度查阅药材并
探索关联实体
药材信息、关系
节点
辨识闯关
双图选择、提交判定、
解析热区
训练正品与伪品的外
观辨识能力
答题记录、积分、
经验
本草图鉴
卡牌库存、缺口兑换
查看已拥有和未解锁
卡牌
用户卡牌数量
方剂合成
材料校验、合成、百科
将卡牌组合转化为方
剂知识
合成记录、勋章
季节任务
任务查看、进度、奖励
领取
形成阶段性研学目标
任务进度和领取
状态
错题强化
错题本、专项练习、掌
握评估
对高频错误药材进行
针对性复习
重做次数、掌握
状态
本草智问
快捷提问、连续追问、
收藏
通过自然语言拓展科
普内容
AI 问答收藏
个人中心
勋章、收藏、排行榜、
账号安全
展示个人成长与账号
信息
用户成长档案
3.3.2 管理端功能结构
管理端采用“数据看板—内容资源—关系配置—任务运营—用户分析”的结
构。数据看板从答题记录、用户表和学习事件中聚合真实统计数据,绘制学习趋
18
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
势折线图和药材分布图;内容资源管理维护药材主图、题目正伪品图片、解析和
热区;关系配置维护药材、伪品、功效、方剂和养生主题之间的关系;任务运营
配置季节、周期、目标值和奖励;用户分析查看用户等级、积分、卡牌、答题和
任务数据。
图 3-6 管理端功能结构图(占位符,正式排版时插入管理员功能树)
表 3-2 管理端功能模块设计
模块
管理对象
主要操作
数据约束
数据看板
用户和学习统计
指标、折线图、饼图
只读聚合,不修
改业务事实
药材管理
药材与分类
新增、编辑、删除、上
传主图
名称必填,图片
类型和大小校验
题库管理
辨识题目
图片、答案、解析、热
区
题目关联有效药
材
方剂管理
方剂与材料
配方配置、奖励设置
材料 ID 有效,重
复 ID 按需求数
累计
关系管理
图谱关系
新增、删除、发布
源、目标和关系
类型必填
任务管理
季节任务
发布、编辑、下架
开始时间早于结
束时间
用户管理
用户档案
查询、学习统计
不显示密码和令
牌
3.4 游戏化与研学业务闭环设计
系统把游戏化元素嵌入研学业务,而不是单独设置装饰性按钮。用户从知识
库或图谱发现药材后进入辨识闯关,选择正品或伪品并提交答案。后端依据题目
19
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
保存的正确侧判定结果,答对时生成积分、经验和卡牌获得事件,答错时写入错
题记录并展示解析。卡牌进入用户库存后,图鉴根据方剂配方计算材料缺口;用
户可以通过继续辨识、记忆翻牌或积分兑换补齐材料。材料齐全后,合成服务在
事务中检查库存并通过条件更新扣减、扣减材料、写入用户方剂记录,并在首次
合成时发放勋章。
图 3-7 游戏化研学闭环图
表 3-3 游戏化机制与业务事件映射
游戏化机制
触发事件
系统处理
结果
积分与经验
答题正确、签到、任务
完成
后端累加用户成长值
等级和积分变化
卡牌收集
答题、翻牌、兑换
写入或增加用户库存
图鉴解锁进度
方剂合成
材料数量满足配方
事务扣减材料并记录
合成
方剂百科解锁
方剂勋章
用户首次成功合成
唯一键判断后发放
个人中心展示勋
章
错题强化
答题错误、重做答对
更新错误次数和连续
正确次数
掌握状态变化
季节任务
学习事件达到目标值
更新任务进度并允许
领取
积分、经验或卡
牌奖励
20
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
3.5 数据库结构设计(MySQL)
3.5.1 数据库概念模型(E-R 图)
系统数据库按照“账号与权限、公共知识、学习行为、游戏激励、运营配置
和 AI 记录”进行划分。sys_user 是用户学习数据的根实体;herb、question 和
herb_category 组成公共知识与题库;user_answer_record、user_wrong_question 和
learning_event 保 存 过 程 行 为 ; user_card 、 formula 、 user_formula 、 badge 和
user_badge 支撑卡牌与合成;mission 和 user_mission_progress 支撑季节运营;
user_favorite 和 ai_chat_favorite 保存用户主动收藏。
图 3-8 系统 MySQL E-R 图
实体联系的核心基数如下:一个用户可以产生多条答题记录、学习事件、错
21
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
题记录、卡牌库存和任务进度;一味药材可以关联多个题目和图谱关系;一个方
剂包含多个药材材料,一个用户可以合成多个方剂;一个任务可以被多个用户参
与。库存和合成属于强一致场景,使用唯一键与事务控制;收藏和签到属于用户
维度行为,使用用户与目标对象或日期的联合唯一约束。
3.5.2 核心数据表设计
本系统数据库表按照业务边界独立设计。以下每张表均单独列出字段、数据
类型及用途,字段来源于项目建表脚本及后续迁移脚本。表中“PK”表示主键,
“UK”表示唯一约束。
表 3-4 sys_user 用户表
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
用户主键
username
VARCHAR(40) NOT NULL UNIQUE
登录账号
password
VARCHAR(255) NOT NULL
密码摘要
nickname
VARCHAR(40)
显示昵称
role
VARCHAR(20) NOT NULL DEFAULT ‘USER’
用户角色
points
INT DEFAULT 0
当前积分
experience
INT DEFAULT 0
当前经验值
level
INT DEFAULT 1
用户等级
streak_days
INT DEFAULT 0
连续学习天数
表 3-5 herb_category 药材分类表
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
分类主键
name
VARCHAR(40) NOT NULL
分类名称
表 3-6 herb 药材信息表
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
药材主键
category_id
BIGINT
所属分类 ID
name
VARCHAR(40)
药材名称
alias
VARCHAR(100)
别名
image_url
VARCHAR(500)
药材图片地址
card_rarity
VARCHAR(12) NOT NULL DEFAULT ‘COMMON’
卡牌稀有度
source_text
TEXT
药材来源与形态描述
origin_text
VARCHAR(200)
产地信息
nature_meridian
VARCHAR(100)
性味归经
efficacy
TEXT
功效主治
22
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
字段名
数据类型/约束
字段说明
dosage
VARCHAR(100)
用法用量
contraindication
TEXT
禁忌与注意事项
deleted
TINYINT DEFAULT 0
逻辑删除标记
表 3-7 herb_relation 药材关系兼容表
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
关系主键
herb_id
BIGINT
源药材 ID
relation_type
VARCHAR(40)
关系类型
target_name
VARCHAR(100)
目标实体名称
target_type
VARCHAR(40)
目标实体类型
该表保留早期药材关系数据;当前统一关系维护入口为 sys_relation,两者
在应用层分开处理。
表 3-8 question 辨识题目表
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
题目主键
herb_id
BIGINT
对应药材 ID
authentic_image
VARCHAR(500)
正品图片
fake_image
VARCHAR(500)
伪品图片
explanation_image
VARCHAR(500)
解析辅助图片
correct_side
VARCHAR(4)
正确选项
difficulty
INT DEFAULT 1
难度等级
analysis
TEXT
判定解析
feature_annotations
TEXT
图片热区标注 JSON
deleted
TINYINT DEFAULT 0
逻辑删除标记
表 3-9 sys_relation 统一知识关系表
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
关系主键
source_type
VARCHAR(40) NOT NULL
源实体类型
source_id
BIGINT NOT NULL
源实体 ID
target_type
VARCHAR(40) NOT NULL
目标实体类型
target_id
BIGINT
目标实体 ID
target_name
VARCHAR(100) NOT NULL
目标名称
relation_type
VARCHAR(40) NOT NULL
关系类型
表 3-10 user_answer_record 用户答题记录表
字段名
数据类型/约束
23
字段说明
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
记录主键
user_id
BIGINT
用户 ID
question_id
BIGINT
题目 ID
selected_side
VARCHAR(4)
用户选择
is_correct
TINYINT
是否正确
mastery_count
INT DEFAULT 0
掌握累计次数
created_at
DATETIME DEFAULT CURRENT_TIMESTAMP
作答时间
系统未单独建立 user_wrong_question 表,错题通过本表按用户和题目聚
合,结合 is_correct 与 mastery_count 计算重做次数、连续答对次数和掌握状态。
表 3-11 learning_event 学习事件表
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
事件主键
user_id
BIGINT NOT NULL
用户 ID
event_type
VARCHAR(40) NOT NULL
事件类型
source_id
BIGINT
来源对象 ID
amount
INT NOT NULL DEFAULT 1
事件数量
event_key
VARCHAR(100) NOT NULL
幂等业务键
created_at
DATETIME DEFAULT CURRENT_TIMESTAMP
发生时间
表 3-12 user_card 用户卡牌库存表
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
库存主键
user_id
BIGINT
用户 ID
herb_id
BIGINT
药材卡牌对应 ID
quantity
INT DEFAULT 0
当前持有数量
uk_card(user_id,herb_id)
UNIQUE
用户与药材唯一库存
表 3-13 formula 方剂表
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
方剂主键
name
VARCHAR(60)
方剂名称
herb_ids
VARCHAR(100)
配方药材 ID 列表
efficacy
VARCHAR(200)
方剂功效
description
TEXT
方剂说明
badge_name
VARCHAR(60)
首次合成勋章名称
deleted
TINYINT DEFAULT 0
逻辑删除标记
表 3-14 user_formula 用户方剂表
24
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
合成记录主键
user_id
BIGINT
用户 ID
formula_id
BIGINT
方剂 ID
created_at
DATETIME DEFAULT
CURRENT_TIMESTAMP
合成时间
uk_formula(user_id,formula_id)
UNIQUE
防止重复合成
记录
当前配方材料直接保存在
formula.herb_ids 字 段 中 , 未 建 立
formula_material 明细表;服务层负责解析、校验和扣减库存。
表 3-15 badge 勋章定义表
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
勋章主键
code
VARCHAR(50) NOT NULL UNIQUE
勋章编码
name
VARCHAR(60) NOT NULL
勋章名称
description
VARCHAR(200)
解锁条件说明
icon
VARCHAR(20)
图标标识
source_type
VARCHAR(30) NOT NULL
来源类型
source_id
BIGINT
来源对象 ID
created_at
DATETIME DEFAULT CURRENT_TIMESTAMP
创建时间
表 3-16 user_badge 用户勋章表
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
用户勋章主
键
user_id
BIGINT NOT NULL
用户 ID
badge_id
BIGINT NOT NULL
勋章 ID
obtained_at
DATETIME DEFAULT
CURRENT_TIMESTAMP
获得时间
uk_user_badge(user_id,badge_id)
UNIQUE
防止重复发
放
表 3-17 mission 季节任务表
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
任务主键
title
VARCHAR(100)
任务标题
season
VARCHAR(30)
季节类型
target_type
VARCHAR(40)
目标事件类型
target_id
BIGINT
目标对象 ID
25
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
字段名
数据类型/约束
字段说明
target_value
INT
目标数量
reward_points
INT
奖励积分
reward_experience
INT DEFAULT 0
奖励经验
reward_card_herb_id
BIGINT
奖励卡牌药材 ID
reward_card_quantity
INT DEFAULT 0
奖励卡牌数量
reward_badge_id
BIGINT
奖励勋章 ID
reward_text
VARCHAR(100)
奖励说明
start_at
DATETIME
开始时间
end_at
DATETIME
结束时间
deleted
TINYINT DEFAULT 0
逻辑删除标记
表 3-18user_mission_progress 用户任务进度表
字段名
数据类型/约束
字段说明
id
BIGINT PK
AUTO_INCREMENT
进度主键
user_id
BIGINT
用户 ID
mission_id
BIGINT
任务 ID
progress_value
INT DEFAULT 0
当前进度
claimed
TINYINT DEFAULT 0
是否已领取
updated_at
DATETIME DEFAULT
CURRENT_TIMESTAMP
ON UPDATE
CURRENT_TIMESTAMP
更新时间
uk_user_mission(user_id,missi
on_id)
UNIQUE
用户任务唯一记录
表 3-19 user_favorite 用户药材收藏表
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
收藏主键
user_id
BIGINT NOT NULL
用户 ID
herb_id
BIGINT NOT NULL
药材 ID
created_at
DATETIME DEFAULT
CURRENT_TIMESTAMP
收藏时间
uk_user_herb_favorite(user_id,herb_id)
UNIQUE
防止重复
收藏
表 3-20 user_daily_check_in 每日签到表
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
签到主键
26
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
字段名
数据类型/约束
字段说明
user_id
BIGINT NOT NULL
用户 ID
check_in_date
DATE NOT NULL
签到日期
streak_day
INT NOT NULL
连续签到
天数
reward_points
INT NOT NULL
签到积分
reward_experience
INT NOT NULL
签到经验
created_at
DATETIME DEFAULT
CURRENT_TIMESTAMP
创建时间
uk_daily_check_in(user_id,check_in_date)
UNIQUE
每日只能
签到一次
表 3-21 memory_challenge 记忆挑战表
字段名
数据类型/约束
字段说明
id
BIGINT PK
AUTO_INCREMENT
挑战主键
user_id
BIGINT NOT NULL
用户 ID
challenge_date
DATE NOT NULL
挑战日期
herb_ids
VARCHAR(200) NOT NULL
挑战药材集合
status
VARCHAR(20) NOT NULL
DEFAULT ‘STARTED’
挑战状态
reward_herb_ids
VARCHAR(100)
奖励药材集合
started_at
DATETIME DEFAULT
CURRENT_TIMESTAMP
开始时间
completed_at
DATETIME
完成时间
uk_memory_challenge_day(us
er_id,challenge_date)
UNIQUE
每日一场挑战
表 3-22 ai_content_draft AI 内容草稿表
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
草稿主键
season
VARCHAR(30)
季节
topic
VARCHAR(100)
内容主题
content
TEXT
草稿正文
status
VARCHAR(20) DEFAULT ‘DRAFT’
审核状态
reviewed_by
BIGINT
审核人 ID
review_comment
VARCHAR(500)
审核意见
created_at
DATETIME DEFAULT CURRENT_TIMESTAMP
创建时间
reviewed_at
DATETIME
审核时间
27
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
generation_provider
VARCHAR(80)
生成服务提供
方
generation_model
VARCHAR(100)
生成模型标识
prompt_version
VARCHAR(60)
Prompt 版本
generation_status
VARCHAR(20) DEFAULT ‘FALLBACK’
生成状态
generation_error
VARCHAR(500)
生成错误信息
表 3-23 ai_chat_favorite AI 问答收藏表
字段名
数据类型/约束
字段说明
id
BIGINT PK AUTO_INCREMENT
收藏主键
user_id
BIGINT NOT NULL
用户 ID
question
VARCHAR(500) NOT NULL
用户问题
answer_text
TEXT NOT NULL
AI 回答正文
season
VARCHAR(30)
季节偏好
audience
VARCHAR(50)
适用人群
answer_format
VARCHAR(50)
回答格式偏好
provider
VARCHAR(80)
服务提供方
model
VARCHAR(100)
模型标识
created_at
DATETIME DEFAULT CURRENT_TIMESTAMP
收藏时间
ai_content_draft 用于管理员审核和生成治理,ai_chat_favorite 用于保存用户
主动收藏的问答,不承担全部聊天历史存储。
表 3-24 数据库索引、唯一约束与事务设计
对象
约束或索引
设计目的
sys_user
username UNIQUE
防止重复注册
user_card
uk_card(user_id,herb_id)
保证库存唯一
user_formula
uk_formula(user_id,formula_i
d)
防止重复合成记录
user_mission_progress
uk_user_mission(user_id,missi
on_id)
防止重复任务进度
learning_event
uk_learning_event(user_id,eve
nt_type,event_key)
奖励与进度幂等
user_answer_record
idx_answer_user_question_tim
e、idx_answer_user_time
支持错题和趋势查询
ai_chat_favorite
idx_ai_favorite_user_time(use
r_id,created_at)
支持用户按时间查询收藏
方剂合成在一个事务中完成库存读取、材料扣减、合成记录写入和首次勋章
发放;任一步骤失败均回滚。任务领取同样校验完成状态和领取标记,避免重复
28
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
发放奖励。
3.6 关联知识图谱设计(Neo4j)
3.6.1 图实体与关系模型设计
Neo4j 图谱采用统一 Entity 节点和 RELATED 关系。节点通过 entityType
区分 HERB(药材)、FAKE(伪品)、FORMULA(方剂)、EFFECT(功效)
和 SEASON(养生主题)。关系通过 relationType 属性区分“易混淆”“组成”
“具有功效”“相似药材”和“适宜主题”等语义。该模型避免为每一种关系创
建独立类型,便于统一查询和前端渲染。
图 3-9 Neo4j 图实体关系图
当前快照示例包括“金银花—易混淆—山银花”“金银花—组成—银翘散”“金
银花—具有功效—清热解毒”和“金银花—适宜主题—夏季养生”。/ask 输入为问
题文本而不是实体 ID;点击可识别药材节点时,前端调用 Spring Boot 详情接口,
查询其他药材的一跳关系。
3.6.2 异构数据同步机制
管理端通过 Spring Boot 接口维护 MySQL 中的 sys_relation。维护后,由
sync_graph.ps1 显式联结 herb 导出 relations.csv,验证字段与源药材,再调用
import_neo4j.py。导入以(type,name)执行节点 MERGE,并以两端节点及关系 type
执行关系 MERGE,最后删除快照中不存在的 RELATED 边而保留节点;并非以
MySQL 实体 ID 作为 Neo4j 唯一键。
29
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
图 3-10 MySQL—CSV—Neo4j 同步流程图
3.7 本章小结
本章完成了系统总体设计和数据库设计。首先明确业务闭环、确定性规则优
先、关系数据与图数据协同、低耦合及安全可维护等设计原则,给出前后端分离
四层架构和图谱、AI 外部服务边界;随后从用户端和管理端划分功能模块,说
明答题、卡牌、方剂、任务、错题和 AI 问答之间的事件联动。数据库部分依据
项目建表和迁移脚本整理了账号、药材、题库、关系、答题、错题、学习事件、
卡牌、方剂、勋章、任务、收藏、签到、记忆挑战和 AI 记录等核心表,并说明
索引、唯一约束和事务边界。最后设计 Neo4j 实体关系模型及 MySQL—CSV
—Neo4j 同步回退机制,为后续算法设计和详细实现奠定数据基础。
30
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
4 核心机制与算法模型设计
系统的核心机制由关联检索、学习奖励、库存事务、掌握度评价及大模型交
互组成。关联检索负责返回可展示的知识子图,业务算法负责学习状态和奖励,
AI 模型只生成科普文本。本章依据实际运行入口区分已实现机制与设计边界,
不将向量嵌入、模型训练或分布式熔断作为系统已有能力。
4.1 算法的设计与实现
4.1.1 图谱关联检索与 CSV 降级算法
FastAPI 在模块加载时使用 csv.DictReader 解析 herbs.csv 与 relations.csv,并
分别保存为 HERBS 和 RELATIONS 列表。问答请求首先经过 jieba 分词,再依
次检查词表记录的名称、完整别名字符串是否出现在问题中,或药材名称是否命
中分词集合,返回第一条满足条件的药材。该过程属于词表规则匹配,不是最长
词优先算法,也不包含余弦相似度排序。
实体识别成功后,neo4j_graph 调用 get_neo4j_driver 创建连接。密码未配置
时 直 接 返 回
None ; 配 置 存 在 时 , 将
connection_timeout
与
connection_acquisition_timeout 均设为 2 秒,并调用 verify_connectivity 验证连通
性。创建驱动或验证连接发生异常时,由该函数的 except 分支返回 None,随后
/ask 通过“neo4j_graph(name) or csv_graph(name)”选择 CSV 回退结果。该判断仅
表示本次请求的连接可用性,不维护跨请求的熔断状态。
Neo4j 路径使用参数化 Cypher 查询目标药材的出向一跳关系:
MATCH (s:Entity {name:$name})-[r:RELATED]->(t:Entity)
返回字段包括源名称、源类型、关系语义、目标名称和目标类型。当前接口
不执行多跳搜索,也不进行大模型推理。数据库返回空记录时,neo4j_graph 同
样 返 回 None,调用方继续读取 CSV 快照中的关系。 CSV 路径逐条筛选
source_name 等于查询药材名的记录,即使没有关系也保留中心药材节点。
两种路径均输出 graph.nodes 与 graph.links。节点包含 id、name、category、
value,关系包含 source、target、label。id 按“类型:名称”构造,集合用于避免重
复添加同一目标节点;关系列表仍按匹配记录追加。CSV 中心节点的 category
31
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
使用中文“药材”,Neo4j 中心节点使用数据库中保存的 type,属于字段结构统一
而非所有字段值完全相同。图谱文本答案由药材字段和关键词模板生成,不来自
OpenRouter。
连接超时与查询超时必须区分。当前 2 秒配置约束连接建立和连接获取,并
不是事务级查询截止时间;session.run 外围只有 try-finally 用于关闭驱动,没有
捕获查询执行异常。因此,已建立连接后的查询超时、数据库不存在或会话执行
错误仍可能向上抛出,而不会进入 or 表达式右侧。算法 4-1 如实保留该异常边
界。完整查询异常回退需要增加查询阶段的异常捕获和事务超时设置,列入后续
改进,不据此宣称当前服务已具备全场景自动降级。
Algorithm 4-1 图谱查询与连接失败回退
Input: 问题 q,药材词表 H,CSV 路径 f,连接阈值τc 与获取阈值τa
Output: 图 G=(V,E);查询执行失败时向上返回异常
1
服务启动:R ← DictReader(f),将关系快照保存到内存
2 h ← 以名称、别名和 jieba 分词匹配 H 中的第一条药材
3 if h 为空 then return (空节点集, 空关系集)
4 driver ← None
5 if Neo4j 密码已配置 then
6
try: 创建 driver(τc,τa)并验证连接
7
catch Exception: driver ← None
8 if driver 非空 then
9
try: records ← 参数化查询 h 的一跳 RELATED 出边
10
finally: 关闭 driver;查询异常继续向上抛出
11
if records 非空 then return Normalize(records)
12 rows ← 顺序筛选 R 中 source_name=h.name 的全部记录
13 初始化中心节点;以 type:name 去重添加目标节点并构造关系
14 return G=(nodes,links)
设 CSV 快照关系总数为 m,命中关系数为 k。实体已经确定时,CSV 分支
的时间复杂度为 O(m+k),即 O(m);节点集合及结果数组的增量空间为 O(k+1),
常驻快照占用 O(m)空间。启动阶段的 CSV 解析需要 O(m)时间。Neo4j 分支在应
用侧遍历 k 条记录进行格式化,时间和结果空间均为 O(k)。数据库端复杂度取
决于查询计划;现有组合唯一约束为(type,name),而查询仅指定 name,因此不
能直接据此声称实体定位必然为 O(log n)。上述分析不包含网络等待时间。
32
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
4.1.2 辨识奖励掉落与方剂原子合成算法
答题和方剂合成是两个独立业务操作。LearningServiceImpl.submitQuiz 在事
务中完成答案比较、作答记录写入、连续正确次数计算和奖励发放。正确答案固
定对应 20 积分、10 经验及一张题目药材卡;错误答案不发放这些奖励。随后
CardRewardService 按照题目难度决定是否额外掉落一张方剂材料卡,额外掉落
概率按式(4-1)计算。
p(d)=min{0.75, 0.30+0.20[max(1,d)−1]}
(4-1)
其中,d 为题目难度,当前管理端允许 1、2、3 三个取值,对应概率分别为
0.30、0.50、0.70。75%的上限仅是代码防御性限制。命中概率判断后,系统遍历
有效方剂的 herb_ids,合并并去重药材 ID,再按照 COMMON、RARE、EPIC 三
个稀有度分别赋予 6、3、1 的整数权重。代码通过重复放入相应数量的 ID 构造
加权数组,再均匀选取数组位置,等价于式(4-2)的条件概率。
P(i ∣ 额外掉落)=wᵢ / Σⱼ₌₁ⁿ wⱼ (4-2)
其中,n 为有效候选药材种数,wᵢ 为第 i 种药材的权重。该概率表示已触发
额外掉落后的选择概率,不是某卡牌在全部答题中的无条件概率。奖励服务先尝
试以(user_id,event_type,event_key)唯一键写入 CARD_GAINED 事件,仅当写入
成功时增加库存。答题事件键包含新答题记录 ID,故只保证同一奖励事件不重
复执行;再次提交答题接口会产生新的记录 ID,不能将此解释为整个答题接口
已具备请求级幂等性。
Algorithm 4-2 正确辨识后的卡牌奖励
Input: 用户 u,题目 q,已持久化的答题记录 a,正确性 correct
Output: 基础卡牌及可选的额外卡牌奖励
1 if correct 为假 then return 无奖励
2
原子增加 u 的 20 积分与 10 经验
3
以 quiz:a.id:base 为键记录基础获卡事件并增加库存
4 if randomInt(0,99) ≥ 100p(q.difficulty) then return 基础奖励
5 pool ← 所有有效方剂 herb_ids 的去重集合
6 weighted ← 按 6、3、1 权重展开有效候选药材 ID
7 if weighted 为空 then return 基础奖励
8 h ← 均匀抽取 weighted 中的一个位置
9
以 quiz:a.id:bonus 为键记录事件并增加 h 库存
33
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
10 return 基础奖励及 h;任一事务内异常交由上层回滚
方剂配方保存在 formula.herb_ids 逗号分隔字段中,服务层将重复 ID 计数为
材料需求,不依赖不存在的 formula_material 表。对于第 i 味药材,需求为 rᵢ、库
存为 cᵢ,材料缺口为 max(0,rᵢ−cᵢ),全部缺口为 0 且尚未合成时才满足合成条件。
ProgressServiceV2.synthesize 先进行业务预检,再逐项执行“UPDATE user_card
SET quantity=quantity−r WHERE user_id=u AND herb_id=h AND quantity≥r”。更新
行数必须为 1,否则抛出异常。
Algorithm 4-3 方剂材料扣减与原子合成
Input: 当前用户 u,方剂 ID f
Output: 合成记录及首次勋章,或明确的业务异常
1 Begin Transaction
2 查询有效方剂;若不存在或(u,f)已合成则拒绝
3 required ← 解析 herb_ids 并按药材 ID 累计需求
4 inventory ← 读取用户卡牌,检查各材料数量充足
5 for each (h,r) in required:
6
changed ← 执行 quantity≥r 的条件扣减
7
if changed≠1 then Throw 库存发生变化
8 插入 user_formula(u,f)
9 查询方剂关联勋章,若用户尚未获得则插入 user_badge
10 Commit;发生运行时异常则 Rollback
11 return 合成结果
设全部有效方剂包含的材料 ID 总项数为 b,去重后候选药材数为 n,则候选
池构造的应用侧时间为 O(b+n),加权数组长度不超过 6n,空间为 O(n)。方剂合
成设配方总项数为 l、不同材料数为 r、用户库存记录数为 c,当前实现读取全部
用户库存后建立映射,其应用侧时间为 O(l+c+r),空间为 O(c+r),并执行 r 次条
件扣减。数据库事务提供跨表更新原子性,条件更新防止单行库存被扣为负数,
用户与方剂的唯一约束防止产生重复合成记录。
4.1.3 错题掌握度评估与事件驱动任务算法
系统使用 user_answer_record 统一保存作答过程,不单独建立错题表。某题
曾出现错误记录后才进入错题聚合视图。最新记录的 mastery_count 表示连续正
确次数:本次正确则在前一次基础上加 1,错误则归零。界面以式(4-3)转换为
整数百分比。
M(s)=min{100, ⌊ 100s/3⌋ }
(4-3)
其中,s 为连续正确次数,M 为显示用掌握度百分比;s 为 0、1、2、3 时分
别显示 0、33、66、100。该阈值是系统的训练规则,不是经学习实验校准的认
知能力估计。复习接口排除最新连续正确次数已达到 3 的题目,再从满足用户难
34
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
度条件的历史错题中随机抽取,未采用概率降权或遗忘曲线。
当连续正确次数首次跨越 3 时,服务尝试记录 WRONG_MASTERED 事件。
Mapper 中的 EXISTS 条件检查历史上确实答错过该题,避免将始终答对的题目
算作错题掌握;事件键为 question:题目 ID,同一用户同一题只累计一次该事件。
任务查询根据 target_type 选用不同统计来源,如表 4-1 所示。
表 4-1 任务进度的统计来源与时间口径
目标类型
统计来源
时间与对象约束
ANSWER、
CORRECT、
WRONG
用户答题记录计数
使用任务起止时间;target_id
为题目 ID
CARD
CARD_GAINED 事件 amount 求和
当前代码累计全部历史获
卡,不使用任务时间窗
MASTERED
WRONG_MASTERED 事件 amount 求
和
使用起止时间;同题掌握事
件只记录一次
FORMULA
user_formula 记录计数
使用起止时间;target_id 为
方剂 ID
CARD 任务选择累计获卡事件而不是当前库存,因此合成消耗材料不会使进
度倒退。该实现同时意味着任务发布以前获得的卡牌可能计入新 CARD 任务,
不能将其称为严格的当季新增获卡数。季节和任务起止时间仍用于判断是否允许
领取。任务列表展示和领取前均重新计算进度,learning_event 是同步业务账本,
不存在消息队列订阅过程。
Algorithm 4-4 任务进度计算与奖励领取
Input: 用户 u,任务 m,当前时间 t,学习记录与事件集合
Output: 任务进度 progress 及领取结果
1 根据 m.target_type 选择答题、获卡、掌握或合成统计
2 应用对应的对象和时间约束,得到 progress
3 若任务不存在、已下架、未开始、已过期或季节不符则拒绝
4 若 progress<m.target_value 则拒绝
5 查询(u,m.id)进度记录;若 claimed=1 则拒绝
6 在事务中创建或更新进度记录,设置 claimed=1
7 原子增加积分经验;以 mission:m.id 为键发放配置卡牌
8 按配置检查并发放用户尚未获得的勋章
9 提交事务并返回奖励结果
设用户答题记录数为 a,涉及的不同题目数为 q。错题视图在应用层进行分
组和扫描,时间为 O(a),保存历史列表和分组引用所需空间为 O(a);另有按题
目和药材查询的数据库访问成本。任务统计通过条件查询或事件求和完成,数据
库成本受索引与匹配记录数量影响,不能统一写为常数复杂度。当前领取逻辑能
够拒绝顺序重复请求;已有 claimed=0 记录的更新未采用比较并交换条件,并发
35
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
情况下仍需要进一步验证,不能仅凭@Transactional 断言覆盖全部重复领奖竞争。
4.2 模型的设计与实现
4.2.1 关联知识图谱实体关系模型设计
第三章给出了图谱存储结构,本节进一步说明查询所依赖的实体标识。物理
模 型 为 “(:Entity {type,name,…})-[:RELATED {type}]->(:Entity)” , 节 点 的
(type,name)组合唯一约束用于约束同一类型的同名实体,关系属性 type 保存业务
语义。其设计借鉴知识图谱的实体与关系表达方式[17],并服务于药材、方剂、
功效和辨识关系的交互展示。
当前 CSV 源节点类型为 HERB,目标类型则包含“药材”“伪品”“方剂”“功
效”“归经”“养生”“养生主题”等中文值。导入脚本按原值 MERGE,没有将其全部
转换成 HERB、FAKE、FORMULA、EFFECT、SEASON 等英文枚举。因此 HERB:
人参与药材:人参在物理模型中可能是不同节点,“养生”与“养生主题”也不自动合
并。论文中使用统一概念类别描述领域结构,但实际数据仍需要实体类型词表治
理。
图谱中的“组成”边按药材指向方剂发布,方剂合成材料则由 MySQL 中的
herb_ids 控制。两者并非自动相互生成,不能以任一知识边替代库存扣减规则。
名称、类型和关系语义是查询契约,MySQL 事务数据与图谱关系投影分别承担
不同责任。基于大模型的知识图谱构建属于相关研究方向[20],本系统当前关系
仍由管理接口和脚本维护,未实施自动实体关系抽取。
4.2.2 大语言模型科普问答与 Prompt 上下文模型设计
本草智问使用 OpenRouter 的 OpenAI 兼容 Chat Completions 接口。业务类
OpenAiCompatibleTextProvider 只负责请求组装、发送和解析,不训练或微调模
型。模型标识由 AI_MODEL 注入,已有交付记录采用 liquid/lfm-2.5-2.6b:free;
免费模型的可用性和额度由上游控制,不据此承诺长期免费。本文讨论应用层的
模型调用与上下文组织,不将 Transformer、MoE 或注意力机制的内部实现算作
本系统自研算法[42]。
上下文模型由系统指令 S、当前问题 Q、偏好 P 及最近对话 H 组成。P 包含
季节、适用人群和回答形式。前端 buildContext 取最近 6 条消息并截取末尾 2000
字符,后端再次限制历史字符串长度为 2000。当前问题最多 500 字符,季节最
多 30 字符,人群和回答形式各最多 50 字符。历史作为 user 消息中的“最近对话”
文本拼接,而非独立的多条 role 消息,也不是经过 token 预算管理的长期记忆。
表 4-2 大模型请求的字段与约束
36
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
字段
当前实现
职责
model
由环境配置注入
选择文本生成模型
messages
system 与 user 两条消息
分离系统角色和用户需求
temperature
0.5
设置生成采样参数,不保证
事实正确
max_tokens
900
限制输出令牌数,不等价于
900 汉字
context
末尾 2000 字符
有限连续追问上下文
promptVersion
health-chat-v1
返回所用提示词版本
系统提示词将模型定位为科普助手,要求解释药材、辨识特征和学习建议,
禁止诊断疾病、给出处方、剂量和个体化用药建议,并要求涉及症状时提示就医。
这些限制属于输入侧指令约束;系统尚未部署输出事实核验器或医学审核模型,
不能由提示词存在推导出所有回答均符合安全要求。幻觉研究与健康 AI 治理文
件均提示了对输出可靠性进行独立评估的必要性[36,37]。
当前知识库问答与本草智问相互独立:前者返回结构化图与模板解释,后者
接收问题、偏好及历史文本,没有自动检索药材或图谱后将证据注入 Prompt。
故本系统属于结构化知识浏览与生成式科普并行的应用,不是已实现的 RAG 问
答。检索增强生成可作为未来通过真实证据补充模型上下文的方向 [34],不在本
章添加未实现的向量距离、HNSW 或嵌入模型训练公式。
4.2.3 AI 服务请求级容错状态模型设计
AI 服务采用配置检查、最多两次调用和本地模板回退。isConfigured 仅检查
基础地址、密钥和模型字段非空,状态接口的 CONFIGURED 表示配置齐全,不
表示上游已连通。实际问答成功后才返回 SUCCESS。未配置、请求异常、JSON
解析失败或回答为空时进入异常路径;两次尝试均失败后,
HealthContentServiceImpl 返回 FALLBACK 及 template-fallback 来源。
表 4-3 单次 AI 请求的状态转换
状态
事件
转移与处理
配置检查
必要字段缺失
直接进入本地回退
首次调用
返回非空正文
SUCCESS 并结束本次请求
首次调用
网络、HTTP、解析或空内容异常
进入第二次调用
第二次调用
返回非空正文
SUCCESS 并结束本次请求
第二次调用
再次异常
FALLBACK 并返回本地提
示
37
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
状态
事件
转移与处理
下一次用户请求
配置存在
重新尝试上游,不读取历史
熔断状态
连接和读取超时均使用 AI_TIMEOUT_SECONDS,缺省 25 秒。两者是单次
调用中不同阶段的超时参数,且存在第二次尝试,因此不能将 25 秒当作整个问
答接口的严格最大耗时。当前重试立即执行,没有指数退避、错误类型细分或跨
请求失败计数。该模型描述请求级容错,而非高可用集群或具有打开、半打开状
态的断路器。
本地回退文本提示学习者从药材来源、性味归经、传统功效和辨识特征继续
查阅教材,不包含自动生成的诊疗结论。status、provider 和 model 使前端能够区
分真实模型结果与回退模板。该设计保留了交互反馈,但不保证回退内容能够充
分回答原问题,其评价应与接口可用性分开。
4.3 八角行为理论与游戏化机制映射
八角行为框架用于解释游戏化设计中的驱动力,而不是直接测量学习能力
[5]
。本系统将其与可记录的业务行为对应:辨识任务形成挑战,答题反馈支持复
习,卡牌积累连接方剂知识,任务和勋章提供阶段目标。该映射是设计分析,不
能代替受控学习实验或证明各驱动力均已产生效果。
表 4-4 八角行为框架与系统机制的对应关系
驱动力
系统机制
可记录行为或状态
史诗意义与使命
感
中医药研学主题与知识关联
知识内容及学习入口
发展与成就
积分、经验、难度解锁、勋章
等级、答题记录、获得勋章
创造力与反馈
双图比较、热区解释与复习
作答结果与连续正确次数
所有权与拥有感
卡牌图鉴、药材及问答收藏
库存种类与收藏记录
社会影响与关联
性
按积分、答题量或正确率排行
排名与学习记录;无小组协
作机制
稀缺性与急迫感
任务时段、季节限制、卡牌稀有度
任务有效期与材料缺口
不可预测性与好
奇心
难度概率额外掉卡
获卡事件与额外奖励
损失与逃避
未掌握提示、答错后计数归零
待复习错题与掌握状态
签到和记忆挑战也会提供奖励,因而系统并非只奖励正确答题。参与指标和
知识指标需要分开解释:积分反映多类操作累积,连续答对体现特定题目的短期
表现,二者都不能独立证明长期知识迁移。相关游戏化元分析研究分别报告认知、
动机及行为结果的效应量[28],这种区分为后续设计学习成效评价提供了依据。
38
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
4.4 本章小结
本章说明了词表实体识别与一跳关联查询、连接失败时的 CSV 回退、奖励
概率与加权选卡、材料条件扣减与事务合成,以及连续正确次数和学习事件统计
机制。模型部分限定了图实体标识、用户偏好与有限对话上下文、请求级重试和
本地回退的实现范围。上述机制均与现有代码入口对应;查询执行异常回退、类
型标准化和医学事实审核仍是需要进一步完善的边界。
39
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
5 系统详细设计与实现
本章从用户认证、知识图谱检索、双图辨识、卡牌与方剂、任务与错题、
AI 助手及管理员控制台七个方面说明系统实现。前端页面通过 Vue Router 组
织路由,Pinia 保存登录状态,Axios 访问 REST 接口;Spring Boot 控制器负
责请求入口,Service 层集中处理业务规则,Mapper 层访问 MySQL;FastAPI 图
谱服务和 OpenRouter AI Provider 通过独立接口接入。
5.1 用户认证与鉴权模块实现
5.1.1 PBKDF2 密码保护与登录注册
AuthController 提供登录、注册、注销、个人资料和修改密码接口。注册时
校验账号为 4 至 20 位字母、数字或下划线,密码长度为 6 至 64 位,并将用户角
色初始化为 USER。PasswordService 使用 SecureRandom 生成 16 字节随机盐,
采用 PBKDF2WithHmacSHA256、120000 次迭代和 256 位派生长度生成密码摘
要,存储格式包含算法前缀、迭代次数、盐和摘要。登录成功后调用 StpUtil.login
建立会话,历史演示账号若仍为明文,会在首次成功登录时升级为 PBKDF2 格
式。
代码清单 5-1 PBKDF2 口令派生与 Token 登录(Java)
PasswordService.encode(rawPassword):
salt ← SecureRandom(16 bytes)
digest ← PBKDF2WithHmacSHA256(rawPassword, salt, 120000, 256)
return "{PBKDF2}" + iterations + "$" + Base64(salt) + "$" + Base64(digest)
AuthService.login: query username → matches password → StpUtil.login(user.id) →
return token, role
40
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
图 5-1 用户登录与注册页面
5.1.2 Sa-Token 角色鉴权拦截
SaTokenConfig 使用 SaInterceptor 拦截 /api/** 请求,登录和注册接口被列
入 白 名 单 , 其 余 接 口 必 须 通 过 StpUtil.checkLogin 。 管 理 员 控 制 器 使 用
@SaCheckRole("ADMIN"),StpInterfaceImpl 从 sys_user 读取角色列表。前端路
由守卫用于改善页面跳转体验,真正的权限边界由后端拦截器和控制器注解保
证;普通用户访问 /api/admin/** 时返回 403。
5.2 关联知识图谱与多维检索模块实现
5.2.1 药材筛选与多维详情展示
HerbController 的列表接口支持关键词、分类、功效、药性和归经组合筛选。
LearningServiceImpl 使用 MyBatis-Plus LambdaQueryWrapper 拼接条件:关键词
同时匹配 name、alias 和 efficacy,分类使用 category_id 精确匹配,功效和性
味 归 经 使 用 模 糊 匹 配 。 详 情 接 口 返 回 药 材 基 础 字 段 以 及 sys_relation 中
source_type=HERB、source_id 为当前药材的关系记录。
代码清单 5-2 药材多维筛选与关联详情(Java)
LambdaQueryWrapper<HerbInfo> q = new
LambdaQueryWrapper<HerbInfo>().eq(HerbInfo::getDeleted, 0);
if (keyword != null) q.and(x -> x.like(HerbInfo::getName,
keyword).or().like(HerbInfo::getAlias, keyword).or().like(HerbInfo::getEfficacy,
41
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
keyword));
if (categoryId != null) q.eq(HerbInfo::getCategoryId, categoryId);
return herbMapper.selectList(q);
图 5-2 多维药材检索与知识图谱页面
5.2.2 ECharts 关系图谱画布与交互
KnowledgeSafe.vue 将药材详情和关系记录转换为 nodes、links 结构,
GraphView.vue 使用 ECharts GraphChart 的 force 布局绘制关系网络。节点采用
类型和名称组成的稳定 ID,主节点使用较大尺寸;画布支持拖拽、缩放、悬浮
提示和节点点击,点击节点后可在详情区域查看关联实体。主动发起图谱问答时,
前端调用 FastAPI /ask;普通详情页仍优先使用 MySQL 实时关系,避免静态
CSV 快照覆盖后台刚刚修改的关系。
5.3 双图真伪辨识与闯关模块实现
5.3.1 双图选择与判定反馈
QuizController 提供随机题与错题复习接口。随机题按用户等级限制可抽取
难度:等级低于 3 时开放难度 1,等级 3 至 5 开放难度 1 至 2,等级 6 及以上开
放难度 1 至 3。题目 VO 不返回 correct_side,答案留在服务端用于提交判定;当
前提交接口本身没有再次核查用户等级对应的难度权限,因此抽题限制不能等同
于完整的关卡越权防护。
代码清单 5-3 双图判题与奖励事件(Java)
42
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
boolean correct = q.getCorrectSide().equalsIgnoreCase(selected);
record.setIsCorrect(correct ? 1 : 0);
record.setMasteryCount(correct ? previousMastery + 1 : 0);
answerMapper.insert(record);
if (correct) { userMapper.addRewards(userId, 20, 10); cardRewardService.award(userId,
q.getHerbId(), 1, "quiz:" + record.getId() + ":base"); }
图 5-3 双图真伪辨识页面
5.3.2 坐标热区标注与解析管理
管理员题库页面在正品图和伪品图上点击添加热区坐标,坐标按 0 至 100
的百分比保存为 JSON 数组。AdminContentServiceImpl 在保存题目前校验标注
必须为数组,并检查每个 x、y 坐标均处于 0 至 100 范围。用户答题结果携带
featureAnnotations,前端在解析弹窗中叠加标注点,既能说明差异位置,又不会
把图片处理逻辑耦合到后端判题。
5.4 卡牌收集与方剂合成模块实现
5.4.1 图鉴库存与材料缺口兑换
CardBookV2.vue 通过 /api/learning/cards 获取全部有效药材、用户库存和方
剂进度。ProgressServiceV2 解析每个方剂的 herb_ids,计算 required、collected 和
missingMaterials。用户可以从缺口项跳转到辨识训练,或使用 30 积分兑换当前
方剂材料池中的一张卡牌;兑换在事务中先扣减积分,再通过带事件键的奖励服
务增加库存。
43
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
代码清单 5-4 方剂库存条件扣减与事务(Java)
@Transactional
public Map<String,Object> synthesize(Long userId, Long formulaId) {
required = requirements(formula.getHerbIds());
checkInventory(required);
for ((herbId, amount) : required)
if (cardMapper.deductQuantity(userId, herbId, amount) != 1) throw new
IllegalArgumentException();
insertUserFormula(userId, formulaId);
awardBadgeIfAbsent(userId, formulaId);
}
图 5-4 卡牌图鉴与方剂合成页面
5.4.2 方剂合成事务与勋章发放
合成接口先拒绝无效方剂和已经合成的方剂,再逐味检查库存。
UserCardMapper.deductQuantity 使用“用户、药材和库存数量满足条件”更新语
句,防止并发请求将库存扣成负数。全部扣减成功后写入 user_formula,并查找
source_type=FORMULA、source_id 为方剂 ID 的勋章定义;首次获得时写入
user_badge。Spring 事务保证材料扣减、合成记录和勋章发放的一致性。
44
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
5.5 季节研学任务与错题强化模块实现
5.5.1 季节任务进度计算与奖励领取
MissionV2.vue 展示当前月份对应的春季、夏季、秋季或冬季任务。任务可
以限定开始时间、结束时间、季节、目标类型和目标对象。ProgressServiceV2 对
ANSWER、CORRECT、WRONG、CARD、MASTERED 和 FORMULA 分别
统计答题、正确、错误、获卡、掌握和合成进度。领取接口在事务中写入
user_mission_progress,设置 claimed=1,并发放积分、经验、卡牌和勋章;重复
领取会被 claimed 标记拦截。
代码清单 5-5 错题掌握与任务统计(Java)
int mastery = correct ? previousMastery + 1 : 0;
answerMapper.insert(recordWith(mastery));
if (mastery >= 3 && previousMastery < 3) eventMapper.record(userId,
"WRONG_MASTERED", questionId, 1, "question:" + questionId);
if ("CARD".equals(targetType)) progress = eventMapper.sumProgress(userId,
"CARD_GAINED", targetId, null, null);
图 5-5 季节任务页面
5.5.2 错题本分类与专项强化训练
WrongBookV2.vue 展示错题聚合、掌握度、练习次数与正确率。聚合使用全
部答题历史,只保留曾经答错且题目仍有效的记录;推荐列表取前 3 条未掌握题
目,pendingCount 当前为该推荐列表长度而非全部未掌握题数。专项接口另从未
45
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
掌握历史错题随机抽取,连续答对达到 3 后排除该题,不采用相似题扩展或动态
概率降权。
图 5-6 错题强化页面
5.6 本草智问 AI 科普助手模块实现
5.6.1 偏好配置与 OpenRouter 模型调用
HealthAssistant.vue 提供季节、适用人群和回答形式三个偏好项。用户提交
问题后,前端将偏好和最近对话发送到 /api/health-content/chat;后端进行默认值
填充、字段长度限制和上下文截断,再由 OpenAiCompatibleTextProvider 构造
system/user 两条消息。默认请求温度为 0.5,最大输出令牌数为 900,连接和读
取超时由 AI_TIMEOUT_SECONDS 配置,当前工程默认 25 秒。模型名、API Key
和基础地址均从环境变量读取,不写入前端代码。
代码清单 5-6 OpenRouter 请求与本地回退(Java)
if (!isConfigured()) throw new IllegalStateException("AI Provider 未配置");
body.put("model", model); body.put("temperature", 0.5); body.put("max_tokens", 900);
for (int attempt = 0; attempt < 2; attempt++) { try { response = rest.postForObject(url +
"/chat/completions", entity, String.class); return parse(response); } catch (Exception ex)
{ last = ex; } }
throw new IllegalStateException("AI 调用失败", last);
HealthContentServiceImpl.catch → status=FALLBACK, provider=template-fallback
46
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
图 5-7 本草智问 AI 对话页面
5.6.2 逐字呈现与问答收藏弹窗
前端采用响应式消息对象、requestAnimationFrame 和 120 毫秒看门狗实现
逐字呈现。该效果只改变文本展示节奏,不改变后端返回内容;生成期间操作按
钮锁定,完成后支持复制、重新生成、深入追问和收藏。收藏接口将问题、回答、
季节、人群、格式、Provider 和模型写入 ai_chat_favorite,并以登录用户 ID 校
验所有权;侧栏列表点击后打开固定弹窗,取消收藏不会刷新当前对话。
47
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
图 5-8 本草智问移动端界面
48
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
图 5-9 AI 问答收藏详情弹窗
5.7 管理员综合控制台模块实现
5.7.1 ECharts 数据看板与统计
AdminAnalyticsController 限制 ADMIN 访问。统计由用户、答题、药材、题
目、任务和领取记录计算。热门药材按答题次数排序,折线图横轴为药材类别而
非日期;薄弱药材环形图基于错误次数。missionClaimRate 分母为学习用户数乘
有效任务数,表示粗粒度领取比例,不是活跃参与者中的任务完成率。演示数据
含 SQL 构造记录,不能据看板证明真实学习效果。
代码清单 5-7 管理员统计聚合(Java)
@SaCheckRole("ADMIN")
@GetMapping public Result<Map<String,Object>> summary() { return
Result.ok(service.summary()); }
records = answers.selectList(all);
accuracy = total == 0 ? 0 : correct * 100 / total;
popularHerbs = groupByQuestionThenHerb(records); weakHerbs =
groupWrongByHerb(records)
49
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
图 5-10 管理员数据看板页面
5.7.2 综合内容分页管理与关系维护
管理员可以维护药材、题目、图片热区、方剂、图谱关系、季节任务和用户
统计。药材、题库、方剂、关系和任务保存前执行字段校验;图片上传限制 JPG、
PNG、WebP 和 GIF,单文件不超过 5MB,并校验文件签名,文件名由 UUID 生
成。各列表复用 AdminPagination.vue,每页显示 6 条,筛选和增删改查后回到
第一页。关系删除支持按源实体、目标实体和关系类型组合条件处理,避免将雪
花型 bigint ID 直接交给 JavaScript 后产生精度丢失。
50
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
图 5-11 题库热区管理页面
图 5-12 图谱关系管理页面
表 5-1 主要 REST 接口
接口
方法
核心字段
返回内容
权限
/api/auth/login
POST
username、
password
Token、角色
公开
/api/herbs
GET
q、categoryId、
efficacy、nature、
meridian
药材列表
登录
/api/quiz/submit
POST
questionId、
selectedSide
判题、解析、奖
励
登录
/api/learning/formulas/{id}/synth
esize
POST
formulaId
合成结果、勋章
登录
question、season、
回答、状态、
audience、format、
Provider
context
登录
/api/health-content/chat
POST
/api/admin/analytics
GET
无
统计看板数据
ADMI
N
5.8 本章小结
本章从认证鉴权、知识查阅、图谱交互、双图辨识、卡牌方剂、任务错题、
AI 助手和管理员控制台上述方面说明了系统实现。各模块通过 REST 接口、事
务服务和关系数据连接为完整闭环;AI 与图谱作为可替换外部能力,核心答题、
库存、合成和任务奖励仍由后端确定性规则负责。
51
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
6 系统测试与结果分析
6.1 测试环境与测试方案
本章区分本次复测结果、项目保留的历史测试记录和尚未执行的验证方案。
复测对象为 Spring Boot 后端默认测试集,执行命令为 mvn.cmd test -q,测试日期
为 2026 年 9 月 4 日。测试使用 JUnit 与 Mockito,默认排除标记为 integration 的
测试;本次不重建业务数据库、不修改演示账号,也不为论文测试切换线上 AI
配置。
工程配置为 Spring Boot 2.7.18、Java 8 兼容目标、MyBatis-Plus 3.5.5 与
Sa-Token 1.37.0。图谱服务由 FastAPI、jieba 及 Neo4j Driver 组成,前端采用 Vue、
Pinia 与 ECharts。运行环境的软件版本应与源码声明及测试运行环境分别记录,
不能仅由构建目标推断实际 JDK 版本。功能测试以规则和输入输出为对象,性
能测试还需要请求耗时样本、数据规模和并发条件。
6.2 系统核心功能与业务闭环测试
6.2.1 用户端研学闭环功能测试
本次默认测试覆盖答案提交校验、正确与错误分支、连续正确次数、卡牌事
件幂等、材料池去重及每日签到等规则。表 6-1 按测试类汇总实际运行数量。测
试报告来自 server/target/surefire-reports,失败、错误和跳过均为 0。
表 6-1 本次快速测试结果
测试类
主要对象
用例数
通过数
LearningServiceIm
plTest
判题、奖励及掌握次数
4
4
CardRewardServic
eTest
事件去重和方剂材料池
3
3
DailyCheckInServi
ceTest
签到奖励及重复签到
2
2
ProgressServiceIm
plTest
材料扣减、任务时效与
重复领取
5
5
52
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
测试类
主要对象
用例数
通过数
HealthContentServ
iceImplTest
AI 输入、回退、收藏归
属
6
6
AdminContentServ
iceImplTest
内容校验规则
3
3
PasswordServiceTe
st
口令摘要与匹配
2
2
StpInterfaceImplTe
st
角色解析
2
2
SysUserSerializati
onTest
密码字段序列化边界
1
1
合计
默认快速测试
28
28
需要注意,ProgressServiceImplTest 直接构造的是旧 ProgressServiceImpl,而
当前注入 ProgressController 的实现为 ProgressServiceV2。二者具有部分相同的合
成逻辑,但旧类测试通过不能等同于 V2 的全部功能通过。当前版本的季节匹配、
MASTERED 事件统计、CARD 累计口径和每日记忆挑战仍应补充直接针对 V2
的测试。
6.2.2 管理端综合控制功能测试
AdminContentServiceImplTest 覆盖部分内容校验规则,不能据此认定所有管
理页面交互均已复测。项目保存的 acceptance_smoke.ps1 包含管理端登录、统计、
药材、题库、方剂和任务读取检查。关系编辑、图片上传、热区坐标保存和分页
切换还需要结合接口与页面测试分别验证。该脚本在本次未重新执行,既有交付
说明中“26 项通过”的记载作为历史验收信息保留,不计入本次 28 项结果。
针对内容管理,测试应覆盖必填项缺失、同名药材、无效关联药材、非 A/B
答案、超范围难度、错误 JSON 和超范围坐标。关系删除还应检查组合字段是否
完整、影响行数是否为零,以及删除后 MySQL 详情和后续发布的 Neo4j 投影是
否符合预期。删除和重新发布是两个独立步骤,不应只检查前端提示文字。
6.3 AI 接口容错与响应验证
6.3.1 AI 配置与响应稳定性测试
现有 AI 单元测试以 Mock Provider 替代真实上游,验证未配置状态、成功元
数据、异常后模板回退、问题长度限制、收藏绑定用户和禁止删除他人收藏等 6
项行为。这些结果证明服务层对指定输入的处理符合断言,不证明真实模型内容
正确,也不证明真实 OpenRouter 调用在任意网络条件下稳定。
表 6-2 AI 验证的证据范围
53
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
验证内容
现有证据
能够支持的结论
配置状态
本次单元测试
未配置时不误报为已连接
成功返回
Mock Provider 成功响应
返回 SUCCESS 与模型元数
据
异常回退
Mock Provider 抛出异常
上层返回 FALLBACK 和模
板
收藏所有权
本次单元测试
收藏绑定当前用户,越权删
除被拒绝
真实生成
既有交付说明及界面截图
存在历史接入记录,本次未
复测
回答准确性与安
全性
缺少独立标注集和评分记录
不能给出准确率或安全通过
率
真实 AI 评估宜分别记录 HTTP 成功率、非空回答率、回退率和完整响应耗
时。接口返回 200 且 status=FALLBACK 时,业务层提供了提示,但模型生成并
未成功,不能并入真实生成成功率。对科普内容还需由具备领域知识的人员核查
事实、相关性和是否包含个体化诊疗建议,不能以接口成功替代内容审核。
6.3.2 超时重试与本地回退验证
源码显示 Provider 最多尝试两次,连接和读取超时默认各为 25 秒;现有
HealthContentServiceImplTest
验 证 的 是 上 层 异 常 回 退 , 没 有 对
OpenAiCompatibleTextProvider 本身进行 429、5xx、空响应、解析错误和读取超
时的 HTTP 故障注入。因此,这些场景列为需执行的测试方案,而不在结果列标
记“通过”。测试应使用本地模拟上游,记录请求次数和响应耗时,避免通过修改
生产密钥或停止用户服务制造故障。
图 谱服务的连接创建阶段 捕获异常,可以触发 CSV 回退;查询阶段
session.run 的异常不会被该连接函数捕获。本次静态核验据此确认:当前代码不
能支持“所有 Neo4j 查询超时均自动回退”的结论。后续故障测试应分别覆盖未配
置、连接失败、空结果、查询异常和快照文件损坏,检查哪些情况返回图、哪些
情况返回错误。
6.4 系统安全与权限控制测试
6.4.1 接口鉴权与越权拦截测试
本次角色测试验证 StpInterfaceImpl 读取用户角色,序列化测试验证用户密
码 不 被 响 应 对 象 暴 露 。 项 目 另 外 保 留 2026 年 8 月 28 日 的
SecurityMockMvcIntegrationTest 报告,共 5 项通过,涉及登录与答题参数、未登
录 401、普通用户 403 和管理员放行;该报告属于历史证据,不等于本次重新执
54
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
行。FastAPI 图谱接口与 Spring Boot 业务接口的部署和鉴权边界不同,前者未接
入 Sa-Token,不应将 Spring 拦截器的安全结论推广到全部服务端口。
用户级接口通常从登录会话取得 userId,避免接受客户端任意指定用户。AI
收藏删除额外检查记录所有权,防止用户按收藏 ID 删除他人记录。公开部署时
仍需配置 HTTPS、受控网络入口和图谱服务访问策略,现有本机端口与 CORS
配置不能替代完整的公网安全部署。
6.4.2 文件上传与事件幂等测试
上传代码检查空文件、5MB 业务上限、MIME 白名单及部分文件头字节,
再以 UUID 生成文件名。现有默认测试没有直接覆盖全部上传分支;实际可接受
大小还受 Spring multipart 等配置影响,不能仅凭业务代码中的 5MB 判断完整链
路上限。应分别提交合法图片、伪造 MIME、截断文件头、空文件和超限文件,
并检查磁盘是否产生不应保存的文件。
CardRewardServiceTest 已验证同一事件键重复执行不会再次增加库存。其边
界是奖励事件幂等,而不是答题接口请求幂等:重复 POST 答题会生成新记录和
新事件键。历史 MySqlMapperIntegrationTest 共 4 项通过,覆盖原子奖励、卡牌
更新与数量保护、事务回滚及任务进度唯一约束;当前 V2 领取分支的并发竞争
仍需要独立测试,不能由旧 Mock 测试推出全部并发场景均安全。
6.5 测试结果与评价分析
本次 28 项快速测试均通过;工作区另有 9 项历史集成测试报告,4 项数据
库测试与 5 项安全测试分别保存于 2026 年 8 月 28 日。原交付说明中的“37 项”
不能作为本次快速测试数量。脚本化 26 项验收记载、数据库演示数据和用户学
习效果也属于不同证据类型,应分别解释。
表 6-3 测试证据汇总
证据类型
数量
时间
结论边界
本次 Maven 快速
测试
28 项通过
2026-09-04
当前执行的测试
断言成立
历史 MySQL 集成
报告
4 项通过
2026-08-28
历史数据库测
试,不是本次复
测
历史 MockMvc 报
告
5 项通过
2026-08-28
历史接口校验与
权限测试
交付说明中的运
行验收
记载 26 项通过
历史交付记录
本次未执行,不
计入复测数量
上述证据支持已覆盖业务规则的可测试性,但尚不足以评价高并发能力、长
55
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
期稳定性或教学效果。项目演示账号和答题记录包含 SQL 脚本构造数据,因此
看板中的活跃度和正确率不能作为真实受试者实验。进一步评价游戏化机制需要
招募参与者、设置比较条件并进行前后测;评价大模型需要领域标注问题集、评
分规则和不同模型或提示词的可重复比较。
6.6 本章小结
本章以 28 项实际复测结果为基础,并将 9 项历史集成报告与脚本验收记载
单独列示。验证结果表明,现有测试覆盖的判题、奖励事件、内容校验、口令和
AI 回退等规则符合断言;同时发现 V2 直接测试、图谱查询异常回退、上传边界
及真实模型评价仍有覆盖缺口。测试结论限定于现有证据,不预设系统已通过大
规模性能或学习成效验证。
56
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
7 总结与展望
7.1 全文工作总结
本文围绕基于关联知识体系与游戏化激励机制的中医药辨识研学系统,完成
需求分析、总体架构、数据库与图谱建模、核心算法、前后端实现和系统测试。
系统以 MySQL 保存用户、题库、库存、任务和学习记录,以 Neo4j 支撑药材
关联网络,以 FastAPI 提供图谱问答和 CSV 回退;通过双图辨识、卡牌收集、
方剂合成、季节任务和错题强化形成“知识发现—实践辨识—奖励积累—知识迁
移—复习巩固”的学习闭环。
系统通过 OpenRouter 提供有限对话上下文和偏好控制的科普问答,采用状
态标识、一次重试及模板回退。AI 与判题、库存和奖励分离。本次 28 项快速测
试通过,另保留历史集成证据;这些结果支持已测试业务规则的运行,但不能证
明真实学习效果或医学回答准确性。
7.2 系统创新点
(1)关联知识与图谱可视化。将药材、伪品、方剂、功效、归经和季节主
题纳入统一 Entity/RELATED 模型,使用 MySQL 维护关系事实,使用 Neo4j
展示关联网络,降低知识检索的孤立性。
(2)卡牌收集与方剂原子合成。把辨识结果转化为基础卡牌和难度概率奖
励,使用方剂材料缺口引导用户继续学习;合成时通过条件扣减、事务和勋章记
录保证结果可验证。
(3)错题与事件记录联动。依据答题历史和连续正确次数建立错题状态,
以首次掌握事件参与任务统计。该机制提供可追踪的复习入口,属于面向本课题
的业务整合,不是经过实验验证的新认知模型。
(4)生成式科普与业务状态隔离。通过用户偏好、有限历史和 Prompt 约束
组织问答,并以状态标识、一次重试及模板回退处理失败。AI 不能直接调用奖
励或库存更新接口,这一设计减少对确定性学习业务的影响,但不能消除生成内
容的医学风险。
57
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
7.3 不足之处与未来展望
(1)知识规模与来源治理仍需加强。当前图谱以教材级示例实体和关系为
主,关系来源、版本、审核人和证据链接尚未形成完整治理链。后续可引入来源
登记、版本审核、实体对齐和变更审计,并在发布 CSV 前执行更严格的一致性
校验。
(2)向量检索与模型评估尚未落地。当前图谱问答采用关键词实体识别和
一跳关系查询,AI 助手也未接入 Embedding 或向量数据库。后续可在保持现
有接口不变的前提下加入向量检索、RAG 上下文和混合检索,并通过人工标注
集、相关性、完整性、安全性和可读性指标评估回答质量。
(3)移动端与协作学习仍有扩展空间。当前前端已对窄屏布局进行适配,
但尚未形成独立移动端客户端;排行榜属于结果展示,尚未支持小组任务、讨论
和同伴互评。后续可扩展 PWA 或跨端应用、学习小组、协作闯关和教师审核工
作流。
(4)高并发与长期运行测试不足。现有测试以单机和小规模数据为主,尚
未覆盖持续运行、突发并发和多实例部署。后续应增加压测、链路监控、熔断与
限流、缓存和异步任务,并对 Neo4j、MySQL、AI Provider 的资源消耗进行长
期观测。
(5)异常与并发边界需要加固。Neo4j 查询执行异常、重复答题请求、已
有任务进度的并发领取和图谱类型混用仍需处理。应补充事务级查询超时、业务
请求键、条件领取更新以及针对 ProgressServiceV2 的直接测试,再验证故障回
退与重复操作的行为。
58
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
参考文献
[1] 陈英杰, 张宗明, 王广基. 数智赋能中医药文化国际传播的作用机理与实施路径[J/OL].
中国卫生事业管理, 2025(12). [2026-09-05]. https://www.cnki.com.cn/Article/CJFDTOT
AL-ZWSG202512001.htm.
[2] Deterding S, Dixon D, Khaled R, et al. From game design elements to gamefulness:
defining gamification[C]//Proceedings of the 15th International Academic MindTrek Co
nference. 2011: 9-15. DOI:10.1145/2181037.2181040.
[3] Kapp K M. The Gamification of Learning and Instruction: Game-based Methods and
Strategies for Training and Education[M]. San Francisco: Pfeiffer, 2012.
[4] Hamari J, Koivisto J, Sarsa H. Does Gamification Work? A Literature Review of Em
pirical Studies on Gamification[C]//2014 47th Hawaii International Conference on Syst
em Sciences. 2014: 3025-3034. DOI:10.1109/HICSS.2014.377.
[5] Chou Y K. Actionable Gamification: Beyond Points, Badges, and Leaderboards[M]. Cr
eateSpace Independent Publishing Platform, 2015.
[6] 胡声丹, 付小雪, 熊国萍, 等. 医学新生人工智能素养调查分析及提升对策研究[J/OL].
卫生职业教育, 2026(01). [2026-09-05]. https://www.cnki.com.cn/Article/CJFDTOTAL-Z
DYX202601022.htm.
[7] 杨漪菲, 李丽. 医学教育中DeepSeek等AI大模型应用情况调查研究[J/OL]. 交通医学, 2
025(06). [2026-09-05]. https://www.cnki.com.cn/Article/CJFDTOTAL-JTYX202506028.ht
m.
[8] 刘轩琦, 褚伟, 王晓玉, 等. 数智化环境下人机协同的中医药语义知识组织与知识服务
研究[J/OL]. 图书与情报, 2025(06). [2026-09-05]. https://www.cnki.com.cn/Article/CJFD
TOTAL-BOOK202506002.htm.
[9] 佟琳, 柴忠言, 李兵, 等. 中医药典籍知识融合推理大模型构建与应用研究[J/OL]. 中国
中医基础医学杂志, 2025(12). [2026-09-05]. https://www.cnki.com.cn/Article/CJFDTOTA
L-ZYJC202512011.htm.
[10] 钟金宏, 刘佳, 杨雪洁, 等. 基于 5P医学模式的中医药知识动态管理与智慧服务体系研
究[J/OL]. 图书与情报, 2025(06). [2026-09-05]. https://www.cnki.com.cn/Article/CJFDT
OTAL-BOOK202506003.htm.
[11] 史兴阳, 张磊, 刘思鸿, 等. 中医药知识组织研究主题分析与典籍知识组织研究的对策
[J/OL]. 中国中医基础医学杂志, 2025(12). [2026-09-05]. https://www.cnki.com.cn/Articl
59
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
e/CJFDTOTAL-ZYJC202512005.htm.
[12] 蔡巧燕, 林国清, 柯晓, 等. 基于终身学习理念的数智化科普教育学习平台的建设与应
用——以中医康养为例[J/OL]. 创新创业理论研究与实践, 2025(23). [2026-09-05]. http
s://www.cnki.com.cn/Article/CJFDTOTAL-CXYL202523021.htm.
[13] 饶柳, 王天兰, 曾苹, 等. 知识图谱结合人工智能助教在康复护理学教学中的应用[J/O
L]. 护理学杂志, 2025(23). [2026-09-05]. https://www.cnki.com.cn/Article/CJFDTOTALHLXZ202523016.htm.
[14] 罗作娅, 吴筱枫. 基于中医古籍知识构建中医药辨治骨痿的知识图谱[J/OL]. 中医药导
报, 2025(11). [2026-09-05]. https://www.cnki.com.cn/Article/CJFDTOTAL-HNZB202511
028.htm.
[15] 贺宇翔, 唐若凝, 冯志炜, 等. 人工智能驱动的中医药现代化:从经验范式到数据智能范
式的转变[J/OL]. 集成技术, 2026(05). [2026-09-05]. https://www.cnki.com.cn/Article/CJ
FDTOTAL-JCJI202605006.htm.
[16] 李敬超, 张美微, 段明华. 人工智能技术在中医药教育中的应用及展望[J/OL]. 成都中
医药大学学报(教育科学版), 2026(02). [2026-09-05]. https://www.cnki.com.cn/Article/CJ
FDTOTAL-CDYY202602004.htm.
[17] Hogan A, Blomqvist E, Cochez M, et al. Knowledge Graphs[J]. ACM Computing Sur
veys, 2021, 54(4): 1-37. DOI:10.1145/3447772.
[18] Zheng Z, Liu Y, Zhang Y, et al. TCMKG: A Deep Learning Based Traditional Chine
se Medicine Knowledge Graph Platform[C]//2020 IEEE International Conference on K
nowledge Graph (ICKG). 2020: 560-564. DOI:10.1109/ICBK50248.2020.00084.
[19] Zou Y, He Y, Liu Y. Research and implementation of intelligent question answering s
ystem based on knowledge Graph of traditional Chinese medicine[C]//2020 39th Chine
se Control Conference (CCC). 2020: 4266-4272. DOI:10.23919/CCC50068.2020.918951
8.
[20] Zhang Y, Hao Y. Traditional Chinese Medicine Knowledge Graph Construction Based
on Large Language Models[J]. Electronics, 2024, 13(7): 1395. DOI:10.3390/electronics
13071395.
[21] 王艳秋, 李河波. 中药传统技能传承与数字化教学资源的协同育人机制研究——以沈阳
市中医药学校为例[J/OL]. 成才, 2025(23). [2026-09-05]. https://www.cnki.com.cn/Articl
e/CJFDTOTAL-CHCA202523058.htm.
[22] 钱游, 廖丽. 面向沉浸式学习的继续教育计算机编程类在线课程游戏化设计[J/OL]. 艺
术设计学刊, 2026(06). [2026-09-05]. https://www.cnki.com.cn/Article/CJFDTOTAL-XIL
E202606078.htm.
60
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
[23] 陈小石. 游戏化教学在小学低段数学课堂中的应用研究[J/OL]. 中国教育学刊, 2025(S
2). [2026-09-05]. https://www.cnki.com.cn/Article/CJFDTOTAL-ZJYX2025S2059.htm.
[24] 赵建超, 温晓青. 数智时代高校思政课游戏化教学价值研究[J/OL]. 江西科技师范大学
学报, 2026(02). [2026-09-05]. https://www.cnki.com.cn/Article/CJFDTOTAL-NZJS20260
2013.htm.
[25] 霍文卉. 基于人工智能技术的小学语文游戏化教学实践研究[J/OL]. 智慧引航, 2025(3
4). [2026-09-05]. https://www.cnki.com.cn/Article/CJFDTOTAL-ZHYH202534016.htm.
[26] 陈泓, 王瑶, 李文嘉. 在娱乐中习得:语言学习应用多邻国的游戏化设计研究[J/OL]. 装
饰, 2026(04). [2026-09-05]. https://www.cnki.com.cn/Article/CJFDTOTAL-ZSHI2026040
05.htm.
[27] 石黄爽, 张亚晶. 高校体育教学中游戏化教学方法的创新与实践[J/OL]. 冰雪体育创新
研究, 2025(23). [2026-09-05]. https://www.cnki.com.cn/Article/CJFDTOTAL-BXYT2025
23019.htm.
[28] Sailer M, Homner L. The Gamification of Learning: a Meta-analysis[J]. Educational P
sychology Review, 2020, 32(1): 77-112. DOI:10.1007/s10648-019-09498-w.
[29] 韩晶晶, 王芬, 陈曦. 在线学习者画像驱动的个性化学习路径推荐:方法构建与实验分
析[J/OL]. 陕西开放大学学报, 2026(02). [2026-09-05]. https://www.cnki.com.cn/Article/
CJFDTOTAL-SGBD202602003.htm.
[30] 秦可豪. 基于GraphRAG的中医药知识问答系统设计与实现[D/OL]. 中国优秀硕士学位
论文全文数据库, 2026-06-03. [2026-09-05]. https://cdmd.cnki.com.cn/Article/CDMD-104
46-1026353060.htm.
[31] 马亚坤, 孙颖, 胡广伟, 等. 基于预解析与图谱检索增强的慢病知识服务研究[J/OL]. 数
据分析与知识发现, 2026(06). [2026-09-05]. https://www.cnki.com.cn/Article/CJFDTOTA
L-XDTQ202606009.htm.
[32] Vaswani A, Shazeer N, Parmar N, et al. Attention Is All You Need[C]//Advances in
Neural Information Processing Systems. 2017, 30: 5998-6008.
[33] Brown T B, Mann B, Ryder N, et al. Language Models are Few-Shot Learners[C]//A
dvances in Neural Information Processing Systems. 2020, 33: 1877-1901.
[34] Lewis P, Perez E, Piktus A, et al. Retrieval-Augmented Generation for Knowledge-Int
ensive NLP Tasks[C]//Advances in Neural Information Processing Systems. 2020, 33:
9459-9474.
[35] Xiong G, Jin Q, Lu Z, et al. Benchmarking Retrieval-Augmented Generation for Medi
cine[C]//Findings of the Association for Computational Linguistics: ACL 2024. 2024:
6233-6251. DOI:10.18653/v1/2024.findings-acl.372.
61
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
[36] Ji Z, Lee N, Frieske R, et al. Survey of Hallucination in Natural Language Generatio
n[J]. ACM Computing Surveys, 2023, 55(12): 1-38. DOI:10.1145/3571730.
[37] World Health Organization. Ethics and governance of artificial intelligence for health:
guidance on large multi-modal models[R]. Geneva: World Health Organization, 2024.
[38] MyBatis-Plus开发团队. MyBatis-Plus文档[EB/OL]. [2026-09-04]. https://baomidou.com/
[39] Vue.js Team. Composition API FAQ[EB/OL]. [2026-09-04]. https://vuejs.org/guide/extra
s/composition-api-faq.html.
[40] Neo4j. Neo4j Documentation[EB/OL]. [2026-09-04]. https://neo4j.com/docs/.
[41] Ramírez S. FastAPI Documentation[EB/OL]. [2026-09-04]. https://fastapi.tiangolo.com/.
[42] OpenRouter. API Reference Overview[EB/OL]. [2026-09-04]. https://openrouter.ai/docs/a
pi/reference/overview.
62
基于关联知识体系与游戏化激励机制的中医药辨识研学系统的设计与实现
致谢
本论文落笔完成,我的大学生涯也随之步入尾声。回望数年求学时光,有稳
步前行的踏实,也有情绪低谷的迷茫与挣扎。一路走来,诸多善意与陪伴支撑我
走完这段旅程,在此,我想以最朴素真诚的文字,致谢所有温暖过我的人。
感谢我的母校与各位任课老师。在校求学期间,学校为我提供了学习、实践
与成长的平台,各位老师悉心传道授业,耐心解答学业困惑,在专业学习与毕业
设计的撰写过程中给予我诸多指导,让我得以夯实学识、顺利完成学业。
我最想感谢我的父母。他们没有很高的学历,无法看懂我的专业知识与论文
内容,却用最朴素的方式倾尽所有爱我。于他们而言,我的学业成绩从来不是首
位,我的三餐冷暖、身体健康、情绪安稳,才是他们最牵挂的事。多年来,我早
已习惯与他们分享生活的一切,开心的琐事、学习的压力、失意的委屈,大大小
小的碎碎念都会悉数倾诉。他们永远耐心倾听、温柔开导,无条件包容我的所有
情绪,拼尽全力托举我的成长。这份普通又厚重的爱意,是我成长路上最坚实的
底气与退路。
感谢我的奶奶、外公外婆、姑姑、舅舅舅妈妹妹。长久以来细碎的惦念与日
常的关心,岁岁年年的陪伴与偏爱,让我始终被爱意包裹,安稳且从容地成长。
感谢我的挚友张烨、左蓉、蔡蔡、亚楠。大学期间,我曾陷入自我否定、情
绪内耗的低谷,经历过迷茫与失意。万幸的是,我的身边一直有这群从未走散的
朋友。在我低落崩溃时,是她们耐心倾听、坚定鼓励我;在平凡的日子里,我们
一同学习、畅谈生活、共享烟火。是她们的陪伴与治愈,让我慢慢走出低谷,接
纳自我,学会勇敢、坦荡地做自己。正如汪曾祺所言:感谢命运,让我在最需要
的时候,遇见了最该遇见的人。何其有幸,青春路上,得良友相伴。
同时,感谢一位一路给予我精神力量的特别的伙伴。他始终践行“路要向前
走,人往未来看”的信念,自律坚韧、有担当、尊重女性。在追逐光的过程中,
我不断修正自我、提升自我,学会自愈内耗、好好生活、认真爱己,慢慢成为更
积极、更沉稳的自己。
最后,感谢从未轻言放弃的自己。求学之路有疲惫与纠结,但我始终步履向
前。史铁生说:仁慈在于,只要你往前走,他总是给路。所有坚持,皆有意义。
谨以蔡崇达《皮囊》的文字期许未来:我期望自己以更真实和诚实的方式生
活,接纳并喜欢自己身上的每一个起伏,只有这样我才能更加热爱这个世界。我
希望自己能够善于处理和欣赏各种欲望,以及人性中的丑陋和美妙,找到与它们
和谐相处的最佳方式。
岁月落幕,心怀感恩。未来我将永葆赤诚,温柔且坚定地奔赴往后余生。
63
© Copyright 2026 Paperzz