MediMind项目开发文档——基于KG-LLM融合的AI诊断辅助系统
MediMind 项目开发文档
MediMind 是一个基于 KG-LLM 融合的AI诊断辅助系统,它面向医生群体且实现了与上级的 HIS 系统接口对接与 Canal 数据同步。与传统 HIS 不同的是,MediMind 在具有医生站信息管理系统的同时也拥有医生即时通讯与知识图谱辅助诊断用药推荐的功能模块。
在与上级HIS的兼容替代方面,MediMind 采用了消息同步的方式,实现了与 HIS 的数据同步。这样,医生可以在MediMind中完成所有的信息管理、即时通讯和辅助诊断等工作,而无需再使用传统的HIS系统。这样做有助于提高医生的工作效率,减少医生在不同系统间来回切换的时间和精力浪费。
在知识图谱辅助技术方面,MediMind 通过NLP技术构建了一个医学知识图谱,在医生诊断时提供了可靠的辅助决策。通过对大量医疗文献、病例和用药数据的学习,MediMind 能够根据患者的病情和病史,为医生提供精准的用药建议,帮助医生更快、更准确地诊断和治疗疾病。
在医生团队通讯协作方面,MediMind 采用 WebSocket 通信技术,为用户提供医护人员之间的在线即时通讯和日程安排管理等功能,提高交流频率与沟通效率,提升医生协作的效率。
总之,MediMind 是一个与上级 HIS 系统兼容的、拥有 KG 辅助诊断用药推荐和 KG-LLM 医疗问答功能的医疗辅助系统。它将为医生提供更高效、更精准、更便捷的医疗服务,为患者提供更好的医疗体验。
一、前置问题
Ⅰ、背景分析
随着医疗技术的不断进步和医学知识的迅速增长,医生在进行疾病诊断和治疗时面临着越来越大的挑战。同时,传统的医疗信息系统存在信息不够集中、数据不够精准、交互性不够友好等问题,无法满足医生的需求。因此,我们计划开发一个基于AI知识图谱的诊断辅助系统,为医生提供更加全面、精准、实时的病例管理、诊断和治疗辅助功能。
Ⅱ、可行性分析
本项目的可行性分析主要包括技术可行性、经济可行性和市场可行性三个方面。
-
技术可行性:技术方面,MediMind 所依赖的技术已经非常成熟,并且在医疗AI领域有着广泛的应用。例如,自然语言处理技术、深度学习技术和知识图谱技术等都已经被证明在医疗领域的可行性和有效性。
-
经济可行性:本项目需要一定的资金投入用于研发和推广,但由于医疗领域的应用需求和人工智能技术的发展趋势,本项目具有良好的市场前景和商业价值,因此具备经济可行性。
-
市场可行性:由于医疗行业对于药品管理和患者用药的要求越来越高,同时人工智能技术的应用也越来越普及,因此本项目具有较好的市场前景和商业价值。
Ⅲ、产品目标
MediMind 旨在解决当前医疗系统中存在的问题,为医生提供更高效、更准确的诊断辅助和用药推荐。具体来说,MediMind 的产品目标如下
-
实现全面的患者信息管理,包括患者基本信息、病历记录、检查结果等,以便医生能够全面、准确地了解患者的健康状况。
-
实现与上级HIS系统的消息同步,确保 MediMind 上的患者信息和医生的常规工作流程得到无缝衔接。
-
建立基于知识图谱的AI辅助诊断系统,通过对患者症状、病历等信息进行分析,为医生提供准确的诊断建议,提高诊断准确率。
-
建立用药推荐系统,通过对患者病历、药物相关知识等信息进行分析,为医生提供个性化的用药建议,确保患者用药安全。
-
建立医生即时通讯模块,方便医生之间的交流与沟通,提高诊疗效率。
Ⅳ、技术选型与开源组件
后端服务器开发框架采用 SpringBoot 自不必说,我选用了 SpringCloud Alibaba 技术栈作为微服务架构开发的基础框架。前端开发使用 Vue.js 技术栈。
- JDK版本: 11
- 项目构建管理工具: Apache Maven
- 服务器: Apache Tomcat,Nginx
- 开发框架: SpringBoot
- 微服务框架: SpringCloud(Fegin,Gateway),SpringCloud Alibaba(Nacos)
- 前端框架: vue2
- 组件库: Element UI
- 数据存储: MySql,Redis,Neo4j,HDFS
- ORM框架: MyBatis,Mybatis Plus
- 数据库连接池: Alibaba Druid,Commons Pool2
- 认证鉴权: Sa-Token
- 消息队列: RabbitMQ
- 接口文档工具: Swagger2
- 性能测试: Jmeter
- 业务数据采集: Flume,DataX,RabbitMQ,Canal
- 数据计算: Hive,Spark
- 任务调度: Airflow
二、需求分析
本项目的主要目标是,通过整合和利用医学知识图谱和自然语言处理技术,提高医生对病例的诊断和治疗水平,帮助医生更快、更准确地做出诊断和治疗计划,减轻医生的工作负担,提高医疗水平。
MediMind 主要面向医生群体,包括临床医生、医学研究人员等。其主要功能包括:
-
病历管理:医生可以在系统中输入和管理患者的病历信息,包括基本信息、诊断结果、检查报告、处方等。
-
即时通讯与协作:医生可以通过系统的即时通讯功能,与同事进行交流和沟通,快速获取信息和反馈。
-
知识图谱辅助诊断:利用医学知识图谱和自然语言处理技术,为医生提供准确的诊断和治疗建议,帮助医生更快、更准确地做出决策。
-
用药推荐:根据患者的病情、年龄、性别等因素,为医生推荐最合适的用药方案,减轻医生的工作负担。
在性能方面,MediMind 需要能够保证系统的稳定性和可靠性。为了确保系统具有良好的性能,我们采取了以下措施:
-
缓存技术:使用 Redis NOSQL数据库,将频繁访问的数据存储在内存中,以提高系统的响应速度和并发处理能力。
-
负载均衡:采用 Nacos 微服务负载均衡技术,将用户请求均衡分配到多个服务器上,以提高系统的并发处理能力和可扩展性。
-
数据库优化:采用性能优化技术对数据库进行优化,包括使用索引、分区、压缩等技术,以提高数据访问速度和系统的并发处理能力。
-
监控和调优:使用监控工具对系统进行实时监控,及时发现和解决系统性能问题,保证系统的稳定性和性能。
综上,我们采用了多种技术手段,从算法、硬件、软件等方面对系统进行优化,以保证系统的高性能和稳定性。
三、概要设计
Ⅰ、主要模块
MediMind 采用 SpringCloud微服务架构并包含了以下主要模块:
-
门诊服务与管理模块:用于管理医生和患者用户,包括用户的注册、登录、个人信息维护、管理医生诊断的患者病例信息,包括病历记录、诊断结果、用药方案等;并使用消息同步模块实现与医院上级HIS系统进行消息同步,确保 MediMind 系统中的患者信息与 HIS 系统中的信息一致。
-
辅助诊断与用药推荐模块:基于知识图谱和自然语言处理技术,对医生进行辅助诊断,包括病情分析、诊断推荐等;并根据病情、患者个体情况等因素,结合药物的临床应用经验和研究成果,给出最佳的用药方案。
-
医生协作与通讯模块:用于医生之间进行即时通讯,包括文字、语音、图片等形式;提供团队管理功能,可以创建和管理医生和护士的团队,并支持团队成员之间的协作和沟通;提供医生的日程安排管理,支持创建、修改、删除和分享日程,并支持提醒功能。
Ⅱ、层次结构
MediMind 为前后端分离项目,其层次结构如下:
-
用户界面层:提供给用户使用的界面,包括登录、注册、病例管理、即时通讯、知识图谱等模块。
-
应用服务层:提供给用户使用的应用服务,包括辅助诊断、用药推荐、数据统计分析等模块。
-
系统服务层:提供系统基础服务,包括消息同步、数据库管理、权限管理等模块。
模块之间的调用关系如下:
-
用户界面层调用应用服务层提供的应用服务,如辅助诊断、用药推荐等。
-
应用服务层调用系统服务层提供的基础服务,如消息同步、数据库管理等。
-
系统服务层与外部HIS系统进行消息同步。
-
用户界面层、应用服务层和系统服务层之间通过接口进行数据交互和传输。
人机界面设计主要考虑用户的使用习惯和使用体验,以简洁、直观、易操作为原则。主要功能模块的界面如:
Ⅲ、关键DFD
-
医生界面向诊断信息汇总模块提交诊断信息,该模块将诊断信息汇总并向知识图谱模块和用药推荐模块请求辅助信息。
-
知识图谱模块使用患者病史和相关医学知识,返回可能的疾病和治疗方案。
-
用药推荐模块使用患者的病史和药品知识,返回可能的药品推荐。
-
最终,所有诊断和推荐信息将被存储在数据库中,并通过HIS上报接口同步到上级系统。
四、详细设计
Ⅰ、数据库设计
详见下方E-R图:
Ⅱ、关键技术
MediMind 的关键技术主要涉及以下方面:
前后端分离与微服务架构
MediMind基于 Vue 和 Spring Boot 框架,实现了前后端分离的架构,将前端和后端的开发分离开来,提高了代码的可维护性和扩展性。同时,采用了 WebPackage 和 Maven 的方式打包,简化了软件的部署和安装流程。
同时,我们选择使用 Spring Cloud 作为微服务框架。这包括了服务注册与发现中心、配置中心、服务远程调用、服务熔断、网关等一整套微服务技术栈。通过使用Spring Cloud微服务框架,我们可以实现系统的高可用、高扩展性和高性能,并且方便地实现服务的管理和维护。
知识图谱诊断推荐算法
本项目利用 neo4j 构建医学知识图谱,从而实现推荐可能的疾病和治疗方案。其中,知识图谱部分采用的是基于本体论的图谱模型,通过建立概念之间的关联,实现了对医学知识的自动化表示和推理。
构建过程详见GitHub子项目:MediMind-KG
KG-LLM融合实践
知识图谱以结构化的形式描述客观世界中概念、实体及其关系,提供了一种更好地组织、管理和理解互联网海量信息的能力;
而大模型则基于广泛的训练数据能够处理复杂的下游任务,并且具备涌现能力、通用能力。
两者的优劣势对比如下:
本项目采用了知识图谱(KG)与大型语言模型(LLM)的融合方法(LLM on KG)的技术路径,在LLM提升KG传统NLP问答系统灵活性和通用性的同时,KG的结构化知识也为LLM提供了准确的参考,使其在生成文本时能够更加客观和准确。
Canal数据同步
本项目采用的是 Canal 数据同步技术,通过监控 MySQL 数据库的 Binlog 日志,实现了数据的实时同步。
具体来说,Canal 将 Binlog 解析成特定的数据结构,通过类似于发布-订阅模式的方式,将数据同步到目标端。这种算法可以有效地解决数据同步的延迟和不一致性等问题。
大数据离线数仓
由于项目已使用 RabbitMQ 和 Canal 分别作为消息队列和数据增量同步工具,因而我们决定将上述中间件直接整合至本项目的业务数据采集平台中。
最终确定的技术方案如下图:
- 问诊系统每日产生的新数据通过 DataX 脚本全量同步至 HFDS;
- 使用 Canal 将数据库变化的 slave 发送到 rabbitmq,并由 Flume 进行日志解析增量同步至 HDFS;
- 使用 AirFlow 调度器定时进行 Hive 各层的数据同步脚本调度。
通过上述技术流程,我们在 ADS 层实现了诊断人次、总金额、疾控等多方面数据指标的统计分析。
Ⅲ、界面设计
项目实际界面如下图:
五、测试报告
Ⅰ、集成测试
我们进行了多次单元与集成测试来验证 MediMind 的兼容性与可靠性,覆盖了主要模块的多数功能。
在测试过程中,我们发现并修复了诸多错误并书写了对应的缺陷文档,例如:
缺陷报告 |
---|
缺陷名称 |
严重的错误:智能诊断助手提问疾病的治疗方式发生错误 |
缺陷描述 |
在向智能诊断助手发送“苍耳中毒如何治疗?”时,aidiagnosis模块没有返回任何诊断结果。控制台打印了一个java.lang.String cannot be cast to [Ljava.lang.String;]错误。 |
复现步骤 |
1. 登录MediMind系统 |
2. 进入病例管理模块 |
3. 打开智能助手 |
4. 输入“*该如何治疗?” |
5. 点击“咨询”按钮 |
预期结果 |
应该能够看到疾病相关的治疗建议结果,并且能够正确显示在页面上。 |
实际结果 |
没有任何诊断结果返回,控制台打印了一个 ClassCastException 错误。 |
影响程度 |
严重,无法进行治疗方式辅助推荐,可能会对系统造成影响。 |
缺陷分类 |
功能性缺陷 |
优先级 |
高 |
附加信息 |
2023年4月28日修复完成。异常原因在于 AnswerSearcher.java 的answerPrettify() 方法中的 (String) answer.get("m.cure_way") 期望返回一个 String 类型数据;实际上返回了一个 String[] 数组对象,这导致了问题的发生。 |
Ⅱ、性能测试
我们使用Jmeter测试了服务器单机性能;对三个http请求模块设置500个线程组循环执行20次,最终性能测试在43s内完成。响应时间情况如图:
其中:
- 测试总请求数 = 500 * 20 * 3 = 30000
- QPS = 30000 / 43s = 697.674
- 平均响应时间 = (195.09ms + 499.58ms + 69.66ms) / 3 = 254.777ms
可以得出,MediMind 具有快速的响应速度,平均响应时间小于300ms。
六、部署文档
Ⅰ、环境要求
- 操作系统:推荐Linux发行版
- Git: 官方稳定版
- Java: 推荐JDK 11及以上
- Maven: 推荐3.8.5及以上
- python: 推荐3.9
- Docker及其Compose: 官方稳定版
Ⅱ、步骤说明
- 使用git从GitHub拉取私有仓库(Token方式)项目;
①主项目
git clone http://tokens-name:tokens@github.com/TfiyuenLau/MediMind-AI-aided-diagnosis-system-based-on-KG.git
②医学KG构建项目
git clone http://tokens-name:tokens@github.com/TfiyuenLau/MediMind-KG.git
- 进入主项目目录,运行
docker-compose
一键打包部署;
docker-compose up
-
在 Docker 容器 MySql 数据库中创建
medi_mind
数据库并运行medi_mind_backup.sql
的SQL资源文件以导入项目的 MySql 数据库表; -
安装
requirements.txt
中的依赖,运行MediMind-KG项目下的build_medical_graph.py
脚本构建Neo4j医学知识图谱;
pip install -r requirements.txt
python3 build_medical_graph.py
- 访问
http://localhost:80/login
登录页,输入账号zhangsan
密码password
进入系统。
七、项目总结
Ⅰ、未来展望
在未来,本项目组将继续改进和扩展MediMind项目,以更好地满足医生和患者的需求。我们计划在以下几个方面进行发展:
- 不断优化算法和模型:本项目组将持续改进知识图谱和用药推荐模块的算法和模型,以提高诊断和用药推荐的准确性和可靠性。
- 引入更多医学知识:本项目组将不断扩充知识图谱的医学知识库,包括疾病、治疗方案、药品等,以更好地支持医生的决策。
- 提升用户界面体验:本项目组将持续优化用户界面,提供更友好、简洁的界面,方便医生和患者的使用。
- 拓展应用场景:本项目组将考虑将 MediMind 项目应用于更多的临床场景,如急诊诊断、患者监护等,以提供更全面的医疗服务。
Ⅱ、总结
MediMind 项目是一款旨在为医生和患者提供智能化辅助诊断和治疗方案的医疗人工智能产品。在开发过程中,我们经历了许多挑战和收获,总结如下:
- 项目协调和任务分解:在项目初期,我们进行了详细的项目规划和任务分解,明确了每个成员的职责和任务。同时,我们及时沟通协调项目进度并解决问题,这一流程帮助我们保证了项目的进度和质量。
- 克服的困难:在项目开发过程中,我们面临了技术上的挑战和困难。其中包括数据清洗和预处理、模型选择和优化、系统部署和优化等问题。我们通过与医疗专家交流和不断实践,成功克服了这些问题,使项目的效果得到了显著提升。
- 水平提升:通过本次项目,我们不仅掌握了医疗人工智能的技术和应用,还锻炼了团队合作、项目管理和沟通协调的能力。我们还通过参加竞赛和学术交流,不断提高了自己的水平。
总之,MediMind项目是一次挑战和收获并存的经历,我们将继续努力,将产品做到更好,为医疗行业的发展做出贡献。
拓展阅读
Ⅰ、demo(弃用):MediMind-登录页
Ⅱ、GitHub(弃用):MediMind——基于KG-LLM融合的AI诊断辅助系统
Ⅲ、参考文献:
[1]程明,左锋,余芳强,彭阳.管理视角下的智慧医院系统研究与初步实践[J].中国医院管理,2021,41(11):69-72+96.
[2]王慧.国内医院信息管理系统的应用现状及发展趋势[J].电脑迷,2018(02):229.
[3]包宇,黄文娟.论医院信息管理系统的现状及发展[J].中西医结合心血管病电子杂志,2017,5(29):193.DOI:10.16282/j.cnki.cn11-9336/r.2017.29.155.
[4]沈希宇,蔡肖红,曹慧.融合医疗知识图谱的推荐系统研究进展[J/OL].计算机工程与应用:1-15[2023-05-04].http://kns.cnki.net/kcms/detail/11.2127.tp.20230328.1744.027.html
[5][A tutorial and implement of disease centered Medical knowledge graph and qa system based on it](https://github.com/liuhuanyong/QASystemOnMedicalKG)
[6][知识图谱与大模型融合实践研究报告——中国电子技术标准化研究院](https://zhuanlan.zhihu.com/p/649240843)
本文来自博客园,作者:TfiyuenLau,转载请注明原文链接:https://www.cnblogs.com/tfiyuenlau/articles/17343623.html