开始使用
自部署 Mirobody
在你自己的基础设施上运行 Mirobody 引擎:能得到什么、三个步骤、数据如何流动,以及如何扩展。
在你自己的机器、服务器或云主机上运行 Mirobody。引擎以 Apache 2.0 开源:核心是一个可以直接 当作库调用的 Python 包(3.12 及以上),需要完整能力时再加上 HTTP 服务、后台 worker、 PostgreSQL(含 pgvector)与 Redis。源码位于 thetahealth/mirobody。
Mirobody 是什么、解决的是什么问题,见Mirobody 简介。本页讲的是自己 把它跑起来。
引擎里的三个步骤
Section titled “引擎里的三个步骤”代码结构、贡献方向与这份文档都按同样的三个步骤组织,即 C · S · A —— 其中的 A 既是 Answers,也是产出它的 agent。
| 步骤 | 含义 | 在包里的位置 | |
|---|---|---|---|
| ① | 采集(Collect) | 从设备 provider、上传的文档与端上批量样本接入数据 | mirobody/pulse/ |
| ② | 标准化(Standardize) | 将读数解析到规范编码(LOINC · SNOMED CT · RxNorm),归一单位,落为 FHIR R4 | mirobody/indicator/ |
| ③ | 问答(Answers) | agent 通过虚拟文件系统读取原始文档,给出带图表与引用的回答。同一份标准化序列也支撑了衍生用法:按计划产出的洞察、生成的报告,以及你在其上构建的预警提醒 | mirobody/agent/ |
Provider、文件解析与端上批量样本导入,各来源最终落在同一张指标表上。
以概念图与多语言别名把同一项检查的各种写法归到同一个编码。
两个 agent 共用一套 MCP 工具面,tool loop 可以在本地运行,也可以交给外部模型。回答只是标准化数据的一种用法,不是唯一一种。
同一项测量在每个来源那里都有不同的写法,单位与参考区间也各不相同 —— 仅这些差异就足以让一个人自己的历史数据无法互相比较。Mirobody 承担的正是这一层:指标名在入库之前被解析,而不是按到达时的字符串原样保存。血红蛋白、ヘモグロビン 与 hemoglobin 都解析到 LOINC 718-7;LDL-C 与「低密度脂蛋白胆固醇」都解析到 LOINC 13457-7。单位在同一遍处理中归一到 UCUM,因此 毫摩尔每升 与 mmol/L 记录为同一个单位。最终效果是:来自不同设备、不同实验室、不同语言的报告,可以落在同一条时间序列上。
解析在本地完成,所用词表随包发布,不需要密钥、配置与网络连接:
pip install mirobodymirobody resolve "LDL cholesterol" "血红蛋白" "ヘモグロビン"from mirobody.engine import resolve
resolve("血红蛋白").loinc # -> '718-7'标准化可以单独安装,因此这一步可以先用起来,不必运行其余服务。解析规则与随包词表见健康指标,作为库调用的接口见引擎即库。
provider 与端上批量样本在写入之前收敛到 StandardPulseData;文件抽取直接写入存储,保留报告原文的指标名,再由语义检索归并。两条通路都落在同一张指标表上,因此 agent 查询的是指标,而不是每家厂商一种形状。写入路径、其后的两张表以及聚合方式见数据流。
tool loop 的运行位置
Section titled “tool loop 的运行位置”每种方式对应一个 agent,区别在于tool loop 在谁那边运行。
| DeepAgent:引擎在你的部署中运行 | BaseAgent:由外部模型调用 | |
|---|---|---|
| tool loop 运行在 | 这里,你的部署里 | LLM 服务商那边,通过 HTTP 调用 /mcp |
| 适合 | 自己运行整套引擎 | Claude Desktop · Cursor · ChatGPT Apps · 任意 MCP 客户端 |
| 额外能力 | 虚拟文件系统、QuickJS、Agent Skills、图表 | MCP 工具面暴露出来的那些 |
引擎可以按用户签发一条个人 MCP URL(POST /personal/mcp),使某个人的 MCP 客户端只能访问他自己的数据。随包的 Web 客户端把它放在设置里;你自己的客户端也可以直接调这个端点。见Agent 类型与MCP 集成。
五个配置键各指向一组目录,引擎在启动时扫描它们。扩展不需要编译,也不需要在任何注册表里登记。
| 配置键 | 默认值 | 放什么 |
|---|---|---|
MCP_TOOL_DIRS | mirobody/agent/tools | 工具模块:一个函数或一个 *Service 类就是一个 MCP 工具 |
MCP_RESOURCE_DIRS | mirobody/agent/resources | MCP UI 资源 |
AGENT_DIRS | mirobody/agent | agent 实现 |
PROVIDER_DIRS | mirobody/pulse/providers | 数据 provider,每个来源一个 mirobody_<slug>/ 包 |
SKILL_DIRS | mirobody/agent/skills | Agent Skills:一个目录,里面放一个 SKILL.md |
在 config.{env}.yaml 中加入自己的目录,并置于列表最前,即可覆盖随包内容。见添加自定义工具、Agent Skills与开发 Provider。
运行形态与入口
Section titled “运行形态与入口”自部署是运行 Mirobody 的两种方式之一,两种方式都不只提供 API,还各自带有现成的入口:
| 入口 | 地址 | 说明 |
|---|---|---|
| 你自己的部署 | localhost:18080 | git clone → ./deploy.sh → 登录。数据留在你自己的机器上,自带的 Web 客户端是一个完整应用:/data 管文档与读数,/ask 是 agent,另有关爱圈共享:成员可以允许家人(也可以是医生)基于自己的记录向 AI 提问。 |
| 你自己的 MCP 端点 | localhost:18080/mcp | 供 Claude Desktop、Cursor 等 MCP 客户端接入;需要 HTTPS 或远程访问时设置 MCP_PUBLIC_URL。 |
| 托管版对话 | chat.mirobody.ai | 由我们运行的客户端。 |
| Mirobody Cloud | platform.mirobody.ai | 密钥、用量,以及用于在其上构建应用的健康数据 API,见云端标签页。 |
| 微信小程序 | 微信里搜 mirobody | 仅限国内、中文界面。后端与托管版对话是同一套,记录与指标也是同一份。 |
运行起来
按快速开始执行:克隆仓库、运行 ./deploy.sh、登录。
完成配置
在 config.{env}.yaml 里同时填 LLM key 和 embedding key,见配置。两者是不同的密钥;缺少 embedding key 时,健康指标会始终为 0。
按需扩展
用添加自定义工具加一个工具,或用开发 Provider加一个数据源。
参与贡献与支持
Section titled “参与贡献与支持”贡献同样按这三个步骤划分。其中门槛最低的一类是补全一个无法解析的指标名:用 mirobody resolve "<term>" 确认现状,在 resolver_overrides.tsv 中补一条映射,并在 test_engine_coverage.py 中补一个用例。
源码、issue 与 pull request
三个方向,以及怎么提交改动
解析有误的化验单是很有价值的 issue,请附上去标识后的样本
直接联系技术团队