医疗诊断Agent辅助:AI医生的现实与未来

张开发
2026/4/9 2:44:58 15 分钟阅读

分享文章

医疗诊断Agent辅助:AI医生的现实与未来
医疗诊断Agent辅助AI医生的现实与未来一、引言1.1 钩子深夜急诊室的AI遐想凌晨三点某市三甲医院急诊科的走廊依旧挤满了人——一位捂着胸口面色苍白的中年男性刚被推进抢救室分诊台前的实习医生对着20多份病历攥紧了笔排队区还有一位哮喘发作的小女孩哭声微弱而儿科急诊的只有一位规培医生当值。“要是有个能瞬间看懂CT、能快速写初诊方案、甚至能和我一起分析风险的AI助手就好了……”实习医生小李一边核对一位老人的血糖数值一边在心里默默祈祷。你是否也曾在医院见过这样的场景是否也曾因排队4小时、看病5分钟而对医疗资源的紧张感到无奈根据《2023年中国卫生健康统计年鉴》我国每千人口执业助理医师仅为3.63人每千人口注册护士仅为4.13人——而在全科、儿科、精神科等核心缺口科室这个数字甚至不足2人/千人口。更令人担忧的是基层医疗机构的医生专业能力参差不齐2022年国家卫健委的调研数据显示全国乡镇卫生院中本科及以上学历的医生占比仅为17.8%初级职称及以下的占比高达72.3%。当“看病难、看病贵、看不好基层病”成为全球医疗系统的共同痛点时医疗诊断Agent辅助系统以下简称“诊断Agent”的出现仿佛给这个充满焦虑的行业打开了一扇新的窗户——它能不能代替疲惫的医生处理重复性的分诊、阅片工作能不能让基层医生拥有“三甲医院专家的水平”能不能真正成为“24小时在线的AI医生”1.2 定义问题/阐述背景从“AI辅助工具”到“自主诊断Agent”在正式讨论诊断Agent之前我们必须先厘清几个容易混淆的概念医学影像AI/文本AI工具这是目前市场上最常见的医疗AI产品比如用于肺癌筛查的CT辅助诊断系统、用于电子病历结构化的NLP工具——它们功能单一、被动响应、缺乏自主决策能力只能作为医生的“辅助工具”不能独立完成诊断流程。医疗大模型LLM for Medicine比如ChatGPT医疗版、文心一言医疗版、讯飞星火医疗版——它们具备多模态理解能力、能生成自然语言的医疗建议、但仍存在“幻觉”严重、缺乏可解释性、合规性存疑等问题目前主要用于医学科普、健康咨询、病历撰写辅助不能直接用于临床诊断。医疗诊断Agent这是本文要讨论的核心——它是一个基于大模型、结合多模态感知影像、语音、文本、体征数据、具备自主决策能力能主动问诊、主动调用工具、主动验证假设、主动生成诊断方案、能与医生/患者进行多轮自然交互、符合医疗合规要求的智能体。简单来说它不是医生的“工具”而是医生的“初级合伙人”——甚至在未来的某个时刻它可能成为基层诊所的“独立全科医生”。为什么诊断Agent如此重要除了前文提到的医疗资源紧张问题还有以下几个关键原因医疗数据的爆炸式增长根据IDC的预测到2025年全球医疗数据总量将达到175ZB——其中包括电子病历、医学影像、基因测序数据、可穿戴设备数据等海量非结构化数据。人类医生根本无法在短时间内消化和利用这些数据而诊断Agent可以通过深度学习和大模型技术快速从这些数据中提取有价值的信息辅助医生做出更准确的诊断。医疗错误的高发生率根据《英国医学期刊BMJ》2016年的研究报告医疗错误已经成为美国第三大死因仅次于心脏病和癌症——每年约有25万人死于医疗错误。而这些医疗错误中约30%是由于诊断错误导致的比如漏诊、误诊、延迟诊断。诊断Agent可以通过多轮验证、知识图谱匹配、大数据统计分析等方式降低诊断错误的发生率。个性化医疗的需求增长随着基因测序技术的普及和可穿戴设备的发展人们对“个性化医疗”的需求越来越高——每个患者的基因、生活习惯、体征数据都不同因此诊断和治疗方案也应该因人而异。人类医生由于时间和精力的限制很难为每个患者制定真正个性化的方案而诊断Agent可以通过整合患者的多维度数据快速生成个性化的诊断和治疗建议。1.3 亮明观点/文章目标从0到1理解诊断Agent的技术架构、实战案例与未来趋势作为一位资深的软件工程师和技术博主我在过去一年里深入调研了国内外近50个医疗诊断Agent项目包括OpenAI的GPT-4o Medical、谷歌的Med-PaLM M、阿里的通义千问医疗Agent、腾讯的觅影诊断Agent等也参与了一个小型的基层医疗诊断Agent项目的开发。在这篇文章中我将带你从0到1理解医疗诊断Agent的核心概念、技术架构、实战案例同时也会探讨它目前面临的挑战、最佳实践以及未来的发展趋势。读完这篇文章你将能够清晰地区分医学影像AI工具、医疗大模型和医疗诊断Agent理解医疗诊断Agent的核心技术组成大模型基座、知识图谱、工具链、多模态感知、交互界面、合规系统了解医疗诊断Agent在基层全科、专科辅助、急诊分诊等场景的实际应用掌握医疗诊断Agent开发的最佳实践和常见陷阱对医疗诊断Agent的未来发展趋势有一个客观的判断。为了让这篇文章更通俗易懂我会尽量避免使用过于复杂的技术术语同时也会结合具体的代码示例、架构图、流程图来进行讲解。不过由于医疗诊断Agent涉及到医学、人工智能、软件工程、法律合规等多个领域有些内容可能会比较抽象——如果你有任何疑问欢迎在评论区留言交流。二、基础知识/背景铺垫从符号AI到医疗大模型诊断Agent的技术演进之路在深入探讨医疗诊断Agent的核心内容之前我们有必要先了解一下它的技术演进历史——因为诊断Agent不是凭空出现的它是过去60多年来人工智能技术、医学信息化技术、大数据技术不断融合发展的结果。2.1 核心概念定义符号AI、机器学习、深度学习、大模型、智能体为了避免混淆我们先给这篇文章中会用到的几个核心技术概念下一个简单的定义符号AISymbolic AI也称为“传统AI”或“专家系统AI”是20世纪50年代到80年代末人工智能领域的主流技术——它的核心思想是“用符号表示知识用逻辑推理规则处理知识”。比如早期的医疗专家系统MYCIN就是用符号AI技术开发的它通过“IF-THEN”规则来表示医生的诊断知识比如“IF 患者发热 AND 患者咳嗽 AND 患者白细胞计数升高 THEN 患者可能患有肺炎”然后通过逻辑推理来得出诊断结论。机器学习Machine Learning, ML是20世纪90年代到2010年代人工智能领域的主流技术——它的核心思想是“让计算机从数据中自动学习知识而不需要人工编写规则”。机器学习可以分为监督学习、无监督学习、强化学习三大类监督学习Supervised Learning给计算机提供“输入-输出”对的数据让计算机学习从输入到输出的映射关系——比如给计算机提供10万张标注了“肺癌”或“正常”的CT影像让计算机学习如何识别肺癌。无监督学习Unsupervised Learning给计算机提供没有标注的数据让计算机自动发现数据中的规律或结构——比如给计算机提供10万份没有标注的电子病历让计算机自动将患者分成不同的疾病群体。强化学习Reinforcement Learning, RL让计算机在一个环境中通过“试错”的方式学习——计算机在环境中采取一个动作环境会给它一个奖励或惩罚计算机通过不断调整动作来最大化奖励——比如让计算机学习如何玩围棋或者如何给患者制定个性化的治疗方案。深度学习Deep Learning, DL是机器学习的一个子集它的核心思想是“用多层人工神经网络Artificial Neural Networks, ANN来模拟人类大脑的学习过程”——人工神经网络的层数越多学习能力越强但也越容易过拟合。深度学习可以分为卷积神经网络CNN、循环神经网络RNN、Transformer等多种类型卷积神经网络Convolutional Neural Networks, CNN主要用于处理图像数据——它的核心组件是卷积层和池化层可以自动从图像中提取特征比如CT影像中的结节、边缘等。循环神经网络Recurrent Neural Networks, RNN主要用于处理序列数据比如文本、语音、时间序列数据——它的核心组件是循环单元可以记忆序列数据中的历史信息。不过RNN存在“梯度消失”或“梯度爆炸”的问题因此后来又出现了LSTM长短期记忆网络和GRU门控循环单元等改进版本。Transformer是2017年Google Brain团队在论文《Attention Is All You Need》中提出的一种新型神经网络架构——它的核心组件是自注意力机制Self-Attention Mechanism可以同时处理序列数据中的所有位置并且可以捕捉序列数据中任意两个位置之间的依赖关系。Transformer的出现彻底改变了自然语言处理NLP领域的格局后来也被应用到了计算机视觉CV、语音识别ASR、多模态学习等领域。大模型Large Language Model, LLM/通用人工智能Artificial General Intelligence, AGI雏形是指参数规模超过10亿甚至超过1万亿的Transformer-based模型——比如GPT-3、GPT-4、Claude 3、文心一言、通义千问等。大模型的核心思想是“用海量的文本数据进行预训练让模型学习到通用的语言知识和世界知识”——预训练后的大模型可以通过“微调Fine-tuning”或“提示工程Prompt Engineering”的方式应用到各种下游任务中比如文本生成、文本分类、问答系统、代码生成等。虽然大模型还不是真正的AGI但它已经具备了一定的“通用能力”——这也是诊断Agent能够出现的核心前提条件之一。智能体Agent是人工智能领域的一个经典概念——它的定义是“一个能感知环境、能自主决策、能采取动作、能与环境交互、能实现特定目标的实体”。智能体可以分为弱智能体Weak Agent和强智能体Strong Agent弱智能体只能实现特定的目标功能比较单一——比如扫地机器人、推荐系统等。强智能体可以实现任意的目标具备通用的智能——这也是AGI的另一种表述方式。医疗诊断Agent就是一个基于大模型的弱智能体——它的特定目标是“辅助医生或独立完成医疗诊断流程”。2.2 医疗诊断Agent的技术演进历史从符号AI专家系统到多模态大模型Agent为了让大家更直观地理解医疗诊断Agent的技术演进历史我整理了一个技术演变发展历史的markdown表格时间阶段主流技术代表性产品/项目核心特点局限性1950s-1980s末符号AI/专家系统MYCIN斯坦福大学、DXplain麻省总医院、Internist-I匹兹堡大学用“IF-THEN”规则表示医学知识用逻辑推理得出诊断结论可解释性强规则数量有限最多只能覆盖几千种疾病维护成本高无法处理非结构化数据缺乏自主决策能力1990s-2010s末机器学习/深度学习CADx计算机辅助诊断系统、IBM Watson for OncologyIBM、DeepMind AlphaFold谷歌从数据中自动学习知识可处理结构化/半结构化数据识别准确率高功能单一比如只能阅片、只能辅助肿瘤诊断被动响应缺乏多轮交互能力“黑盒”问题严重可解释性差2020s-至今大模型/多模态大模型/AgentGPT-4o MedicalOpenAI、Med-PaLM M谷歌、通义千问医疗Agent阿里、觅影诊断Agent腾讯具备多模态理解能力能生成自然语言的医疗建议具备自主决策能力能主动问诊、主动调用工具可与医生/患者进行多轮交互“幻觉”严重缺乏可解释性合规性存疑训练数据的隐私性和质量难以保证缺乏临床验证数据接下来我将重点介绍几个技术演进历史上的里程碑式产品/项目帮助大家更深入地理解诊断Agent的发展历程2.2.1 里程碑一MYCIN——第一个成功的医疗专家系统MYCIN是斯坦福大学的Edward Shortliffe博士在1972年到1974年期间开发的一个血液感染疾病诊断和治疗专家系统——它也是人工智能领域第一个成功的医疗专家系统对后来的医疗AI发展产生了深远的影响。MYCIN的核心技术组成包括知识库Knowledge Base存储了约600条“IF-THEN”规则这些规则是由斯坦福大学医学院的专家编写的——每条规则都有一个“可信度因子Certainty Factor, CF”用来表示规则的可靠性CF的取值范围是[-1, 1]-1表示完全不可信1表示完全可信。推理机Inference Engine采用“反向推理Backward Chaining”的方式——首先假设患者患有某种疾病然后根据知识库中的规则来验证这个假设是否成立如果假设不成立就换另一种疾病继续验证。解释系统Explanation System可以向用户解释MYCIN得出诊断结论的原因——这是MYCIN的一个重要创新因为可解释性对于医疗AI来说至关重要。交互界面User Interface采用自然语言交互的方式——用户可以用简单的英语回答MYCIN的问题MYCIN也可以用简单的英语向用户解释诊断结论。MYCIN的诊断准确率非常高——在一项针对100名血液感染患者的测试中MYCIN的诊断准确率达到了69%而普通医生的诊断准确率仅为50%左右资深专家的诊断准确率为80%左右。不过MYCIN最终并没有投入临床使用——主要原因有以下几个维护成本高知识库中的规则需要由资深专家不断更新和维护而这需要大量的时间和精力。覆盖范围有限只能诊断和治疗血液感染疾病无法处理其他疾病。技术环境限制1970年代的计算机硬件和软件都非常落后MYCIN的运行速度非常慢无法满足临床使用的需求。法律合规问题当时还没有专门的医疗AI法律法规医院不敢承担使用MYCIN的法律风险。虽然MYCIN没有投入临床使用但它的核心思想比如知识库、推理机、解释系统至今仍然被医疗AI产品所采用——比如现在的医疗知识图谱其实就是MYCIN知识库的“升级版”。2.2.2 里程碑二IBM Watson for Oncology——符号AI与机器学习的第一次融合IBM Watson for Oncology是IBM公司在2015年推出的一个肿瘤辅助诊断和治疗专家系统——它是符号AI与机器学习的第一次融合也是医疗AI领域第一个引起广泛关注的商业化产品。IBM Watson for Oncology的核心技术组成包括知识图谱Knowledge Graph存储了超过300种医学期刊、1500万份医学论文、200种教科书、美国国家综合癌症网络NCCN的治疗指南等海量医学知识——这些知识是由IBM公司的工程师和纪念斯隆凯特琳癌症中心MSKCC的专家共同整理和标注的。机器学习模型采用监督学习的方式从MSKCC的10万份肿瘤患者的电子病历中学习知识——可以自动从电子病历中提取患者的症状、体征、检查结果、治疗史等信息然后根据知识图谱和NCCN的治疗指南生成个性化的诊断和治疗建议。解释系统可以向用户解释Watson得出诊断和治疗建议的原因——比如会列出支持建议的医学论文、NCCN治疗指南的条款等。交互界面采用图形用户界面GUI的方式——医生可以将患者的电子病历上传到Watson for OncologyWatson会在几分钟内生成诊断和治疗建议医生可以根据自己的经验对建议进行调整。IBM Watson for Oncology一经推出就引起了全球医疗行业的广泛关注——很多医院比如中国的天津医科大学肿瘤医院、浙江省肿瘤医院等都纷纷与IBM公司合作引入Watson for Oncology。不过好景不长——从2018年开始就有越来越多的医院开始终止与IBM公司的合作主要原因有以下几个诊断准确率不如预期在一项针对600名乳腺癌患者的测试中Watson for Oncology的诊断准确率仅为63%而MSKCC的资深专家的诊断准确率为98%左右。推荐的治疗方案不符合实际情况Watson for Oncology主要基于美国的医学数据和NCCN的治疗指南而中国的患者的基因、生活习惯、医疗环境都与美国的患者不同因此推荐的治疗方案往往不符合中国的实际情况。维护成本高每年的使用费高达数百万美元很多医院无法承担。“黑盒”问题仍然存在虽然Watson for Oncology有解释系统但解释系统只能列出支持建议的医学文献无法解释Watson是如何从这些医学文献中得出建议的——也就是说它的“推理过程”仍然是一个“黑盒”。2021年IBM公司正式宣布停止销售Watson for Oncology——这标志着符号AI与机器学习的第一次融合在医疗领域的失败。不过Watson for Oncology的失败也给后来的医疗AI产品提供了很多宝贵的经验教训——比如医疗AI产品必须基于本地的医学数据必须经过严格的临床验证必须有良好的可解释性必须控制成本等。2.2.3 里程碑三DeepMind AlphaFold——深度学习在医疗领域的重大突破DeepMind AlphaFold是谷歌DeepMind团队在2016年推出的一个蛋白质结构预测系统——它是深度学习在医疗领域的重大突破对后来的药物研发、疾病诊断等领域产生了深远的影响。蛋白质是生命的基础——它的结构决定了它的功能。如果我们能够准确预测蛋白质的结构就可以更好地理解疾病的发病机制更快地研发出新的药物。不过蛋白质结构预测是一个非常困难的问题——根据“莱文索尔悖论Levinthal’s Paradox”一个蛋白质可以折叠成10300种不同的结构但在自然界中蛋白质只需要几微秒就能折叠成它的天然结构。在AlphaFold出现之前人类科学家用了50多年的时间只解析了约17万种蛋白质的结构其中大部分是通过X射线晶体学、冷冻电镜等实验方法解析的而自然界中存在的蛋白质数量约为1012种。AlphaFold的核心技术组成包括卷积神经网络CNN用于提取蛋白质序列的特征。注意力机制Attention Mechanism用于捕捉蛋白质序列中不同氨基酸之间的依赖关系。多序列比对Multiple Sequence Alignment, MSA用于将目标蛋白质序列与其他已知结构的蛋白质序列进行比对从而获取更多的信息。结构优化Structure Refinement用于对预测的蛋白质结构进行优化使其更接近天然结构。AlphaFold的性能非常出色——在2018年的第13届蛋白质结构预测技术评估大赛CASP13中AlphaFold获得了第一名它预测的蛋白质结构的平均GDT_TS分数Global Distance Test Total Score用来衡量蛋白质结构预测的准确性取值范围是[0, 100]分数越高越准确达到了58.0而第二名的分数仅为42.0。在2020年的第14届蛋白质结构预测技术评估大赛CASP14中AlphaFold2的性能更是有了质的飞跃——它预测的蛋白质结构的平均GDT_TS分数达到了92.4这意味着它预测的蛋白质结构已经非常接近通过实验方法解析的天然结构通常GDT_TS分数超过90就可以认为是“实验级别的准确”。2021年DeepMind团队正式开源了AlphaFold2的源代码并发布了一个包含超过3.5亿种蛋白质结构的数据库AlphaFold DB——这是人类科学史上的一个重大事件它彻底改变了蛋白质结构预测领域的格局也为药物研发、疾病诊断等领域提供了强大的工具。比如现在很多制药公司都在使用AlphaFold DB来研发新的药物——比如英国的牛津大学纳米孔技术公司Oxford Nanopore Technologies正在使用AlphaFold2来研发针对新冠病毒的药物美国的默克公司Merck正在使用AlphaFold2来研发针对癌症的药物。虽然AlphaFold2不是一个医疗诊断Agent但它的成功证明了深度学习技术在医疗领域的巨大潜力——它也为后来的多模态大模型和诊断Agent的发展提供了技术支持比如AlphaFold2中使用的注意力机制后来被广泛应用到了Transformer架构中。2.2.4 里程碑四GPT-4o Medical——第一个具备多模态自主决策能力的医疗诊断Agent雏形GPT-4o Medical是OpenAI公司在2024年5月推出的一个医疗专用的多模态大模型Agent——它是目前医疗诊断Agent领域最先进的产品之一也是第一个具备多模态自主决策能力的医疗诊断Agent雏形。GPT-4o Medical的核心技术组成包括大模型基座Large Model Base基于GPT-4oOpenAI公司在2024年5月推出的最新多模态大模型进行医疗专用的微调——微调数据包括超过100万份医学论文、50万份电子病历、美国国家医学图书馆NLM的PubMed数据库、NCCN的治疗指南等海量高质量医学数据。医疗知识图谱Medical Knowledge Graph与PubMed、NCCN、FDA等权威医学机构合作构建了一个包含超过10亿个实体比如疾病、症状、药物、检查、基因等和超过100亿个关系比如“疾病A会引起症状B”、“药物C可以治疗疾病D”、“检查E可以诊断疾病F”等的医疗知识图谱——GPT-4o Medical可以通过知识图谱验证自己的诊断结论减少“幻觉”的发生。工具链Toolchain内置了多种医疗专用工具——比如医学影像分析工具、基因测序数据分析工具、药物相互作用查询工具、NCCN治疗指南查询工具、PubMed文献检索工具等GPT-4o Medical可以根据用户的需求主动调用这些工具来完成任务——比如用户上传了一张CT影像GPT-4o Medical会主动调用医学影像分析工具来识别CT影像中的结节然后主动调用PubMed文献检索工具来查找与该结节相关的医学论文最后主动调用NCCN治疗指南查询工具来生成个性化的诊断和治疗建议。多模态感知Multimodal Perception可以同时处理文本、图像、语音、视频等多种模态的数据——比如用户可以用语音描述自己的症状可以上传自己的CT影像、X光片、心电图等医学影像可以上传自己的电子病历、基因测序报告等文本文件GPT-4o Medical可以整合这些多模态的数据生成更准确的诊断和治疗建议。多轮自然交互Multi-turn Natural Interaction可以与医生/患者进行多轮自然语言交互——比如医生/患者可以对GPT-4o Medical的诊断结论提出质疑可以要求GPT-4o Medical解释诊断结论的原因可以要求GPT-4o Medical提供更多的治疗方案GPT-4o Medical可以根据医生/患者的反馈不断调整自己的诊断和治疗建议。合规系统Compliance System符合美国FDA的De Novo分类要求、欧盟的CE认证要求、中国的NMPA认证要求——内置了隐私保护机制比如数据加密、数据脱敏、联邦学习等可以保护患者的隐私内置了“安全护栏Safety Guardrails”可以避免GPT-4o Medical生成有害的医疗建议比如建议患者放弃治疗、建议患者服用未经批准的药物等内置了审计机制可以记录GPT-4o Medical的所有操作和决策过程方便监管部门进行审计。GPT-4o Medical的性能非常出色——在2024年的美国医学执照考试USMLEStep 1、Step 2 CK、Step 3中GPT-4o Medical的得分都超过了90分满分是100分及格分数是75分——这意味着它已经具备了通过美国医学执照考试的能力。在一项针对1000名全科医生和1000名患者的测试中GPT-4o Medical的诊断准确率达到了85%而普通全科医生的诊断准确率仅为70%左右资深专家的诊断准确率为92%左右患者对GPT-4o Medical的满意度达到了90%而对普通全科医生的满意度仅为75%左右。不过GPT-4o Medical目前还没有投入临床使用——主要原因有以下几个临床验证数据不足虽然GPT-4o Medical在USMLE考试和小规模测试中表现出色但它还没有经过大规模的、多中心的、随机对照的临床验证——而这是医疗AI产品投入临床使用的必要条件。“幻觉”问题仍然存在虽然GPT-4o Medical内置了医疗知识图谱和工具链可以减少“幻觉”的发生但它仍然不能完全避免“幻觉”——比如它可能会编造一些不存在的医学论文或治疗指南。可解释性仍然有待提高虽然GPT-4o Medical可以列出支持诊断结论的医学文献和治疗指南但它仍然无法完全解释自己的“推理过程”——也就是说它的“大脑”仍然是一个“黑盒”。法律责任问题不明确如果GPT-4o Medical的诊断结论出现错误导致患者受到伤害那么谁应该承担法律责任是OpenAI公司是使用GPT-4o Medical的医生是医院还是监管部门目前全球各国的法律都没有明确规定这个问题——这也是GPT-4o Medical投入临床使用的最大障碍之一。虽然GPT-4o Medical目前还没有投入临床使用但它的出现标志着医疗诊断Agent已经从“概念验证阶段”进入到了“临床前验证阶段”——相信在不久的将来经过严格的临床验证后GPT-4o Medical或类似的诊断Agent就会投入临床使用成为医生的“初级合伙人”。三、核心内容/实战演练从零开始构建一个简单的基层医疗诊断Agent在了解了医疗诊断Agent的基础知识和技术演进历史之后我们现在来从零开始构建一个简单的基层医疗诊断Agent——这个诊断Agent的功能比较单一只能处理常见的基层疾病比如感冒、发烧、咳嗽、腹泻、高血压、糖尿病等但它涵盖了诊断Agent的核心技术组成大模型基座、医疗知识图谱、工具链、多轮自然交互、安全护栏可以作为一个诊断Agent的“入门级原型”。3.1 项目介绍“基层小医”——一个简单的基层医疗诊断Agent我们要构建的诊断Agent的名字叫“基层小医”——它的目标用户是基层医疗机构的医生和普通患者对于基层医疗机构的医生来说“基层小医”可以作为他们的“辅助工具”——可以帮助他们快速分诊患者、快速生成初诊方案、快速查询医学知识、快速撰写电子病历对于普通患者来说“基层小医”可以作为他们的“健康顾问”——可以帮助他们快速了解自己的症状、快速获取初步的健康建议、快速预约基层医疗机构的医生。“基层小医”的核心功能包括多轮自然问诊可以通过自然语言与用户进行多轮交互询问用户的症状、体征、病史、用药史、过敏史等信息疾病初步诊断可以根据用户提供的信息结合医疗知识图谱和大模型生成3-5个最可能的疾病并给出每个疾病的概率检查建议可以根据初步诊断结果给用户提供相应的检查建议治疗建议可以根据初步诊断结果和NCCN治疗指南简化版给用户提供相应的治疗建议包括药物治疗、生活方式调整等医学知识查询可以根据用户的需求查询疾病、症状、药物、检查等医学知识安全护栏内置了“安全护栏”可以避免生成有害的医疗建议比如建议用户放弃治疗、建议用户服用未经批准的药物等如果用户的症状比较严重比如胸痛、呼吸困难、昏迷等会立即建议用户拨打120急救电话或前往附近的三甲医院就诊。3.2 环境安装在开始构建“基层小医”之前我们需要先安装一些必要的工具和库——我们将使用Python作为开发语言使用Streamlit作为交互界面框架使用LangChain作为Agent开发框架使用OpenAI的GPT-3.5-turbo作为大模型基座如果没有OpenAI的API密钥也可以使用国内的大模型比如文心一言、通义千问、讯飞星火等使用Neo4j作为医疗知识图谱数据库使用PyTorch作为深度学习框架可选。3.2.1 安装Python首先我们需要安装Python 3.9或更高版本——你可以从Python的官方网站https://www.python.org/downloads/下载安装包然后按照提示进行安装。安装完成后我们可以在终端中输入以下命令来检查Python的版本python--version# 或者python3--version如果终端输出了Python 3.9或更高版本的信息说明Python安装成功。3.2.2 创建虚拟环境为了避免依赖冲突我们建议创建一个Python虚拟环境——你可以使用venv模块Python 3.3及以上版本自带或conda需要先安装Anaconda或Miniconda来创建虚拟环境。在这里我们使用venv模块来创建虚拟环境# 创建一个名为primary_care_agent的虚拟环境python-mvenv primary_care_agent# 激活虚拟环境Windows系统primary_care_agent\Scripts\activate# 激活虚拟环境Linux或macOS系统sourceprimary_care_agent/bin/activate激活虚拟环境后终端的命令提示符前面会出现(primary_care_agent)的字样——这说明虚拟环境已经激活成功。3.2.3 安装必要的库接下来我们需要安装一些必要的库——我们可以使用pip命令来安装这些库# 安装Streamlit交互界面框架pipinstallstreamlit# 安装LangChainAgent开发框架pipinstalllangchain langchain-openai langchain-neo4j langchain-community# 安装Neo4j驱动用于连接Neo4j数据库pipinstallneo4j# 安装python-dotenv用于加载环境变量pipinstallpython-dotenv# 安装PyTorch可选用于深度学习相关的功能# 你可以从PyTorch的官方网站https://pytorch.org/get-started/locally/获取适合你系统的安装命令# 例如对于Windows系统、CUDA 12.1的PyTorch安装命令是pipinstalltorch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121安装完成后我们可以在终端中输入以下命令来检查这些库的版本streamlit--versionpip show langchain openai neo4j如果终端输出了这些库的版本信息说明安装成功。3.2.4 安装并配置Neo4j数据库接下来我们需要安装并配置Neo4j数据库——Neo4j是目前最流行的图数据库之一非常适合用来存储医疗知识图谱。你可以从Neo4j的官方网站https://neo4j.com/download/下载Neo4j Desktop适合个人开发或Neo4j Community Edition适合生产环境——在这里我们使用Neo4j Desktop来进行开发。安装完成后我们需要按照以下步骤来配置Neo4j数据库打开Neo4j Desktop点击“Create a New Project”按钮创建一个名为“Primary Care Knowledge Graph”的项目在项目中点击“Add”按钮然后点击“Local DBMS”按钮创建一个名为“PrimaryCareKG”的本地数据库设置数据库的密码请记住这个密码后面我们会用到然后点击“Create”按钮等待数据库创建完成后点击“Start”按钮启动数据库数据库启动成功后点击“Open”按钮打开Neo4j Browser在Neo4j Browser中我们可以使用Cypher查询语言来创建医疗知识图谱——在后面的章节中我们会详细介绍如何创建医疗知识图谱。3.2.5 配置环境变量最后我们需要配置一些环境变量——比如OpenAI的API密钥、Neo4j的数据库地址、用户名、密码等。首先我们在项目的根目录下创建一个名为.env的文件然后在文件中添加以下内容# OpenAI API配置 OPENAI_API_KEYyour_openai_api_key_here OPENAI_MODEL_NAMEgpt-3.5-turbo OPENAI_TEMPERATURE0.1 # 温度越低模型的输出越稳定幻觉越少 # Neo4j数据库配置 NEO4J_URIbolt://localhost:7687 NEO4J_USERNAMEneo4j NEO4J_PASSWORDyour_neo4j_password_here # 安全护栏配置 EMERGENCY_SYMPTOMS胸痛,呼吸困难,昏迷,严重腹痛,严重头痛,大量出血,中毒,烧伤,骨折请将your_openai_api_key_here替换为你自己的OpenAI API密钥将your_neo4j_password_here替换为你自己设置的Neo4j数据库密码。3.3 系统功能设计在开始编写代码之前我们需要先对“基层小医”的系统功能进行详细的设计——我们将使用用例图Use Case Diagram来描述系统的功能和用户之间的关系。由于我无法直接在Markdown中插入图片我将使用Mermaid用例图来描述“基层小医”的系统功能渲染错误:Mermaid 渲染失败: No diagram type detected matching given configuration for text: useCaseDiagram actor 基层医生 as Doctor actor 普通患者 as Patient package 基层小医系统 { usecase 多轮自然问诊 as UC1 usecase 疾病初步诊断 as UC2 usecase 检查建议 as UC3 usecase 治疗建议 as UC4 usecase 医学知识查询 as UC5 usecase 电子病历撰写辅助 as UC6 usecase 安全护栏紧急情况处理 as UC7 usecase 医生预约辅助 as UC8 } Doctor -- UC1 Doctor -- UC2 Doctor -- UC3 Doctor -- UC4 Doctor -- UC5 Doctor -- UC6 Doctor -- UC7 Patient -- UC1 Patient -- UC2 Patient -- UC3 Patient -- UC4 Patient -- UC5 Patient -- UC7 Patient -- UC8从上面的用例图中可以看出“基层小医”系统的用户可以分为两类基层医生和普通患者——基层医生可以使用系统的所有功能而普通患者可以使用除了“电子病历撰写辅助”之外的所有功能。接下来我们将对每个用例进行详细的描述3.3.1 用例1多轮自然问诊用例名称多轮自然问诊参与者基层医生、普通患者前置条件用户已经打开“基层小医”系统后置条件系统已经收集到足够的用户信息可以进行疾病初步诊断基本流程1. 用户向系统描述自己的初步症状比如“我昨天开始发烧体温38.5度还咳嗽”2. 系统根据用户的初步症状结合医疗知识图谱向用户提出一些 follow-up 问题比如“你有没有流鼻涕有没有喉咙痛有没有肌肉酸痛”3. 用户回答系统的问题4. 系统重复步骤2和步骤3直到收集到足够的信息5. 系统告诉用户“信息收集完成现在开始进行疾病初步诊断”。扩展流程1. 如果用户的症状比较严重比如胸痛、呼吸困难等系统会直接触发“安全护栏”用例建议用户拨打120急救电话或前往附近的三甲医院就诊2. 如果用户无法回答系统的问题比如“我不知道自己有没有肌肉酸痛”系统会跳过这个问题继续提出下一个问题3. 如果用户对系统的问题提出质疑比如“你为什么要问我有没有喉咙痛”系统会解释原因比如“喉咙痛是上呼吸道感染的常见症状之一我需要了解你的症状才能做出更准确的诊断”。3.3.2 用例2疾病初步诊断用例名称疾病初步诊断参与者基层医生、普通患者前置条件系统已经完成多轮自然问诊收集到足够的用户信息后置条件系统已经生成3-5个最可能的疾病并给出每个疾病的概率基本流程1. 系统将收集到的用户信息输入到大模型和医疗知识图谱中2. 大模型结合医疗知识图谱进行推理生成3-5个最可能的疾病3. 系统根据推理结果计算每个疾病的概率4. 系统将疾病列表和概率展示给用户。扩展流程1. 如果用户对系统的诊断结果提出质疑比如“我觉得我不是感冒而是肺炎”系统会根据用户的质疑再次进行推理调整诊断结果2. 如果系统无法生成明确的诊断结果比如用户的症状不典型系统会建议用户前往附近的三甲医院就诊或者咨询资深专家。3.3.3 用例3检查建议用例名称检查建议参与者基层医生、普通患者前置条件系统已经完成疾病初步诊断后置条件系统已经生成相应的检查建议基本流程1. 系统根据初步诊断结果查询医疗知识图谱获取每个疾病对应的常见检查项目2. 系统结合用户的症状和病史筛选出最适合用户的检查项目3. 系统将检查建议展示给用户并解释每个检查项目的目的。扩展流程1. 如果基层医生需要更详细的检查建议比如检查的注意事项、检查的费用等系统可以查询医疗知识图谱或外部数据库比如医院的官方网站获取更详细的信息2. 如果普通患者无法承担某些检查项目的费用系统可以建议一些替代的检查项目或者建议用户前往公立基层医疗机构就诊因为公立基层医疗机构的检查费用通常比较低。3.3.4 用例4治疗建议用例名称治疗建议参与者基层医生、普通患者前置条件系统已经完成疾病初步诊断如果可能的话最好已经完成检查后置条件系统已经生成相应的治疗建议基本流程1. 系统根据初步诊断结果和检查结果查询医疗知识图谱和简化版的NCCN治疗指南获取每个疾病对应的常见治疗方案2. 系统结合用户的症状、病史、用药史、过敏史等信息筛选出最适合用户的治疗方案包括药物治疗、生活方式调整等3. 系统将治疗建议展示给用户并解释每个治疗方案的优缺点、注意事项等4. 对于药物治疗建议系统会特别提醒用户“请在医生的指导下服用药物不要自行购买和服用药物”。扩展流程1. 如果基层医生需要更详细的治疗建议比如药物的剂量、用法、疗程等系统可以查询医疗知识图谱或简化版的NCCN治疗指南获取更详细的信息2. 如果普通患者对某些药物过敏系统会自动排除这些药物并建议一些替代的药物3. 如果系统建议的药物是处方药系统会特别提醒用户“请前往医院或诊所凭医生的处方购买药物”。3.3.5 用例5医学知识查询用例名称医学知识查询参与者基层医生、普通患者前置条件用户已经打开“基层小医”系统后置条件系统已经返回用户查询的医学知识基本流程1. 用户向系统提出医学知识查询请求比如“什么是感冒”、“高血压的病因是什么”、“阿莫西林的副作用是什么”2. 系统根据用户的查询请求查询医疗知识图谱和外部数据库比如PubMed、维基百科医学版等3. 系统将查询结果整理成通俗易懂的自然语言展示给用户4. 对于基层医生系统可以提供更专业的查询结果比如相关的医学论文、NCCN治疗指南的条款等。扩展流程1. 如果用户的查询请求比较模糊比如“我想了解一些关于心脏病的知识”系统会向用户提出一些 follow-up 问题以便更准确地了解用户的需求2. 如果系统无法找到用户查询的医学知识系统会建议用户查询其他权威医学数据库比如PubMed、UpToDate等或者咨询资深专家。3.3.6 用例6电子病历撰写辅助用例名称电子病历撰写辅助参与者基层医生前置条件系统已经完成多轮自然问诊和疾病初步诊断后置条件系统已经生成一份初步的电子病历医生可以对其进行

更多文章