关于 Mirobody
Mirobody 是一套开源健康数据系统,可在本地汇集记录并标准化检验项目名称和单位。它面向需要可追溯健康记录的个人与 Agent,提供离线解析器和通过 MCP 查询数据的工具。
主要功能
- 01将检验名称解析为 LOINC 编码
- 02使用 UCUM 标准化单位
- 03导入报告、设备和基因文件
- 04将读数关联到来源文档
- 05通过 Agent 工具查询健康记录
- 06离线运行解析器
适用场景
- 01统一不同检验报告中的项目名称
- 02比较不同来源和时间的健康读数
- 03将症状记录转换为编码数据
- 04向 MCP 客户端开放健康记录
MCP 相关
Mirobody 提供七个按登录用户限定范围的 MCP 工具:四个用于读取健康记录,三个用于解析名称和单位。服务端向 MCP 客户端开放记录数据和标准化操作。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
6收录的工具列表 · 更新于 1 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| name | string | 否 | The test name exactly as printed, any language. |
| unit | string | 否 | The unit as printed: g/dL, mmol/L, 次/分. Omit when none. |
| value | string|number | 否 | The result as printed: 13.5, <5, 阴性, Positive. |
| readings | array | 否 |
详细介绍
Mirobody
用数据映照你的身体。
一套标准,汇集所有来源,呈现完整的你——建立一份长期记录,帮助你了解健康状况的走向。
这个开源版本会在你的设备上,从化验报告、可穿戴设备和基因文件中建立这份记录,追溯每个数值的来源,并通过 MCP 向你的 AI Agent 开放数据。
只需一条命令即可标准化健康数据;用你自己的模型密钥在 Codespaces 中体验完整应用;也可以将应用、数据和模型全部在本地运行。
三份报告,同一项检测有三种名称。绘成一条趋势曲线,每个数值都能追溯到原始文件。
选择开始方式
| 你的目标 | 从这里开始 | 所需条件 |
|---|---|---|
| 标准化名称和单位 | 一条命令 | uv;无需模型或 API 密钥 |
| 在浏览器中体验完整应用 | GitHub Codespaces | GitHub 账户和你自己的模型 API 密钥 |
| 在自己的设备上运行应用、模型并保存记录 | 使用 Docker 实现 100% 本地运行 | 安装 Docker 和 Compose;16 GB 内存;无需 API 密钥 |
| 在自己的设备上运行应用并保存记录,无需 Docker | 不使用 Docker | Debian 或 Ubuntu;PostgreSQL 16;Python 3.12;你自己的模型 API 密钥 |
| 无需运行任何程序即可在自己的记录上使用 | 在 Theta Web 或 Theta 移动应用中试用 Mirobody | 账户 |
一条命令快速体验引擎
安装好 uv 后,将以下命令粘贴到终端:
uvx --python 3.12 mirobody resolve "LDL cholesterol" 血红蛋白 ヘモグロビン "Total Kolesterol" 血脂
无需克隆代码仓库、安装 Docker、模型或 API 密钥。uv 会为你准备 Python 和软件包;首次运行时需要联网下载。之后,解析器会使用内置词汇表离线工作。
血红蛋白 和 ヘモグロビン 都会解析为 718-7。血脂 则无法解析:它表示一个类别,而不是某一项检测。同一引擎也会在完整应用中标准化名称和单位。
在 Codespaces 中试用完整应用
使用自己的模型 API 密钥,在浏览器中运行 Web 应用。GitHub 会准备好运行环境;你无需在电脑上安装 Docker 或 Python。
- 创建 codespace,然后等待终端中的自动设置完成。它会启动应用、Postgres、worker 和合成演示数据。
- 打开终端中显示的设置链接,输入自己的模型 API 密钥:OpenRouter、OpenAI、Gemini、Anthropic、DeepSeek、DashScope,或任何兼容 OpenAI 的网关。只有在真实请求成功后,密钥才会保存。转发的应用端口默认设为私有。
- 在 Email code 选项卡中,以
[email protected]登录,验证码为111111。询问 “我的胆固醇有什么变化?” 演示数据包含你和[email protected]的记录,共有 2,019 条读数,其中妈妈的记录以只读方式与你共享。 - 在 Data 页面从
demo/upload/上传合成样本,查看新报告如何加入记录;或者切换到妈妈的记录并再次提问。
应用及其记录运行在 GitHub 云端;模型服务会接收并处理文档和问题。请使用随附的合成数据进行体验。Codespaces 有使用限制和计费规则;模型使用费用由你的模型提供商收取。完成后请停止 codespace。若想在自己的电脑上完全掌控一切,请使用下方的本地方式。
完全在本地运行
应用、记录和模型都在自己的电脑上运行。无需模型 API 密钥。 Docker Compose 会启动整个服务栈和 llama.cpp,其中包含一个小型问答模型和一个文档读取器:
git clone --depth 1 https://github.com/thetahealth/mirobody.git && cd mirobody
COMPOSE_PROFILES=local-cpu ./deploy.sh
请预留 16 GB 内存,其中至少 8 GB 分配给 Docker。无需 GPU;在 Windows 上,请在 WSL 2 终端中运行命令。首次启动需要联网下载容器镜像和模型权重。如果你的网络无法访问镜像仓库,deploy.sh 会提示并通过镜像源重试;.env 中的 DOCKER_MIRROR 用于指定你自己的镜像源。完成这些下载后,文档读取、标准化和问答都会在本地运行。使用 CPU 回答可能需要几分钟;Mac、NVIDIA 和 Windows 选项介绍了如何使用 GPU。
打开脚本显示的应用链接。本地模型已选好;使用上方的同一演示账号登录,然后提问或上传样本。如何选择模型对比了本地选项。
更想使用 Docker 搭配云端模型? 不指定本地模型配置文件运行 ./deploy.sh,然后将自己的模型密钥粘贴到显示的设置链接中。应用和记录保留在你的主机上;模型服务会处理你的文档和问题。
聊天计算对所有模型都使用本地 Python,并直接处理原始查询数据。可选计算器需要本地 Docker 镜像和守护进程连接;设置与数据流介绍了原生应用和容器化应用。查询视图无需该执行器即可提供内置统计信息。
无需 Docker 即可运行
不需要容器,也不会从注册表拉取任何内容。 在 Debian 或 Ubuntu 上,PostgreSQL 16 和 pgvector 来自发行版自带的软件包,应用直接从检出目录运行。Codespaces 路径执行的也是同样的安装:
git clone --depth 1 https://github.com/thetahealth/mirobody.git && cd mirobody
scripts/install_native.sh # PostgreSQL, pgvector, the Python package, a .env
scripts/start_native.sh # the worker and the app on port 18060
打开它打印出的链接,并使用 [email protected] 登录,验证码为 111111:演示记录已预先填充。通过打印出的设置链接添加模型密钥,即可启用文档提取和问答。install_native.sh 会使用 sudo 安装系统软件包,并为 postgres 账户写入一条 sudoers 规则,脚本运行时会说明这一点。
本地模型属于 Docker 路径,因此此路径通过模型服务来回答。其他方面与数据留在你设备上的部分中它上方的表格行一致:记录保存在你刚安装的 PostgreSQL 中,姓名与验证码不会离开设备。
你可以做什么
- 比较不同实验室的报告。 PDF、手机照片和电子表格共 23 种文件类型,都会汇集到同一份记录中。每项读数都链接到其来源页面。
- 导入日常数据。 导入 Apple Health 导出文件,或连接 Garmin、Oura 和 Whoop。
- 照顾家人。 邀请共享自己记录的人,或为从不登录的父母保留一份记录。
- 撰写健康日志。
headache since last night, BP 150/95, no fever会转换为一项编码后的主诉和两项编码后的读数;“no fever”不会被记录为发烧。 - 探索遗传数据。 上传 23andMe、AncestryDNA 或 WeGene 导出文件,或 VCF 文件,然后按 rsID、基因或区域提问。药物相关问题采用 CPIC 覆盖范围,不会更改用药。
- 使用自己的 Agent。 通过 MCP 连接 Claude Code、Codex 或 Cursor,或在 Python 中嵌入离线引擎。
收集 · 标准化 · Agent
| 阶段 | 功能 | 位置 |
|---|---|---|
| ① 收集 | 实验室报告、设备数据、照片、遗传文件和日志条目都可从各种来源导入;每项读数都会保留其来源文件。 | collect/ |
| ② 标准化 | A1c、HbA1c 和 Glycated Hemoglobin 会解析为同一代码,单位会统一为一种标准,且可离线完成:来自分散来源的读数会整理为同一张表中的规范行。无法归类的名称会保持未解析状态。 | engine/ · standardize/ |
| ③ Agent | 答案来自查询该表的工具,而不是模型的记忆:趋势、不同实验室和设备之间的比较,以及图表。每个数值都可追溯到其文件,因此你可以自行核查,而不必盲目信任。 | agent/ |
模型负责读取文档和推理;代码和单位来自软件包中捆绑的词汇表,而不是模型。读数如何在处理流水线中流转。
关爱家人
加入关怀圈本身不会分享任何内容。每位成员都可以决定其他人是否能查看或编辑自己的记录。对于从未登录的家长,你可以一直代为管理,直到他们认领记录并决定保留哪些权限。在操作指南中查看。
哪些内容保留在你的设备上
应用运行的位置与模型运行的位置是两项独立的选择。Mirobody 不会向任何地方报告使用情况。
| Codespaces + 模型密钥 | 本地 Docker + 模型密钥 | 100% 在本机运行 | |
|---|---|---|---|
| 应用和存储的记录 | 位于 GitHub 云端的 Codespace 中 | 位于你的设备上 | 位于你的设备上 |
| 发送给模型进行处理的文档和问题 | 根据模型供应商的条款发送给该供应商 | 根据模型供应商的条款发送给该供应商 | 保留在你的设备上 |
| 将名称映射为代码、将单位映射为 UCUM(② Standardize) | 使用捆绑的词汇表,在 Codespace 中处理 | 在你的设备上处理,不联网 | 在你的设备上处理,不联网 |
| 模型权重 | 由模型供应商管理 | 由模型供应商管理 | 从 Hugging Face 下载一次 |
命令行解析器在初次下载后,也可以在你的设备上运行,无需模型或网络连接。
只有在你关联设备后,设备供应商才能看到数据。在这些数据传输到你无法控制的网络之前,请阅读 SECURITY.md:其中列出了服务器可以调用的所有地址。
基于 Mirobody 构建
| 你的需求 | 从这里开始 |
|---|---|
| 在 Claude Code、Codex、Cursor 或 Gemini CLI 中访问你的记录 | Settings → MCP link,然后为每个客户端添加一行 |
| 在自己的代码中解析名称和单位 | pip install mirobody:离线运行,无需密钥,唯一依赖项为 numpy(库指南) |
| 为你的编码 Agent 传授工作流 | npx skills add thetahealth/mirobody --skill standardize-health-data(skills) |
| 添加新的设备供应商或工具 | 将文件放入 mirobody/collect/providers/ 或 mirobody/agent/tools/(CONTRIBUTING) |
| 无需部署即可试用应用 | Mirobody Web 演示,使用相同的合成演示文件 |
通过 MCP,这套技术栈提供七种工具,每种工具都仅适用于已登录用户:四种用于读取你的记录(读数、药物、基因型、药物基因组学),三种用于解析名称和单位。
安装 pip install mirobody 后,可在 Python 中使用同一引擎:
from mirobody.engine import resolve, resolve_reading
resolve("血红蛋白").loinc # '718-7' any language, one code
resolve_reading("total cholesterol", "5.0", "mmol/L").loinc # '14647-2' the unit picks the code...
resolve_reading("total cholesterol", "193", "mg/dL").loinc # '2093-3' ...mass, not moles
resolve("中性粒细胞百分比").loinc # '26511-6' Neutrophils/Leukocytes
resolve("血脂").resolved # False a category, not one test
可核验的数据
| 声明 | 核验方式 |
|---|---|
| 普通检查会以英语、中文、日语、俄语、爱沙尼亚语和土耳其语输出测试结果,得分为 345/345 | test_engine_coverage.py 会输出得分 |
| 具备量纲分析功能的 330 个 UCUM 单位,以及用于设备和实验室指标的 543 个目录成员 | 标准化 · 设备对照表 |
| 23andMe、AncestryDNA、WeGene、MyHeritage 和 FamilyTreeDNA 导出数据,以及基于 GRCh37 和 GRCh38 的 VCF,解码后均得到相同的 12 个基因中的 13 个调用;该结果在软件包附带的公开 1000 Genomes 样本上进行了测试 | test_packaged_examples.py · 公开基因型示例 |
软件包明确标注了其词汇版本:mirobody.BUNDLE_VERSION 为 loinc-2.83+2026.09.17-aacb2c715b56 | python -c "import mirobody; print(mirobody.BUNDLE_VERSION)" |
| 公开的健康 Agent 基准测试:ESL-Bench、MedHall-Bench、MedHarm-Bench | mirobody-eval · benchmarks/ |
Mirobody 是 Theta 背后的健康数据引擎。Theta 是一款已上线的 Web 和移动端消费级健康应用,目前拥有以下用户:
参与贡献
最有价值的贡献,是指出解析器处理错误的术语。运行 mirobody resolve "<term>";如果答案有误或为空,请提交报告,或提交附带测试用例的修复。这正是词汇扩展到新语言的方式:俄语检验项目和爱沙尼亚语维生素术语见 #88,土耳其语实验室报告拼写见 #140;每个术语对应 resolver_overrides.tsv 中的一行,以及一个测试用例。CONTRIBUTING.md 介绍了环境设置和检查步骤。
基于 HL7 FHIR、LOINC(由 Regenstrief Institute 提供)、UCUM、ICPC-3(WONCA)、CPIC、llama.cpp 和 deepagents,谨此致谢。术语许可信息见 LICENSE-3RD-PARTY。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。