医疗数据属于最敏感的数据类型之一。由于隐私保护要求、法规合规性等方面的原因,将这类数据发送到云端的AI服务中通常并不可行。
在本教程中,您将使用三种开源工具,在自己的机器上构建一个完全独立的医疗AI助手:
-
MedGemma:谷歌开发的开放医疗AI模型,可用于理解医学文本和图像。
-
Ollama:一种方便在本地下载并运行AI模型的工具。
-
Open WebUI:一款类似ChatGPT的Web界面,用于与本地运行的AI模型进行交互。
-
正在学习医疗领域的人工智能技术
-
正在开发医学相关的问答系统
-
正在尝试使用放射学辅助工具进行实验
-
正在开发医学教育相关工具
-
正在研究多模态模型
-
医学图像理解能力:其多模态模型是在经过去标识化的医学图像上训练而成的,这些图像包括胸部X光片、皮肤科图片、眼科图片以及病理学图片等。
-
深厚的医学语言处理能力:MedGemma在医学文献以及临床问答数据集上接受了训练,因此它能够更好地理解医学术语和放射学报告的内容。
-
多种模型规模可供选择:MedGemma提供了4B和27B两种版本,这两种版本都支持文本和图像输入,并且都具有128K的上下文窗口容量。
-
开源模型权重:您可以根据Health AI开发者基金会的使用条款,下载该模型,在本地进行运行、微调或开发相关应用。
-
对于MedGemma 4B模型而言,至少需要8GB的RAM内存(推荐使用16GB内存);该模型的下载文件大小约为3.3GB。
-
如果您想运行27B模型,则需要32GB的RAM内存或一块24GB以上的GPU(该模型的下载文件大小约为17GB)。
-
建议拥有约15GB的空闲磁盘空间,这样才能确保系统能够正常运行(模型文件、Docker镜像以及各种临时文件都需要占用空间)。
-
Apple Silicon Mac系列电脑(从M1到M4型号都非常适合使用)是最佳选择。Ollama会自动利用Metal技术进行加速处理;在Windows和Linux系统上,NVIDIA GPU也能提供显著的性能提升,但并非必需品。仅使用CPU进行推理也是可行的,只不过速度会慢一些。
-
macOS、Linux或Windows 10/11操作系统。
-
Docker Desktop(如果选择通过Open WebUI进行安装的话),或者如果您更喜欢使用pip来安装Open WebUI,那么Python 3.11版本也是必需的。
-
需要具备基本的终端操作经验。
完成本教程后,您将能够与经过医疗领域优化训练的AI模型进行对话,上传胸部X光片等医学图像进行分析,而且所有操作都在本地完成,无需将数据传输到云端。
重要声明:在开始之前需要明确的是,MedGemma仅是一个开发用模型,并非医疗设备。它的输出结果不能直接用于临床诊断、患者管理或治疗决策的制定。
本教程中提供的所有内容都仅用于学习、原型开发及研究目的。对于真正的医疗问题,请务必咨询专业的医疗人员。
我们将涵盖以下内容:
本教程适合哪些人学习?
如果您属于以下情况,那么本教程非常适合您:
MedGemma是什么?
MedGemma是谷歌推出的一系列开源模型,这些模型基于“Gemma 3”架构构建,并专门针对医学文本和图像的理解任务进行了训练。可以将其视为在完成了四年的医学院学习以及放射科住院医师培训之后所形成的模型。

为什么选择MedGemma?
与Llama或Mistral这类通用模型不同,MedGemma是专门为医疗领域应用而设计的。
MedGemma旨在为那些致力于开发医疗应用、医学教育工具、研究辅助系统、报告摘要生成工具以及其他基于人工智能的医疗工作流程的开发人员提供基础支持。
为什么要在本地运行模型?
您当然也可以通过API来调用托管在服务器上的医学模型。但为什么还要选择在本地运行呢?在医疗领域,这种做法的必要性比在其他任何领域都要更加突出。
首先,从隐私保护的角度来看,在您的设备上运行模型意味着医学文本和图像永远不会离开您的设备。因此,既不需要生成API日志,也不需要与第三方数据处理机构打交道,更无需协商任何数据处理协议。
对于那些经常处理受保护的健康信息的人来说,“数据从未离开过我的电脑”这一原则就是最简单的合规保障措施。
其次,在本地运行模型还可以完全免除每条数据处理的费用。一旦下载了模型,您就可以自由地进行实验测试,而无需担心会产生任何费用问题。您可以反复尝试各种输入内容,而完全不需要关注计费情况。
您还可以进行离线使用。医院、实验室以及野外诊所通常会使用受限网络或隔离网络环境,在初次下载相关模型后,这些本地模型便可以在没有互联网连接的情况下正常运行。
而且您可以对模型的配置进行完全控制:您可以自行选择模型版本,并将其固定下来,之后这个配置就不会发生任何变化。不会有任何关于模型被弃用的通知,也不会有隐藏的行为改动。
最后,这种方式也非常适合用于学习。在本地运行模型可以帮助您更好地理解这些模型的工作原理。通过本地操作,您会逐渐建立起对“上下文窗口”、“量化处理”以及“内存限制”等概念的直观认识,而这些是仅仅通过调用API是无法获得的。
先决条件
在开始使用之前,您需要准备以下物品:
硬件要求:
软件要求:
以上就是全部准备事项了。您不需要API密钥、账户信息,也不需要任何GPU云服务资源。
架构图

步骤1:安装Ollama
Ollama是一个轻量级的运行时环境,它通过简单的命令行界面和本地的REST API来负责模型的下载、量化处理以及后续的服务提供工作。
在macOS上:
请从ollama.com/download下载该软件,并将其拖放到“应用程序”文件夹中;或者通过Homebrew进行安装:
brew install ollama
在Linux上:
执行以下命令进行安装:
curl -fsSL https://ollama.com/install.sh | sh
在Windows上:
从ollama.com/download下载适用于Windows系统的安装程序并运行它。目前Ollama已经完全支持Windows系统,无需使用WSL环境。
安装完成后,请验证其是否能够正常工作。
ollama --version
你应该会看到系统显示的版本号。Ollama还会启动一个在 http://localhost:11434 这一地址上运行的后台服务。后续Open WebUI就会通过这个API与Ollama进行交互。你可以通过以下命令来确认服务器是否已经启动:
curl http://localhost:11434
执行这条命令后,系统应该会返回 “Ollama is running” 这一信息。
步骤2:下载MedGemma模型
MedGemma可以直接从Ollama的官方模型库中下载,因此只需执行一条命令即可完成下载:
ollama pull medgemma
这样就能下载到默认大小的4B多模态模型文件,其大小约为3.3GB。
如果你想明确指定要下载的具体模型版本(比如27B版本的模型),可以这样操作:
ollama pull medgemma:4b # 3.3 GB — 多模态模型,适合大多数笔记本电脑使用
ollama pull medgemma:27b # 17 GB — 多模态模型,需要性能较强的硬件支持
下载完成后,可以通过以下命令确认模型是否已经安装成功:
ollama list
在输出结果中,你应该会看到“medgemma”以及它的大小信息。
步骤3:通过终端测试MedGemma模型
在添加用户界面之前,我们先确认这个模型是否真的能够正常工作。首先启动一个交互式会话:
ollama run medgemma
系统会提示你输入 “>>>>>>” 这一命令符。你可以尝试提出一些医学相关的问题,例如:
>>> 胸部X光片上肺炎的典型放射学表现有哪些?
MedGemma应该会给出一个结构化的回答,其中会提到实变、支气管气影以及轮廓征等放射学特征——这样的回答恰恰体现了它所接受的放射学训练成果。
>>>> 请向一名大一医学生解释1型糖尿病和2型糖尿病的区别。
在交互会话中,还有一些有用的命令可供使用:
-
/bye— 结束当前会话 -
/clear— 清除对话记录 -
/show info— 显示模型详细信息(参数、量化方式、上下文长度等)
你也可以直接在终端中输入文件路径来测试图像输入功能,例如:
>>> 请描述这张图片中的关键病变特征。./chest_xray_sample.png
虽然这种方法也可以使用,但通过Open WebUI上传图片其实更加方便。
步骤4:安装Open WebUI
Open WebUI为Ollama提供了类似ChatGPT的简洁用户界面,支持对话记录管理、模型切换、图像上传以及多用户协作功能,而且所有这些功能都可以通过本地服务器来运行。
选项A:Docker(推荐使用)
首先,请安装Docker。
确保Docker Desktop正在运行,然后使用以下命令启动Open WebUI:
docker run -d -p 3000:8080 \
--add-host=host.docker.internal:host-gateway \
-v open-webui:/app/backend/data \
--name open-webui \
--restart always \
ghcr.io/open-webui/open-webui:main
让我们来分析一下这条命令的作用:
-
-d表示在后台运行容器 -
-p 3000:8080将您机器上的3000端口映射到Open WebUI内部的8080端口 -
--add-host=host.docker.internal:host-gateway使容器能够访问主机上运行的Ollama服务器 -
-v open-webui:/app/backend/data创建一个Docker卷,这样您的聊天记录和设置就不会在容器重启后丢失 -
--restart always确保系统重启后UI能够自动重新启动
选项B:pip(不使用Docker)
如果您不想使用Docker,也可以将Open WebUI作为Python包进行安装(支持Python 3.11版本):
pip install open-webui
open-webui serve
这样,界面就会在http://localhost:8080地址上启动。
步骤5:将Open WebUI连接到Ollama
打开浏览器,访问http://localhost:3000(如果使用pip安装,则访问:8080)。
首次启动时,系统会要求您创建一个管理员账户。这个账户是存储在您的本地机器上的(并非通过云服务注册的账户)。
在大多数情况下,Open WebUI会自动检测到位于http://localhost:11434地址的Ollama服务器,此时连接就完成了。
如果您的模型没有出现在列表中,请手动配置连接信息:
-
点击个人资料图标,进入管理面板,然后选择设置,再进入连接选项。
-
在Ollama API设置中,输入相应的URL:
-
如果使用Docker安装:
http://host.docker.internal:11434 -
如果使用pip安装:
http://localhost:11434
-
-
点击“刷新”按钮验证连接是否成功,然后保存设置。
返回主聊天界面,此时medgemma应该会出现在顶部的模型选择列表中。
如果遇到任何问题,可以参考下方的故障排除指南。
步骤6:开始与MedGemma进行聊天
从模型选择列表中选中medgemma,然后开始对话。一个简单的测试示例可以是这样的:
用患者能理解的语言总结这份放射学报告:
“诊断结论:轻度心脏扩大,右侧胸腔有少量积液,没有局部病变,胸椎存在退行性变化。”
您应该获得对每一项检测结果的清晰、易于理解的说明。这种将“专业医学语言转化为通俗语言”的功能,正是MedGemma的真正优势之一。
有几点关于Open WebUI的功能值得了解:
-
系统提示:点击模型名称,然后设置一条系统提示,例如“你是一名医学教育助手。请始终解释你的推理过程,并引用相关的生理学知识。”这条提示会影响对话中所有的回复内容。
-
对话记录:所有的聊天记录都会被保存在本地,且可以通过侧边栏进行搜索。
-
多个模型:您可以添加
llama3.2、gemma3或任何其他Ollama模型,然后对比它们对同一医学问题的回答。这是了解领域训练所带来的差异的绝佳方法。
步骤7:上传医学图像
正是在这一点上,MedGemma真正区别于其他通用模型。由于其视觉编码器是针对医学影像进行预训练的,因此它能够准确描述X光片、皮肤病变图像、眼底照片以及组织病理学样本。
想要尝试的话:
-
选择
medgemma开始新的聊天对话。 -
在消息框中点击+图标(或图片图标),或者直接拖放图像文件。
-
在图片旁边添加提示信息,然后点击发送。
如果您想用一些示例图像进行测试(而无需使用任何真实的患者数据),可以参考NIH ChestX-ray14数据集、MedPix或Radiopaedia的教学案例。
以胸部X光片为例的工作流程如下:
[上传:chest_xray.png]
你是一名经验丰富的放射学助手。请系统地描述这张胸部X光片:包括技术质量、肺部情况、心脏状态、纵隔结构以及骨骼和软组织的情况。然后总结关键发现。
MedGemma通常会按照您要求的顺序逐个分析图像,这种分析方式与放射科医生阅读影像资料的方式是一致的。
需要注意的两点:
-
Ollama和Open WebUI支持标准的图像格式(PNG、JPEG)。临床用的DICOM文件需要先转换为PNG/JPEG格式——使用Python库
pydicom和Pillow就可以轻松完成这个转换。 -
切勿上传包含患者身份识别信息的图像(如姓名、MRI编号或图像中嵌入的日期等),除非这些信息已经经过适当的去标识化处理。即使在本地机器上,保持数据安全也是非常重要的习惯。
可供尝试的提示示例
以下是一些能够展示MedGemma不同功能的提示语句,您可以将它们作为起点来使用:
医学教育方面:
制作一份ACE抑制剂与ARBs的对比表格:包括作用机制、常见用法、主要副作用以及禁忌症等内容。
临床记录:
将这些简写的临床笔记转换成结构化的SOAP记录:“45岁女性,持续3天的咳嗽症状,体温为101华氏度,没有呼吸急促的情况,肺部检查正常,很可能是病毒性上呼吸道感染,采取支持性治疗措施,如果病情恶化请再次就诊。”
患者报告的翻译:
用令人放心但诚实的态度向一位忧心忡忡的患者解释这个MRI检查结果:“L4-L5椎间盘有轻微突出,但没有明显的椎管狭窄或神经根受压现象。”
图像分析(结合上传的皮肤科照片):
使用ABCDE标准来描述这种皮肤病变:
“不对称性、边界特征、颜色、直径以及病情发展情况无法通过单张图片进行评估——请务必明确这一点。”
鉴别诊断:
一名60岁的患者突然出现一只眼睛的无痛性视力丧失。请列出前5种可能的鉴别诊断方法,以及每种方法的鉴别要点。
注意一个规律:那些能为MedGemma提供明确的使用方向、处理结构以及具体限制条件的指令,往往能产生最佳效果。这一规律适用于所有大型语言模型,但在那些对精确性要求极高的领域,这一点尤为重要。
运行更大规模的语言模型
4B型号之所以令人印象深刻,主要是因为它的规模较大;而27B型号在复杂的临床推理、多重的鉴别诊断以及细致的报告解读方面表现得更为出色。
然而,这种优势的背后需要相应的硬件支持:
| 模型名称 | 文件大小 | 所需内存容量 | 最适合用于 |
|---|---|---|---|
medgemma:4b |
3.3 GB | 8 GB及以上的RAM | 笔记本电脑、快速迭代操作、图像分析任务 |
medgemma:27b |
17 GB | 32 GB RAM或24 GB VRAM | 深度推理、复杂病例分析 |
若想尝试27B型号,可以执行以下命令:
ollama pull medgemma:27b
ollama run medgemma:27b
对于大型语言模型来说,有一些实用的建议:
-
注意内存使用情况:运行
ollama ps命令,可以查看当前加载的模型占用了多少RAM/VRAM资源,以及它是在GPU上运行还是CPU上运行,或者同时在这两种设备上运行。如果模型在GPU和CPU之间切换运行,其运行速度会显著下降。 -
在苹果硅芯片平台上:配备32 GB M系列内存的Mac电脑可以轻松运行27B型号。
-
模型使用完毕后的清理操作:Ollama会在模型关闭后继续保留其数据几分钟。如果需要立即释放内存,可以使用ollama stop medgemma:27b命令。 -
评估性能与内存消耗的平衡:如果在你的设备上,27B型号每秒只能生成2–3个输出结果,那么30个以上输出结果的4B型号可能更适合使用。
你可以同时安装这两个模型,并通过Open WebUI的下拉菜单在它们之间进行切换:需要快速进行迭代分析时使用4B型号,而在需要进行深入推理时则使用27B型号。
故障排除指南
错误:registry.ollama.ai/library/medgemma:latest不支持相关工具
这是与MedGemma相关的最常见错误。这意味着Open WebUI在发送请求时会附带本地的工具/功能定义。然而,MedGemma(与基础版的Gemma 3一样)并不支持Ollama的工具API,因此系统会在模型甚至还没有收到这些请求信息之前就将其拒绝。
请按以下顺序查找导致这个问题出现的原因:
-
模型设置:进入管理面板,然后选择“设置”→“模型”→“medgemma”,取消选中“内置工具”、“网络搜索”、“代码解释器”和“终端”这些选项,确保“内置工具”列表中的所有项目都被取消选中。保留“视觉识别”、“文件上传”和“文件上下文”选项的选中状态。较新版本的Open WebUI默认会启用内置工具,因此重新安装后可能会立即遇到这个问题。
-
任务模型:进入管理面板,然后选择“设置”→“界面”,确保无论是本地任务模型还是外部任务模型都没有被设置为“medgemma”。像生成标题或跟进信息这样的后台任务会使用工具功能,请将它们路由到“llama3.2”或其他类似的服务器上。
-
函数调用模式:在模型的高级参数设置中,以及用户设置的“通用”→“高级参数”中,都将函数调用模式设置为“默认”(而非“原生”模式)。
-
全局函数/过滤器:进入管理面板,然后选择“函数”,取消任何处于激活状态的全局函数的启用选项。因为全局函数会应用于所有模型,所以必须将其禁用。
-
聊天界面设置:在消息框中,确保“网络搜索”和“代码解释器”选项处于关闭状态,并且不要通过+菜单添加任何工具功能。
之后,请启动一个新的聊天会话(旧聊天会话可能会保留错误的设置),然后进行测试。为了确认模型本身没有问题,可以在终端中运行命令ollama run medgemma "hello"。如果这个命令能够正常执行,那么问题就出在Open WebUI的配置上。
Open WebUI在下拉列表中不显示任何模型
这可能是因为容器无法连接到Ollama。请检查以下内容:
-
Ollama是否正在运行:执行命令
curl http://localhost:11434,如果返回“Ollama is running”,说明Ollama正在正常运行。 -
在管理面板的“设置”→“连接”中,连接地址应为
http://host.docker.internal:11434(适用于Docker环境)——因为在容器内部使用localhost是无法连接到外部服务器的。 -
在Linux系统中,如果
host.docker.internal无法解析,请在docker run命令中添加--network=host选项,然后使用http://localhost:11434进行连接。
使用“ollama pull medgemma”命令时,系统提示模型未找到
请更新Ollama,因为MedGemma需要较新的版本。重新运行安装程序,或者在macOS系统中,点击菜单栏图标然后选择“更新”,之后再尝试拉取模型。
响应速度极慢
-
检查
ollama ps命令的输出——如果模型占用了大量的CPU资源,说明它无法适应你的GPU或统一内存。此时应切换到4B版本的模型。 -
关闭那些占用大量内存的应用程序(通常来说,打开40个标签页的浏览器就是常见的罪魁祸首)。
-
在发送第一条消息时,模型需要几秒钟才能加载到内存中,之后的消息处理速度会快很多。
图片上传失败,或者模型忽略了上传的图片
-
请确认在下拉菜单中选择了
medgemma(多模态模型),而不是仅支持文本处理的模型。 -
请使用PNG或JPEG格式的图片文件;DICOM格式的文件需要先进行转换。
-
分辨率过高的图片可能会导致问题,在上传之前请将其尺寸调整到合理的范围(例如,长边长度为1024像素)。
端口3000已被其他程序占用
请更换端口号:将-p 3000:8080修改为-p 3001:8080,然后通过http://localhost:3001访问用户界面。
在加载27B模型时出现“内存不足”的错误
你的机器没有足够的空闲RAM/VRAM。建议继续使用medgemma:4b版本,或者先释放一些内存再尝试。其实4B版本的模型已经足够使用了,它的性能远超其体积和价格所暗示的水平。
总结
通过本教程,你从零开始构建了一个功能完备的私有医疗人工智能助手,而整个过程只需要使用三个工具和一些终端命令而已。
让我们回顾一下你所完成的任务:
-
安装了Ollama,并将专为医学领域设计的多模态模型MedGemma拉取到自己的机器上。
-
通过终端验证了模型的功能,随后使用Open WebUI为它搭建了一个完整的聊天界面。
-
正确配置了模型的各项功能,确保那些需要调用外部工具的功能不会影响到不支持这些功能的模型。
-
与一个能够理解放射学报告、临床术语以及医学图像的模型进行了交互,并成功上传了图片供其分析。
-
还学习了如何升级到27B版本的模型,以及如何在过程中识别并解决常见的问题。
现在你拥有一个完全运行在你自己机器上的私有人工智能助手。今后你可以进一步扩展它的功能,比如结合检索增强生成技术(RAG),将其集成到医学影像处理流程中,或者连接去标识化的临床数据集,从而开发出更先进的医疗人工智能应用。
祝你在构建人工智能辅助工具的道路上取得成功!
推荐阅读:



