文心一言变身虚拟患者,助力医学生轻松开启「实践模式」

2 阅读10分钟

本期文心开发者说邀请到天佑星河团队负责人,从医疗教育与人工智能结合的角度出发,分享“智慧医疗教育系统”的开发历程。本期分享将从应用介绍、应用价值、应用亮点、技术全景等方面介绍“智慧医疗教育系统”应用的开发心得和技术路线。

随着生成式人工智能的发展,AI正在不断重塑医疗健康领域。根据麦肯锡全球研究所(MGI)估计,生成式AI每年可为制药和医疗行业带来600亿至1100亿美元的经济价值。天佑星河团队从医疗教育与人工智能结合的角度出发,开发了“智慧医疗教育系统”。该系统运用文心大模型模拟病患,为医学生提供了一个仿真、互动的学习环境,通过与模拟病患交流,锻炼其诊断能力、沟通技巧和临床思维。

与此同时,我们还在飞桨星河社区开发了面向临床用户的“手术过程记录生成系统”与“电子病历生成系统”,两个系统的内核动力均源自文心大模型卓越的自然语言理解和生成能力,通过整合语音识别及提示词工程技术,自动生成手术过程和电子病历记录,提供更加高效、准确的记录方式,帮助医生摆脱繁重的文书工作,大大减轻了工作负担。

本次主要分享“智慧医疗教育系统”应用的开发心得和技术路线。

“智慧医疗教育系统”是什么

应用介绍

“智慧医疗教育系统”本质上是一个创新性大语言模型应用,该系统深度整合了提示词工程技术,涵盖语义分析、上下文理解以及精细化词汇选择等多个子领域,旨在提升模型的响应准确性和用户意图识别能力。同时,通过运用多轮对话控制技术,模拟人类对话的连贯性和复杂性,实现更自然、高效的人机交互。

随着人工智能技术的快速发展,医疗领域学科知识快速迭代,对医学生的教育培养提出了更高要求。传统的医学教育模式往往侧重于理论知识的传授,但在实践技能、临床经验以及跨学科整合方面存在一定局限性。这些局限性导致医学生在面对复杂多变的临床情境时,常常感到力不从心,难以将所学理论知识有效应用于实际工作中。在此背景下,智慧医疗教育系统应运而生,从实际临床场景出发,利用大语言模型的交互能力,不仅能够帮助医学生更高效地学习和掌握医学知识,还能够培养他们的临床思维和跨学科整合能力,为未来的医疗事业培养更多优秀的人才。

应用价值

提升学习体验

智慧医疗教育系统通过模拟真实病人对话,为医学生打造了极具现场感的学习环境。这种沉浸式的体验,使学习过程变得更加直观、深入,不仅激发了医学生的学习热情,还让他们在模拟实践中快速成长,为将来的职业生涯做好充分准备。

加强理论与实践结合

该系统模拟实际问诊场景,医学生通过与文心一言扮演的模拟病人进行多轮对话,充分锻炼他们在信息收集、分析病情、推理诊断等方面的实践技能,对传统教育模式进行补充,加强他们理论与实践相结合的能力。

实时反馈与评估

系统对用户的诊疗过程进行实时评估并给出打分与评价,这种实时反馈机制有助于医学生快速识别错误、调整决策思路,有针对性地提升问诊能力。

应用亮点

充分利用文心大模型的能力

通过调用ERNIE SDK全面释放文心大模型的创造潜能,借助其强大的生成能力,系统能够创造出丰富多样的模拟病例和逼真场景,为医学生提供广阔且高效的实践平台。

多轮对话技术

系统采用先进的多轮对话技术,使大模型具备记忆力。在与模拟病人的连续对话中,系统能够记住已输入的信息,保持对话的连贯性,从而更真实地模拟实际问诊过程,提升医学生的沟通和实践能力。

提示词模板技术和医学术语的结合

智慧医疗教育系统巧妙地将提示词模板技术与医学术语相结合。通过预设的医学术语提示词,能够更准确地告知大模型需要学习的内容,使学习更加个性化。

搭建“智慧医疗教育系统”

技术全景

在介绍具体步骤之前,先从宏观整体的角度了解该应用是如何实现的。

泳道图是一种用来描述系统流程的图表,描述了用户与系统交互的过程。在开始阶段,用户可以选择一级科室名称,系统将SQL查询语句提交给数据库,数据库根据一级科室查询所有二级科室,找到一个二级科室的数据集并通过系统渲染到用户界面。

用户选择二级科室名称后,点击提交按钮,系统会将SQL查询语句再次提交给数据库,数据库随后将随机查询到的提示词模板返回给系统。

系统将提示词模板中的动态部分按照用户输入替换,并将替换后的提示词与之前的对话信息合并,而后提交给大模型。

用户收到大模型的反馈后,可以进行下一轮的对话,直到双方对话结束。

以下是应用的泳道图作为参考:

技术路径

接下来,我们一起了解这个应用的几个功能具体是如何实现。以AI Studio的bml codelab为例。需要选择一个合适的环境,在此基础上进行下一步的开发。

一级科室及二级科室的显示及联动

前端采用的是Gradio框架。Gradio是一个开源的Python库,主要功能为快速构建和分享人工智能应用。Gradio的代码结构相对简单,只需简单定义输入和输出接口即可快速构建简单的交互页面,大大提高了开发demo的效率,以下是相关代码:

对于一级临床科室分类项目,在页面加载的时候,通过加载law_situation_list的列表将所有的一级临床科室分类项目显示在页面中,以下是相关代码:

从代码中可以看出,一级临床科室分类项目列表是通过执行一段sql查询语句获得的。这种方法的优势在于当科室分类发生变化和调整的时候,只需要修改数据库中的相关信息,无需修改代码。二级临床科室分类项目会在一级临床科室分类项目的单选框被选中后触发,触发后执行reload_point的函数,输入的参数是被选中的一级临床科室分类项目,以下为reload_point函数:

通过执行这个reload_point函数,可以根据一级临床科室分类项目,列出其下所有的二级临床科室分类。

提示词模板技术

这一部分采用提示词模板技术,模板包含两个主要部分:静态部分和动态部分。静态部分通常包含一些固定不变的文本元素,动态部分则根据实际情况进行调整。在我们的项目中,提示词模板的示例如下:

假设你是一位病人,需要去{一级临床科分类}下的{二级临床科室分类}科室看病,你需要根据我的提问给出相关症状信息;随后你需要暂停这个情境,让我继续提问;最后,我会结合针状信息,为你诊断病情,你根据我的诊断情况进行打分(满分100分)、并给予服务评价,比如遗漏了哪些问题,哪些问题问得不够好。上述提示词模板中,{一级临床科分类}和{二级临床科室分类}是提示词模板中的动态部分,会根据用户输入的一级临床科分类和二级临床科室分类进行替换,静态部分保持部分,替换后形成的提示词才是真正的提示词。

多轮对话技术

多轮对话最重要的是构建一个JSON文件,其中包含历次的对话信息和本次的新的提示词,以这个JSON文件传给大模型,以下是主要的核心代码:

在这个代码中,messages这个变量用来存储历次对话信息以及新的提示词,在与大模型对接前,通过messages.append({"role":"user","content":prompt_template})将每一次的新的提示词加入到messages中,待大模型返回结果后,再通过messages.append函数将大模型返回的结果加入到messages中,为下一次的对话做准备。通过上述的多轮对话技术,让大模型获取记忆,从而更好地完成多轮对话。

玩转“智慧医疗教育系统”

接下来,带大家一步步体验这一应用,探索如何使用智慧医疗教育系统。

(1)选择临床科室一级分类和二级分类,如果不选择二级分类,系统将根据一级科室随机分配一个二级分类;

(2)点击提交按钮开始学习;

(3)用户作为实习医生,输入需要与病患沟通的语句;

(4)点击提交按钮将对话发送给系统;

(5)双方的沟通内容会显示在chatbot对话框中;

(6)输入诊断信息;

(7)点击提交按钮将对话发送给系统;

(8)系统返回评价得分,以及给出相应的指导,例如用户之前询问过程中,没有询问患者的过敏史、是否有抽烟喝酒的习惯、职业和工作环境等。

“智慧医疗教育系统”的下一个目标是利用基于ERNIE SDK的Agent框架,通过智能体的规划、记忆、工具、行动的能力,打造一款高度智能化的医疗教育智能体。在多模态交互方面,该智能体通过调用各种工具生成高度逼真的X光片、验血报告单等医疗影像和文档,使教育过程更加贴近实际临床问诊的场景。此外,该智能体将通过长期记忆能力的开发,整合丰富的病例库资源与最新医学研究成果,确保教育内容的时效性和准确性,帮助医学生、实习医生乃至在职医护人员提升临床决策能力,培养高效的问题解决能力。