接入 Codex/WorkBuddy 的 AI 医生!全家体检报告统一管理
说到 AI 看病,我觉得大家一定是豆包用的最多。支付宝曾推出一个蚂蚁阿福,但是说真的,我连下载都没下载,直接找豆老师最安心。
不过和豆老师聊天有个问题,那就是我没办法更好的管理我的各类检查、检验项目的结果。而且问的多了,很容易把我个人和家人的健康差异混在一起。
所以我一直在寻找一款可以本地化部署,可以管理自己的各类检查检验报告,体检报告,并且使用本地模型回答健康情况的应用。
皇天不负有心人,前段时间看到了一个非常牛的项目 —— MiroBody,它可以解析我们上传的图片、PDF 报告并实现检验检查项目的最小单元存档,并且支持家人档案,支持智能问答,甚至还可以通过基因检查结果进行深度分析。
此外,它还提供了 MCP 服务,可以将健康结果、报告共享给第三方 Agent,在我们授权认可的情况下交给如 Codex 的 Agent 进行解读和利用。

先来看看项目内部的运行逻辑。
医疗数据是 MiroBody 的核心资产,系统支持 PDF 格式的化验、体验报告单,也支持图片格式的化验、彩超结果。
甚至我们还可以手动填入一句话的主诉、服药、病痛情况,这些结果都会被结构化的保存下来。

刚好我家人这几天去医院做了一套检查,我这里直接用真实数据进行上传。
不知道其它地区如何,浙江这边所有医院的化验、检查、体检报告结果,都可以通过我们的浙里办 APP 下载 PDF 报告,所以配合 MiroBody 使用也非常方便,不用担心没有数据源的问题。

可以看到所有的 PDF 结果都被解析成了具体的指标项。左边是指标名称,右边则是最新值。
是的,MiroBody 针对同一个指标,会保存不同时间的历史数据,这就意味着它可以去分析某个指标的一个时间趋势,也代表它可以更深入的为我们的健康趋势提供建议。

手动输入的话比较随意,自然语言就可以。后去 MiroBody 也可以通过 LLMs 解析这些手动输入的健康信息。

有了这些健康数据后,我们就可以通过 MiroBody 内置的询问窗口问 Agent 健康信息了。
比如我问,最近的化验结果好不好,它会从我上传的这些报告里去查看每一条具体的明细指标,然后综合一些关联项进行评估。

结果方面,首先会有一个报告解读,里面对详细的指标范围进行一次概念性的介绍。接着会逐项去对比指标、历史指标、关联指标之间的逻辑,然后最终给我们一个综合性结论。
结论之后,它还会给我们需要和医生确认的一些内容。这明确支持 MiroBody 更多的定位是一个我自健康管理的助手以及协助者,而不是真正的医生。

在系统设置里,我们可以添加家人信息,后续在上传报告的时候就可以上传到家人对应的数据库中。
后续我们可以以家人的身份上传报告,也可以邀请家人自己使用这个应用来进行健康管理。

同样是问询界面,右上角可以切换不同的家庭用户。对应的就是切换到不同的指标数据库里。

最后是一个基因型数据。这个因为我没做过基因检测报告,所以没办法尝试。
感兴趣的朋友可以自己去安装体验一下,并且上传你的基因去进行解读。
<#&!53#&!>对了,还有关于 MiroBody 的 MCP 服务。同样在设置页面,填入当前服务部署的宿主机 IP 以及端口后,点击生成 MCP 链接。

把这个 HTTP MCP 端点发给局域网内的三方 Agent ,就可以实现报告的上传、解读、分析等等功能。
如果平时想通过 Agent 来管理的,再搭配 Agent 自己的远程访问就可以了。

好了,言归正传,我们来走一遍 MiroBody 项目的部署。这个项目最简单的部署方式就是通过 docker compose 来跑。
首先我们需要在极空间里创建 mirobody 这个文件,然后再新建一个文本文件,往里面填写下面的内容。
大家可以看到这份文件都是注释掉的。因为目前 MiroBody 内要求提供视觉模型、文本模型、对话模型,最优的方案就是 qwen3.8-flash 和 deepseek-v4.1-flash。

如果你不要走本地 ollama 的,那么就按照这一套全注释的方法配置,走系统内置的 API 端点。
# localdb 环境的部署覆盖文件。
# 会被只读挂载到容器内的 /app/config.localdb.yaml。
# 保持"只有注释"的状态即可,应用会回退到镜像内置的默认配置。
# 需要覆盖默认值时,在下方按 MiRobody 的配置规范追加键,例如:
# MODELS:
# my-gateway:
# llm_type: openai
# api_key: DEEPSEEK_API_KEY
# base_url: https://api.deepseek.com/v1
# model: deepseek-flash
# supports_image: true
#
# UTILS_VISION_MODEL: [deepseek-utils]
# UTILS_TEXT_MODEL: [deepseek-utils]
#
# 完整的可配置项与各字段含义,见仓库根目录的 config.llm.yaml。
# 改完执行 docker compose restart 生效。
内容填进去以后,再回到极空间文件管理,把文件夹重命名为 config.localdb.yaml。

下一步,我们来到极空间的 Docker 页面。新建一个 compose 项目,然后把存储位置选择刚才创建的 mirobody 文件夹,项目名称也同步填入 mirobody。

接下来是两个重点,分别在极空间的 yaml 区域和 .env 区域填入下面的两端代码。
MiroBody 这个项目的 yaml 和常规的不太一样,稍微有点复杂。但是极空间 NAS 目前的 Docker 应用也已经很成熟,支持相对路径引用 .env 来实现复杂变量引用。

在 yaml 文本输入框内填入下面的 docker-compose.yaml 代码。
services:
pg:
image: pgvector/pgvector:0.8.6-pg17-trixie
restart: unless-stopped
shm_size: 256mb
ports:
- "127.0.0.1:18062:5432"
environment:
POSTGRES_USER: holistic_user
POSTGRES_DB: holistic_db
POSTGRES_PASSWORD: ${PG_PASSWORD}
volumes:
- mirobody_postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U holistic_user -d ${PG_DBNAME:-holistic_db}"]
interval: 5s
timeout: 3s
retries: 12
start_period: 30s
mirobody_init:
image: thetahealth4mirobody/mirobody:1.5.3
user: "0:0"
restart: "no"
network_mode: none
healthcheck:
disable: true
command:
- sh
- -c
- >-
find /app/.theta/mcp/upload ( ! -user mirobody -o ! -group mirobody ) -exec chown mirobody:mirobody {} +
|| echo 'mirobody_init: could not give /app/.theta/mcp/upload to uid 10001; uploads may fail' >&2
volumes:
- mirobody_upload:/app/.theta/mcp/upload
mirobody: &mirobody
image: thetahealth4mirobody/mirobody:1.5.3
restart: unless-stopped
env_file:
- ./.env
ports:
- "18060:18060"
environment: &mirobody_env
ENV: localdb
PYTHONUNBUFFERED: "1"
HTTP_HOST: 0.0.0.0
HTTP_PORT: "18060"
SEED_DEMO_DATA: false
PG_HOST: pg
PG_PORT: "5432"
PG_USER: holistic_user
PG_DBNAME: holistic_db
PG_PASSWORD: ${PG_PASSWORD}
volumes:
- mirobody_upload:/app/.theta/mcp/upload
- ./config.localdb.yaml:/app/config.localdb.yaml:ro
depends_on:
pg:
condition: service_healthy
mirobody_init:
condition: service_completed_successfully
mirobody_worker:
<<: *mirobody
command: ["mirobody", "worker"]
ports: []
environment:
<<: *mirobody_env
healthcheck:
disable: true
depends_on:
pg:
condition: service_healthy
mirobody_init:
condition: service_completed_successfully
mirobody:
condition: service_healthy
volumes:
mirobody_postgres:
mirobody_upload:
在 .env 输入框内填入下面的内容。这里几个 key 需要自己通过 SSH 运行 openssl rand -hex 32来填写。
DEFAULT_TIMEZONE=Asia/Shanghai
# DEEPSEEK_API_KEY= Deepseek 用这个
# DASHSCOPE_API_KEY= 阿里的用这个
# 下面五个 Key ,都用 openssl rand -hex 32 生成,生成后不要再改
PG_PASSWORD=
PG_ENCRYPTION_KEY=
CONFIG_ENCRYPTION_KEY=
LOG_ENCRYPTION_KEY=
JWT_KEY=
初次跑完后,堆栈下会有一个 mirobody-init-1 的容器挂掉,这个不用管,它本身就是一个一次性的初始化容器,挂掉是正常的。

最后,AI 发展到现在,越来越多的场景化 Agent 如雨后春笋般涌现。
以极空间私有云等 AI NAS 为代表,7*24 运行的智能终端的重要性也越来越重要。尤其是一台性能更好的 NAS,更是继家庭存储后的 AI 中枢必备品。
极空间 NAS ,我比较推荐性能更强大的 Z425 轻享版、Z4Pro + 性能版两款,双十一马上要到,如果手头上急需一台集存储、任务运行为一体的设备,建议等一下双十一看看价格,择优选购。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
